接口异常检测方法、装置、服务器及系统
技术领域
本说明书涉及数据处理技术领域,尤其涉及一种接口异常检测方法、装置、服务器及系统。
背景技术
随着互联网的快速发展,基于互联网的应用程序越来越多,而且每个应用程序可以包含多个不同功能或机制的触发入口,即接口,通过接口,用户可以通过终端设备与相应的服务器进行数据交互。如果提供服务的接口出现异常,则终端设备或相应的服务器中会出现不可预知的后果,因此需要对提供服务的接口进行异常检测,尽早发现异常以采取相应补救措施。在对接口进行异常检测时,通常会通过业务系统从数据库中获取接口调用事件的接口日志,将接口的实例发送给异常检测的服务器,以便异常服务器根据接口实例对接口进行异常检测,由于很多实例中用于表示调用接口内各函数之间的关系的结构树都相同,且内存比较大,而处理这些实例的业务系统往往是包含多个服务器的服务器集群,各实例需要在服务器集群中传输,以便对同一个接口的实例进行整合,由于各实例中的结构树是重复的,占用内存有比较大,这样会造成很多重复的数据在服务器之间流转,造成带宽浪费,并影响限制集群规模的上限。所以,需要对异常检测的方法进行改进,解决接口异常检测过程中大量重复的数据传送的问题。
发明内容
基于此,本说明书提供了一种接口异常检测方法、装置、服务器和系统。
根据本说明书实施例的第一方面,提供一种接口异常检测系统,包括业务系统、存储系统;所述业务系统包括至少两个服务器;
所述存储系统,包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;
所述服务器,用于执行以下至少任一步骤:
获取指定分区的接口日志,基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的接口调用信息的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;或
接收其余服务器发送的结构树编码以及对应于同一结构树编码的统计信息,并获取所述结构树编码对应的结构树;将各分区结构树编码相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
根据本说明书实施例的第二方面,提供一种接口异常检测方法,包括:
第一服务器从数据存储系统的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的接口调用信息的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;将各分区的结构树编码以及对应于所述结构树编码的统计信息发送至第二服务器;
第二服务器获取所述结构树编码对应的结构树;将各分区结构树编码相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
根据本说明书实施例的第三方面,提供一种接口异常检测方法,所述方法包括:
从数据存储系统的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;
基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的接口调用信息的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;
将各分区的结构树编码以及对应于所述结构树编码的统计信息发送至另一个或多个服务器;以使当所述服务器获取所述结构树编码对应的结构树,将各分区结构树编码相同的统计信息进行整合后,根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
根据本说明书实施例的第四方面,提供一种接口异常检测方法,所述方法包括:
接收一个或多个服务器发送的各分区的结构树编码以及所述结构树编码对应的统计信息,所述结构树编码用于描述结构树的唯一性,所述结构树为所述服务器从数据存储系统的指定分区获取的接口日志后,基于所获取的接口日志,生成实例调用接口的结构树,所述结构树用于描述被所述实例调用的各函数间的调用关系;所述统计信息为所述指定分区中结构树相同的各实例的接口调用信息的统计信息;
获取所述结构树编码对应的结构树;
将各分区结构树相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树的整合后的统计信息对所述接口进行异常检测。
根据本说明书实施例的第五方面,提供一种接口异常检测方法,一种接口异常检测方法,所述方法包括:
从数据存储系统的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;
基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的接口调用信息的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;
接收其余服务器发送的结构树编码以及对应于同一结构树编码的统计信息;
获取所述结构树编码对应的结构树;
将各分区结构树编码相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
根据本说明书实施例的第六方面,提供一种接口异常检测装置,所述装置包括:
获取模块,用于从数据存储系统的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;
生成模块,用于基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的接口调用信息的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;
发送模块,用于将各分区的结构树编码以及对应于所述结构树编码的统计信息发送至另一个或多个服务器;以使当所述服务器获取所述结构树编码对应的结构树,将各分区结构树编码相同的统计信息进行整合后,根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
根据本说明书实施例的第七方面,提供一种接口异常检测装置,所述装置包括:
接收模块,用于接收一个或多个服务器发送的各分区的结构树编码以及所述结构树编码对应的统计信息,所述结构树编码用于描述结构树的唯一性,所述结构树为所述服务器从存储系统的指定分区获取的接口日志后,基于所获取的接口日志,生成实例调用接口的结构树,所述结构树用于描述被所述实例调用的各函数间的调用关系;所述统计信息为所述指定分区中结构树相同的各实例的接口调用信息的统计信息;
获取模块,用于获取所述结构树编码对应的结构树;
整合模块,用于将各分区结构树相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树的整合后的统计信息对所述接口进行异常检测。
根据本说明书实施例的第八方面,提供一种接口异常检测装置,所述装置包括:
第一获取模块,用于从数据存储系统的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;
生成模块,用于基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的接口调用信息的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;
接收模块,用于接收其余服务器发送的结构树编码以及对应于同一结构树编码的统计信息;
第二获取模块,用于获取所述结构树编码对应的结构树;
整合模块,用于将各分区结构树编码相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。根据本说明书实施例的第九方面,提供一种服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现任一实施例所述的方法。
应用本说明书实施例方案,在对接口进行异常检测时,业务系统中的各服务器从指定分区中获取接口日志后,基于获取的接口日志,将接口的各实例转化为描述被实例调用的接口内各函数间的调用关系的结构树以及结构树编码相同的各实例的接口调用信息的统计信息,并生成标识该结构树唯一性的结构树编码。然后各服务器将本分区的结构树编码和该结构树编码对应的统计信息发送到指定的服务器,指定的服务器获取该结构树编码对应的结构树,并将各分区相同结构树编码对应的统计信息进一步整合,以便执行异常检测的服务器可以根据调用接口的若干实例的结构树和对应于各结构树的整合后的统计信息对所述接口进行异常检测。通过将接口的各实例用结构树和统计信息来表示,并为占用内存较大的结构树生成一个占用内存较小的结构树编码,在将各分区的实例传输到指定服务器进行进一步汇总整合时,可以用结构树编码代替结构树,且结构树相同的实例进行了整合,这样可以避免内存较大的结构树在服务器之间重复传送,大大节省了带宽。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1a是本说明书一个实施例的一种接口异常检测系统示意图;
图1b是本说明书一个实施例的一种接口异常检测系统示意图;
图2是本说明书一个实施例的本说明书一个实施例的一种接口异常检测方法的应用场景图;
图3是本说明书一个实施例的本说明书一个实施例的一种接口异常检测方法流程图;
图4是本说明书一个实施例的本说明书一个实施例的一种接口异常检测方法流程图;
图5a是本说明书一个实施例的本说明书一个实施例的一种接口异常检测方法流程图;
图5b是本说明书一个实施例的本说明书一个实施例的一种接口异常检测系统的示意图;
图6是本说明书一个实施例的本说明书一个实施例的一种接口异常检测装置的逻辑结构图;
图7是本说明书一个实施例的本说明书一个实施例的一种接口异常检测装置的逻辑结构图;
图8是本说明书一个实施例的本说明书一个实施例的一种接口异常检测装置的逻辑结构图;
图9是本说明书一个实施例的用于实施本说明书方法的服务器的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
随着互联网的快速发展,基于互联网的应用程序越来越多,而且每个应用程序可以包含多个不同功能或机制的触发入口,即接口,通过接口,用户可以通过终端设备与相应的服务器进行数据交互。如果提供服务的接口出现异常,则终端设备或相应的服务器中会出现不可预知的后果,因此需要对提供服务的接口进行异常检测,尽早发现异常以采取相应补救措施。在对接口进行异常检测时,通常会通过业务系统从数据库中获取接口调用事件的接口日志,将接口的实例发送给异常检测的服务器,以便异常服务器根据接口实例对接口进行异常检测,由于很多实例中用于表示调用接口内各函数之间的关系的结构树都相同,且内存比较大,而处理这些实例的业务系统往往是包含多个服务器的服务器集群,各实例需要在服务器集群中传输,以便对同一个接口的实例进行整合,由于各实例中的结构树是重复的,占用内存有比较大,这样会造成很多重复的数据在服务器之间流转,造成带宽浪费,并影响限制集群规模的上限。
基于此,本说明书实施例提供一种接口异常检测系统,如图1a所示,所述接口异常检测系统包括业务系统11、存储系统12;其中,业务系统11可以是服务器集群,该服务器集群包括至少两个服务器,比如服务器111,112、113,由这些服务器共同完成接口异常检测任务。存储系统12,包括若干分区,每个分区可以用一个分区号标识,每个分区存储有至少一个接口的接口日志,所述接口日志是实例调用接口生成的。存储系统可以是多台服务器组成的分布式存储系统,比如HBASE。某些需要进行接口异常检测的业务系统在执行接口调用任务后,可以将接口调用相关的接口日志存储到存储系统的各个分区。
其中,业务系统11中的各服务器,用于执行以下至少任一步骤:
获取指定分区的接口日志,基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;或
接收其余服务器发送的结构树编码以及对应于同一结构树编码的统计信息,并获取所述结构树编码对应的结构树;将各分区结构树编码相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
业务系统11中的服务器在接收到查询接口日志的查询任务时,会从存储系统中获取指定分区的接口日志。由于接口日志存储在存储系统的各个分区当中,而接口日志的数据量是非常大的,往往靠一台服务器是无法处理所有的接口日志,因此要通过多台服务器共同处理。在某些实施例中,查询任务中携带有所要查询的接口日志在存储系统中分布的分区号,业务系统中的各个服务器接收到查询任务时,可以根据分区号去存储系统中获取指定分区的接口日志。在某些实施例中,如图1b所示,异常检测系统还可以包括一个定时调度系统13,定时调度系统会定时向业务系统中的一台服务器发送一个查询请求,定是调度系统会保证每次查询请求只发送给一台服务器,当然,定时调度系统可以每次都只发给业务系统中的而同一台服务器,也可以每次发给不同的服务器,但是每次只会有一台服务器会收到查询请求。收到查询请求的服务器,会根据该查询请求,给业务系统中的各服务器分配查询任务,查询任务会携带所要查询的接口日志在存储系统中的分区号。举个例子,定时调度系统13每隔10分钟会向业务系统中的一台服务器发送一个查询请求,假设给服务11发送了一台查询请求,服务器11接收到查询请求后,会给业务系统的服务器分配查询任务,比如让服务器11查询存储系统中分区号为0-20的分区存储的接口日志,让服务12查询存储系统中分区号为20-40的分区存储的接口日志,让服务器13查询存储系统中分区号为40-60的接口日志。当然,服务器11的工作可以是只分配查询任务,不用查询接口日志,当然服务器11也可以参与查询接口日志的工作,负责查询某些分区的接口日志。
业务系统中的各服务器在接收到查询任务后,可以根据分区号到存储系统中查询指定分区的接口日志,在获取接口日志后,服务器会将自己获取的每一条接口日志都转化为实例,每个实例都包括结构树和一些接口调用的相关信息,其中,结构树用来描述实例调用接口的各函数之间的调用关系,比如,先调用接口中A函数,A函数再调用B函数,B函数调用C函数,则其内部函数的调用结构为A-B-C。由于很多实例的结构树是相同,只是接口调用的相关信息不一样,因此,可以为一个结构树生成一个标识该结构树唯一性的结构树编码,用结构树编码来表示结构树。在某些实施例中,可以通过哈希算法来生成结构树的结构树编码,比如将某一个结构树通过MD5算法计算,便可以得到唯一的一个固定长度的字符串,这个字符串便是可以标识结构树的唯一性的结构树编码。当然,本说明书实施例不仅仅局限于哈希算法,任何可以保证根据结构树计算得到的结构树编码的唯一性算法都在本说明书保护范围之内。在将各条日志数据转化为实例后,服务器还需要的对指定分区内结构树相同的各实例的接口调用信息进行整合,得到统计信息。其中,统计信息可以是在对接口进行异常检测时,所需要用到的一些指标信息。在某些实施例中,统计信息可以包括接口调用次数,接口调用次数反映了一个接口的调用量,可以根据接口调用量来推测一个接口是否稳定、接口调用时长,即每次接口调用的耗时、接口调用是否成功的指示信息、接口调用的入参和/或接口调用的出参等信息,当然,具体统计信息需要包括哪些指标可以根据实际情况去设置。统计信息为对结构树相同的实例的接口调用次数、接口调用时长、以及是否调用成功等信息的汇总。
各服务器将指定分区的结构树相同的实例进行汇总后,便得到了一个或多个结构树,以及与这些结构树对应的统计信息,比如结构树A(结构树编码A1),统计信息1,结构树B(结构树编码B1),统计信息2。由于对接口进行异常检测,需要将同一个接口的所有实例汇聚到一起,然后才能基于接口的所有实例去进行检测。而目前,每台服务器只是汇聚了本分区的实例的结构树和统计信息,因而还需要将各个分区的实例的结构树和统计信息进一步汇聚,把结构树相同的实例的统计信息汇聚到一台服务器。可以从上述查询接口日志并转化为实例的服务器中选出一台或多台服务器,用于对各个分区结构树相同的实例的统计信息进一步整合。当然,也可以从业务系统中再选出其他的服务器,用于对各分区的区结构树相同的实例的统计信息进一步整合。比如业务系统中有服务器A、服务器B、服务器C、服务器D、服务器E,服务器F在最初分配查询任务时,可以给这6台服务器都分配查询任务,这6台服务器将查询的指定分区的接口日志转化为实例,并对本分区的结构树相同的实例进行整合后,再从这6台服务器中选出2台服务器,用于接收其他服务器发送的各分区的结构树编码和统计信息,然后对分区的结构树编码相同的统计信息进一步整合。当然,也可以在最初分配查询任务时,只给其中的服务器A、服务器B、服务器C、服务器D、服务器E分配查询任务,这5台服务将查询的指定分区的接口日志转化为实例,并对本分区的结构树相同的实例进行整合后,再发送给剩余的服务器F,由F来对各分区的实例进行整合。
在一个实施例中,可以通过哈希一致性算法来选出一台或多台服务器来对各分区中结构树相同的实例的统计信息进行整合。举个例子,假设现在服务器正在处理某一时间点的数据,可以将此时的时间转化为对应的unixtime,假设业务系统中的服务器总数量为N,要选出来的服务器的序号为M,则M=unixtime%N。通过哈希一致性算法,即可以选出一台服务器。当然可以只选择一台服务器来对各分区的所有结构树对应的统计信息进行整合,也可以针对不同的结构树选出不同的服务器来对各分区的相同结构树对应的统计信息进行整合。比如,假设有20台服务器,这20台服务器分布有结构树A、结构树B、结构树C、结构树D,可以通过哈希一致算法从20台服务器选一台服务器,其余的服务器都将结构树编码和对应的统计信息发送到这台服务器中,这台服务器再对相同结构树编码的统计信息进行整合。当然,也可以从这20台服务器包含结构树A的服务器中,通过哈希一致算法选出一台服务器,用于接收其余的包含结构树A的服务器发送的结构树A的编码和对应的统计信息,对其进行整合,然后再从包含结构树B的服务器中选一台服务器,接收其余包含结构树B的服务器发送的结构树B的编码和对应的统计信息,然后再进行整合。由于对于接口的实例来说,其结构树所占的内存几乎占整个实例的90%,而其他的接口调用信息只占很小的一部分内存,而实例中有很多实例的结构树都是一样的,如果直接传输整个实例,将会重复传输这些占用内存较大的结构树,因此在服务器之间传输这些实例时,可以先将各服务器中的相同结构树的实例进行整合,得到结构树和各实例接口调用信息的统计信息,然后再以占用内存比结构树小很多的结构树编码代替结构树进行传输,这样可以避免在整合各服务器中的接口的实例时,占用内存较大的相同的结构树重复的传输,可以大大节省带宽。
被选出来对各分区相同结构树对应的统计信息进行整合的服务器在接收到其余服务器发送的结构树编码后,还需要获取结构树编码对应的结构树。在某些实施例中,可以由指定的一台服务器向该对各分区统计信息进行整合的服务器发送结构树,当然各服务器在基于接口日志生成结构树、结构树编码以及本分区结构树相同的各实例的统计信息后,也可以有指定的服务器将结构树以及对应的结构树编码存储到存储系统,然后对各分区统计信息进行整合的服务器在接收到结构树编码后,可以通过结构树编码去存储系统中获取该结构树编码对应的结构树。其中,所述指定的服务器可以通过哈希一致性算法确定。对各分区统计信息进行整合的服务器会将接收到的各分区结构树编码相同的统计信息再进一步整合,以便根据调用接口的各个实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。在某些实施例中,对各分区统计信息进行整合的服务器得到各结构树以及该结构树对应的整合后的统计信息后,可以将各结构树和对应的整合后的统计信息存储到存储系统。
当然,整合之后可以按照接口的维度将各结构树和对应于各结构的整合后的统计信息归类,比如可以将同一个接口对应的实例的结构树和整合后的统计信息发送到一台服务器,然后再运行接口异常检测算法进行检测。当然后也可以将各实例的结构树和对应于各结构树编码的整合后的统计信息发送至某台专门用于异常检测的服务器,该服务器按照接口维度对各结构树和对应于结构树的整合后的统计信息分类,然后再运行接口异常检测算法对各接口进行异常检测。在某些实施例中,执行异常检测的服务器在基于各接口的实例的结构树以及整合后的统计信息对接口进行异常检测后,可以将异常检测的结果存储的存储系统中。
采用本说明书实例的方案,可以在接口异常检测过程中,将每个服务器中接口的各实例用结构树和统计信息表示,并生成唯一标识各结构树的结构树编码,在服务器之间传输接口的实例时,用占用内存较小的结构树编码来代替占用内存较大的结构树,可以避免相同的结构树重复传输,可以大大节省带宽。
另外,本说明书实施例还提供了一种接口异常检测方法,图2为该方法的一个应用场景图,第一服务器22从数据存储系统21的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;将各分区的结构树编码以及对应于所述结构树编码的统计信息发送至第二服务器23;
第二服务器23获取所述结构树编码对应的结构树;将各分区结构树编码相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
其中,第一服务器和第二服务器可以是一台独立的服务器,可以是有多台服务器组成的服务器集群。
第一服务器在接收到查询接口日志的查询任务时,会从存储系统中获取指定分区的接口日志。由于接口日志存储在存储系统的各个分区当中,在某些实施例中,查询任务中携带有所要查询的接口日志在存储系统中分布的分区号,业务系统中的各个服务器接收到查询任务时,可以根据分区号去存储系统中获取指定分区的接口日志。在某些实施例中,可以通过定时调度系统会定时向某一台第一服务器发送一个查询请求,定是调度系统会保证每次查询请求只发送给一台第一服务器,当然,定时调度系统可以每次都只发给业务系统中的而同一台服务器,也可以每次发给不同的服务器,但是每次只会有一台服务器会收到查询请求。收到查询请求的第一服务器,会根据该查询请求,给其余的各第一服务器分配查询任务,查询任务会携带所要查询的接口日志在存储系统中的分区号。
各第一服务器在接收到查询任务后,可以根据分区号到存储系统中查询指定分区的接口日志,在获取接口日志后,服务器会将自己获取的每一条接口日志都转化为实例,每个实例都包括结构树和一些接口调用的相关信息,其中,结构树用来描述实例调用接口的各函数之间的调用关系。由于很多实例的结构树是相同,只是接口调用的相关信息不一样,因此,可以为一个结构树生成一个标识该结构树唯一性的结构树编码,用结构树编码来表示结构树。在某些实施例中,可以通过哈希算法来生成结构树的结构树编码,比如将某一结构树通过MD5算法计算,便可以得到唯一的一个固定长度的字符串,这个字符串便是可以标识结构树的唯一性的结构树编码。当然,本说明书实施例不仅仅局限于哈希算法,任何可以保证根据结构树计算得到的结构树编码的唯一性算法都在本说明书保护范围之内。在将各条日志数据转化为实例后,服务器还需要的对指定分区内结构树相同的各实例的接口调用信息进行整合,得到统计信息。其中,统计信息可以是在对接口进行异常检测时,所需要用到的一些指标信息。在某些实施例中,统计信息可以包括接口调用次数,接口调用次数反映了一个接口的调用量,可以根据接口调用量来推测一个接口是否稳定、接口调用时长,即每次接口调用的耗时、接口调用是否成功的指示信息、接口调用的入参和/或接口调用的出参等信息,当然,具体统计信息需要包括哪些指标可以根据实际情况去设置。统计信息为对结构树相同的实例的接口调用次数、接口调用时长。以及是否调用成功等信息的汇总。
第一服务器在得到指定分区的结构树、结构树编码以及相同结构树的实例的接口调用的统计信息后,会将结构树编码和统计信息发送给第二服务器,当然第一服务器可以将所有的结构树编码和统计信息都发送到同一台第二服务器,也可以将相同的结构树编码和统计信息分别发送到不同的第二服务器。第二服务器在接收到结构树编码和统计信息后,会获取该结构树编码对应的结构树。在某些实施例中,第二服务器可以从指定的第一服务器中获取结构编码对应的结构树,比如,可以由第一服务器中的指定的服务器向第二服务器发送结构树和统计信息,其余的则发送结构树编码和统计信息。在某些实施例中,第一服务器在生成结构树、结构树编码以及结构树相同的各实例的统计信息后,可以有指定的服务器将各结构树和对应的结构树编码发送给存储系统,然后第二存储系统可以根据结构树编码从存储系统中获取结构树。其中,指定的服务器可以基于哈希一致性算法确定。
第二服务器将接收到的各分区结构树编码相同的统计信息再进一步整合,以便执行异常检测的服务器根据调用接口的各个实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。当然,执行异常检测的服务器可以是第二服务器,也可以是其他的服务器。在某些实施例中,第二服务器将接收到的各分区结构树编码相同的统计信息进一步整合后,将各结构树和所述结构树对应的整合后的统计信息存储的存储系统。在某些实施例中,第二服务器在将接收到的各分区结构树编码相同的统计信息进一步整合后,还会区分每个接口对应的若干实例的结构树和对应于各结构树编码的整合后的统计信息,并将区分出的结果发送给执行异常检测的服务器。比如,第二服务器会以接口维度将各结构树和结构树对应的统计信息分类,将分类后的结构树和对应的统计信息发送给执行异常检测的服务器,以便异常检测服务对基于这些结构树和结构树对应的统计信息对各接口进行异常检测。
由于对于接口的实例来说,其结构树所占的内存几乎占整个实例的90%,而其他的接口调用信息只占很小的一部分内存,而实例中有很多实例的结构树都是一样的,如果直接传输整个实例,将会重复传输这些占用内存较大的结构树,因此在第一服务器将这些实例传输给第二服务器时,可以先将第一服务器中的相同结构树的实例进行整合,得到结构树和各实例接口调用信息的统计信息,然后再以占用内存比结构树小很多的结构树编码代替结构树进行传输,这样可以避免在第一服务器将的接口的实例时传给第二服务器时,占用内存较大的相同的结构树重复的传输,可以大大节省带宽。
以下从第一服务器的处理过程来解释本说明书提供的接口异常检测方法,如图3所示,所述方法包括S302-S306:
S302、从数据存储系统的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;
S304、基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;
S306、将各分区的结构树编码以及对应于所述结构树编码的统计信息发送至另一个或多个服务器;以使当所述一个或多个服务器获取所述结构树编码对应的结构树,将各分区结构树编码相同的统计信息进行整合后,根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
在一个实施例中,从数据存储系统的指定分区获取接口日志之前,还包括:
接收查询接口日志的查询任务,所述查询任务携带有所述指定分区的分区号。
在一个实施例中,所述查询任务为指定的服务器在接收到定时调度系统发送的定时触发的查询请求后分配。
在一个实施例中,所述结构树编码基于哈希算法确定。
在一个实施例中,所述统计信息包括接口调用次数、接口调用时长、接口调用是否成功的指示信息、接口调用的入参和/或接口调用的出参。
其中,各实施例的具体实现细节可参考上述异常检测方法中的各实施例的具体实现方式,在次不再赘述。
以下从第二服务器的处理过程来解释本说明书提供的接口异常检测方法,如图4所示,所述方法包括S402-S406:
S402、接收一个或多个服务器发送的各分区的结构树编码以及所述结构树编码对应的统计信息,所述结构树编码用于描述结构树的唯一性,所述结构树为所述服务器从存储系统的指定分区获取的接口日志后,基于所获取的接口日志,生成实例调用接口的结构树,所述结构树用于描述被所述实例调用的各函数间的调用关系;所述统计信息为所述指定分区中结构树相同的各实例的接口调用信息的统计信息;
S404、获取所述结构树编码对应的结构树;
S406、将各分区结构树相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树的整合后的统计信息对所述接口进行异常检测。
在一个实施例中,获取所述结构树编码对应的结构树包括:
从指定的服务器中获取所述结构树编码对应的结构树。
在一个实施例中,所述结构树编码基于哈希算法确定。
在一个实施例中,所述统计信息包括接口调用次数、接口调用时长、接口调用是否成功的指示信息、接口调用的入参和/或接口调用的出参。
在一个实施例中,所述指定的服务器基于哈希一致性算法确定。
在一个实施例中,获取所述结构树编码对应的结构树还包括:
基于所述结构树编码从存储系统中获取所述结构树编码对应的结构树,其中,所述结构树为所述第一服务器生成后,存储到所述存储系统。
在一个实施例中,将各分区结构树编码相同的统计信息进行整合后,还包括:
区分出每个接口对应的若干实例的结构树和对应于各结构树编码的整合后的统计信息,并将区分出的结果发送给执行异常检测的服务器。
在一个实施例中,各分区结构树编码相同的统计信息进行整合之后,还包括:
将所述结构树和整合后的统计信息存储到存储系统。
其中,各实施例的具体实现细节可参考上述异常检测方法中的各实施例的具体实现方式,在次不再赘述。
本说明书实施例还提供了一种接口异常检测方法,所述方法可用于独立的服务器,或者是服务器集群,如图5a所示,所述方法包括以下步骤:
S502、从存储系统的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;
S504、基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的接口调用信息的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;
S506、接收其余服务器发送的结构树编码以及对应于同一结构树编码的统计信息;
S508、获取所述结构树编码对应的结构树;
S5010、将各分区结构树编码相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
在一个实施例中,从数据存储系统的指定分区获取接口日志之前,还包括:
接收查询接口日志的查询任务,所述查询任务携带有所述指定分区的分区号。
在一个实施例中,所述查询任务为指定的服务器在接收到定时调度系统发送的定时触发的查询请求后分配。
在一个实施例中,所述结构树编码基于哈希算法确定。
在一个实施例中,所述统计信息包括接口调用次数、接口调用时长、接口调用是否成功的指示信息、接口调用的入参和/或接口调用的出参。
在一个实施例中,获取所述结构树编码对应的结构树包括:
从指定的服务器中获取所述结构树编码对应的结构树。
在一个实施例中,所述指定的服务器基于哈希一致性算法确定。
在一个实施例中,获取所述结构树编码对应的结构树还包括:
基于所述结构树编码从存储系统中获取所述结构树编码对应的结构树,其中,所述结构树为所述第一服务器生成后,存储到所述存储系统。
在一个实施例中,将各分区结构树编码相同的统计信息进行整合后,还包括:
区分出每个接口对应的若干实例的结构树和对应于各结构树编码的整合后的统计信息,并将区分出的结果发送给执行异常检测的服务器。
在一个实施例中,各分区结构树编码相同的统计信息进行整合之后,还包括:
将所述结构树和整合后的统计信息存储到存储系统。
其中,各实施例的具体实现细节可参考上述异常检测方法中的各实施例的具体实现方式,在次不再赘述。
为了进一步解释本说明书实施例的接口异常检测方法和系统,以下再以一个具体的实施例加以说明。
如图5b所示,为一个接口异常检测系统,该系统包括存储系统51、业务系统52、定时调度系统53。其中,存储系统51为分布式存储系统,包括多个分区,每个分区都存储有接口日志。业务系统52中包括多台服务器。定时调度系统53向业务系统52中的一个服务器521发送定时触发的查询请求,服务器521接收到查询请求后,会向其他的服务器(服务器522、服务器523、服务器524)分配查询任务,查询任务中携带有各服务器所要查询的接口日志在存储系统中的分区号,服务器522-524会根据分区号从存储系统52中获取指定分区的接口日志。然后服务器522-524会将获取的每条接口日志转化为实例,实例包括结构树和接口调用信息,结构树用于描述实例调用的接口的各函数之间的调用关系,服务器522-524会将各结构树通过MD5算法计算得到各结构树的结构树编码,该结构树编码可以唯一标识该结构树。然后各服务器将结构树相同的实例的接口调用信息整合得到统计信息,统计信息包括接口调用次数、接口调用时长、接口调用是否成功的指示信息、接口调用的入参和/或接口调用的出参。服务器522-524在得到指定分区的实例的结构树、结构树编码以及统计信息后,会通过哈希一致性算法选出一台服务器,用于对各分区的相同结构树编码对应的统计信息进行整合。假设哈希一致性算法选出的服务器为服务器524。服务器522和服务器523会将本分区的各结构树编码以及该结构树编码对应的统计信息发送给服务器524,服务器524在接收到这些结构树编码和统计信息后,会将相同结构树编码的统计信息进一步整合,比如将调用次数叠加等。同时,服务器524会从服务器523或者服务器522中获取结构树编码对应的结构树,服务器524在对各分区的相同结构树对应的统计信息进行整合后,会将各结构树和对应的整合后的统计信息发送到存储系统52。然后服务器524会按照接口维度,将结构树和结构树对应的整合后的统计信息分类,然后基于各接口的多个实例的结构树以及结构树对应的统计信息,对各个接口进行异常检测,然后将检测结果存储到存储系统52中。
以上实施例中的各种技术特征可以任意进行组合,只要特征之间的组合不存在冲突或矛盾,但是限于篇幅,未进行一一描述,因此上述实施方式中的各种技术特征的任意进行组合也属于本说明书公开的范围。
如图6所示,是本说明书一个实施例的一种接口异常检测装置,所述装置可包括:
获取模块61,用于从数据存储系统的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;
生成模块62,用于基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;
发送模块63,用于将各分区的结构树编码以及对应于所述结构树编码的统计信息发送至另一个或多个服务器;以使当所述服务器获取所述结构树编码对应的结构树,将各分区结构树编码相同的统计信息进行整合后,根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
在一个实施例中,从数据存储系统的指定分区获取接口日志之前,还包括:
接收查询接口日志的查询任务,所述查询任务携带有所述指定分区的分区号。
在一个实施例中,所述查询任务为指定的服务器在接收到定时调度系统发送的定时触发的查询请求后分配。
在一个实施例中,所述结构树编码基于哈希算法确定。
在一个实施例中,所述统计信息包括接口调用次数、接口调用时长、接口调用是否成功的指示信息、接口调用的入参和/或接口调用的出参。
如图7所示,是本说明书一个实施例的一种接口异常检测装置,所述装置可包括:
接收模块71,用于接收一个或多个服务器发送的各分区的结构树编码以及所述结构树编码对应的统计信息,所述结构树编码用于描述结构树的唯一性,所述结构树为所述服务器从数据存储系统的指定分区获取的接口日志后,基于所获取的接口日志,生成实例调用接口的结构树,所述结构树用于描述被所述实例调用的各函数间的调用关系;所述统计信息为所述指定分区中结构树相同的各实例的统计信息;
获取模块72,用于获取所述结构树编码对应的结构树;
整合模块73,用于将各分区结构树相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树的整合后的统计信息对所述接口进行异常检测。
在一个实施例中,获取所述结构树编码对应的结构树包括:
从指定的服务器中获取所述结构树编码对应的结构树。
在一个实施例中,所述指定的服务器基于哈希一致性算法确定。
在一个实施例中,获取所述结构树编码对应的结构树还包括:
基于所述结构树编码从存储系统中获取所述结构树编码对应的结构树,其中,所述结构树为所述一个或多个服务器生成后,存储到所述存储系统。
在一个实施例中,将各分区结构树编码相同的统计信息进行整合后,还包括:
区分出每个接口对应的若干实例的结构树和对应于各结构树编码的整合后的统计信息,并将区分出的结果发送给执行异常检测的服务器。
在一个实施例中,各分区结构树编码相同的统计信息进行整合之后,还包括:
将所述结构树和整合后的统计信息存储到存储系统。
在一个实施例中,所述结构树编码基于哈希算法确定。
在一个实施例中,所述统计信息包括接口调用次数、接口调用时长、接口调用是否成功的指示信息、接口调用的入参和/或接口调用的出参。
如图8所示,是本说明书一个实施例的一种接口异常检测装置,所述装置80可包括:
第一获取模块81,用于从数据存储系统的指定分区获取接口日志,其中,所述存储系统包括若干分区,每个分区存储有至少一个接口日志,所述接口日志是实例调用接口生成的;
生成模块82,用于基于所获取的接口日志,生成所述实例的结构树、描述所述结构树唯一性的结构树编码、以及所述指定分区中结构树编码相同的各实例的接口调用信息的统计信息,所述结构树用于描述被所述实例调用的接口内各函数间的调用关系;
接收模块83,用于接收其余服务器发送的结构树编码以及对应于同一结构树编码的统计信息;
第二获取模块84,用于获取所述结构树编码对应的结构树;
整合模块85,用于将各分区结构树编码相同的统计信息进行整合,以使根据调用所述接口的若干实例的结构树和对应于各结构树编码的整合后的统计信息对所述接口进行异常检测。
在一个实施例中,从数据存储系统的指定分区获取接口日志之前,还包括:
接收查询接口日志的查询任务,所述查询任务携带有所述指定分区的分区号。
在一个实施例中,所述查询任务为指定的服务器在接收到定时调度系统发送的定时触发的查询请求后分配。
在一个实施例中,所述结构树编码基于哈希算法确定。
在一个实施例中,所述统计信息包括接口调用次数、接口调用时长、接口调用是否成功的指示信息、接口调用的入参和/或接口调用的出参。
在一个实施例中,获取所述结构树编码对应的结构树包括:
从指定的服务器中获取所述结构树编码对应的结构树。
在一个实施例中,所述指定的服务器基于哈希一致性算法确定。
在一个实施例中,获取所述结构树编码对应的结构树还包括:
基于所述结构树编码从存储系统中获取所述结构树编码对应的结构树,其中,所述结构树为所述其余服务器生成后,存储到所述存储系统。
在一个实施例中,将各分区结构树编码相同的统计信息进行整合后,还包括:
区分出每个接口对应的若干实例的结构树和对应于各结构树编码的整合后的统计信息,并将区分出的结果发送给执行异常检测的服务器。
在一个实施例中,各分区结构树编码相同的统计信息进行整合之后,还包括:
将所述结构树和整合后的统计信息存储到存储系统。
上述装置中各个模块的功能和作用的实现过程具体详情见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本说明书装置的实施例可以应用在计算机设备上,例如服务器或智能终端。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在文件处理的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图9所示,为本说明书装置所在计算机设备的一种硬件结构图,除了图9所示的处理器902、内存904、网络接口906、以及非易失性存储器908之外,实施例中装置所在的服务器或电子设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
相应地,本说明书实施例还提供一种计算机存储介质,所述存储介质中存储有程序,所述程序被处理器执行时实现上述任一实施例中的方法。
相应地,本说明书实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例中的方法。
本申请可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本领域技术人员在考虑说明书及实践这里公开的说明书后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。