一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

调用链异常检测方法、计算机设备以及可读存储介质与流程

2021-10-20 00:30:00 来源:中国专利 TAG:计算机 调用 检测方法 可读 异常


1.本发明涉及计算机技术领域,尤其涉及一种调用链异常检测方法、计算机设备以及可读存储介质。


背景技术:

2.使用分布式架构,例如面向服务的架构(service

oriented architecture,soa)或者微服务架构(microservice architecture),是现代构建软件系统的主流趋势。这类架构具有快速迭代,易于扩展和利于自动化的特点。
3.对于soa或者微服务架构,整个系统被拆分为几十到几千个小的服务,每个服务可能运行在一个或者多个实例(instance)中。这些服务各自只聚焦一小部分功能,完成完整的用户请求需要互相之间通过http api(application programming interface)等远程进程通信(remote process communication,rpc)方法实现。微服务架构相比soa,其中的微服务解耦程度更高,每个微服务都相对独立地完成一小块功能。微服务架构中的服务数量一般远多于soa中的服务数量。当用户发出一个请求时(例如点击页面上的“购买”按钮之后),系统的整个执行过程可能包含数十个到数百个对不同服务的同步的或者异步的调用(span)。
4.在系统完成一次业务调用的过程中,把服务之间的调用信息(时间、接口、层次、结果)打点到日志中,然后将所有的打点数据连接为一个树状链条就产生了一个调用链,也就是说整个执行过程(所有的span以及span之间的关系)被称为一个调用链(trace)。调用链可以跟踪系统把过程中产生的日志信息进行分析处理,将业务端到端的执行完整的调用过程进行还原,根据不同维度进行统计分析;从而标识出有异常的服务调用,快速分析定界到出异常的服务;同时可根据数据统计分析系统性能瓶颈。
5.当分布式系统发生故障时,由于服务之间复杂且动态的互相依赖关系,诊断与定位故障根因往往是非常困难的。静态统计分析不能捕获服务之间动态变化的依赖关系,因此往往无法找到故障的关键信息。另一方面,基于日志的分析由于日志的实现是很随意的,日志的数据也非常巨大,因此很难从海量信息中挖掘到故障的关键信息。而调用链日志是一类特殊的日志。分布式调用采集系统(例如jaeger或者zipkin)通过追踪每个用户请求在不同服务上的执行过程,能够确定每一条trace的具体结构和状态。通过调用链日志采集得到的trace数据,既包含了服务之间的动态依赖关系,也没有过多的冗余信息。因此trace分析对于高效地诊断分布式系统的故障是必要的。
6.现有的人工或者自动化的调用链分析方法,都依赖异常调用链的检测方法。人工调用链分析往往是对一条或者几条异常调用链进行可视化,基于专家经验人工判断故障的根因。自动化的调用链故障分析算法,例如microscope和traceanomaly,都是首先检测出所有的异常调用链,然后对每一条异常调用链应用根因定位算法。
7.只检测调用链中被调用到的每个服务的服务级指标(service

level objective,slo,例如响应时间)是否存在异常。具体的方法为,统计历史数据中每个服务的slo的分布,
得到一个合适的slo偏离的阈值。对于待检测的调用链,将每个服务的slo与已得到的偏离阈值进行比较,从而判断每个服务是否发生slo偏离(即异常)。
8.通过有监督机器学习算法,将调用链异常检测问题作为二分类(正常和异常两类)去解决。mepfl首先将每一条调用链转化为预定义的一系列特征(例如每个服务的响应时间,调用链上的调用个数,对应的实例个数,是否有共享存储等等),然后将这些特征输入随机森林等成熟的机器学习算法进行分类。为了训练机器学习模型,mepfl需要获取大量有是否异常的标注的训练数据。为此,mepfl采用的方法是在系统上人为注入故障并收集数据,将受到注入的故障影响的调用链标注为异常,其他的为正常。
9.通过无监督深度学习方法,学习到调用链数据在正常状态下的概率分布模型,通过判断调用链是否服从正常状态的分布来判断调用链是否是异常的。traceanomaly首先将每个调用链拆解为多个调用路径(call path)。一个调用路径指的是从调用链的根节点到当前调用的路径,因此调用链中的每一个调用都唯一对应一个调用路径。traceanomaly将调用链编码为所有已知的调用路径在这条调用链上对应的响应时间(如果没有出现,那么就是0)。之后traceanomaly通过变分自动编码器(variational autoencoder,vae)学习编码后得到的高维向量的分布。在检测时,不服从学习到的概率分布(重建概率低)的调用链就是异常的。
10.现有技术有以下缺点:1、不能检测结构异常;microscope没有考虑调用链结构异常。2、依赖有监督数据;mepfl依赖有监督数据训练机器学习模型,但是机器学习模型的准确性依赖训练数据中每一类数据的完整程度。3、不能使用完整的调用链信息;mepfl的编码过程中对丢弃同一个服务上除了最后一次之外的其他所有调用。4、不能处理调用链指标数据的复杂模式;分布式系统中的每个服务往往包含数个至数十个不同的接口(interface),每个接口提供的服务都略有不同。5、时间和空间开销大;traceanomaly采用的编码方式将调用链编码为非常稀疏(大部分维度取值为0)的向量,这限制了traceanomaly所能处理的调用链的个数,而在实际生产系统中,每天往往能产生千万至数十亿条调用链。6、无法支持细粒度的根因定位;调用链的异常检测的目的是为了后续的根因定位,如果调用链异常检测时只分析到调用链上的服务,那么后续定位就只支持定位到根因服务;如果调用链异常检测能分析到调用链上的服务以及每个服务的接口,那么后续定位就支持定位到根因接口,由于每个服务运行在多个实例上,根因还可能是服务的某一个实例。


技术实现要素:

11.本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
12.为此,本发明的第一个目的在于提出一种本发明的整体思路是将每条调用链看作是span组成的图(graph),解决了现有技术没有精确到span层次的弊端,而本发明可以精确到span层次。并且解决了现有技术的诸多问题,例如:不能检测结构异常、依赖有监督数据、不能使用完整的调用链信息、不能处理调用链指标数据的复杂模式、时间和空间开销大、无法支持细粒度的根因定位。
13.本发明的第二个目的在于提出一种计算机设备。
14.本技术的第三个目的在于提出一种非临时性计算机可读存储介质。
15.为达上述目的,本技术第一方面实施例提出了一种调用链异常检测方法,该方法
包括以下步骤:
16.步骤s10,将每条调用链处理成span组成的图;
17.步骤s20,根据图嵌入的方法将所述调用链中的每一个span编码为高维向量;
18.步骤s30,通过深度贝叶斯模型获取所述高维向量的正常模式的概率分布;
19.步骤s40,依据获取的概率分布对待检测调用链的异常进行判断。
20.本技术实施例的调用链异常检测方法本,发明的整体思路是将每条调用链看作是span组成的图(graph);之后通过图嵌入(graph embedding)方法,将调用链数据中的每一个span编码为高维向量;最后通过深度贝叶斯模型学习高维向量的正常模式的概率分布,之后通过新的调用链是否服从该正常概率分布来判断是否异常。
21.可选地,在本技术的一个实施例中,所述步骤s10包括以下步骤:
22.步骤s11,将每一个所述的span记作所述图中的一个节点,根据具有相同链路标识的span组成节点集合;
23.步骤s12,将上游的span到下游的边的集合记作边集合,其中,所述的span之间存在父子关系,所述上游的span是下游的父span;
24.步骤s13,根据所述的节点集合和所述的边集合构成所述的图。
25.可选地,在本技术的一个实施例中,所述调用链中存在指标异常,所述指标异常通过状态码和响应时间来判断,将所述的状态码和响应时间编码为所述的高维向量;其中,对所述的状态码进行one

hot编码;将所述的响应时间直接加入编码。
26.可选地,在本技术的一个实施例中,所述调用链中还存在结构异常,所述结构异常通过所述节点周围的节点的分布来判断;其中,所述节点的属性包括服务名称,操作名称和实例id,将所述的服务名称,操作名称和实例id通过hash编码的方式编码为所述的高维向量。
27.可选地,在本技术的一个实施例中,所述通过深度贝叶斯模型获取l
n
和l
i
来训练的目标函数,所述的深度贝叶斯模型的目标函数公式为:
[0028][0029]
其中,e指的是数学期望,这里z就是一个随机变量,物理含义是模型内部的一个隐变量,概率分布是q
φ
(z|x
n
),p(z)指的是z的先验分布,具体指的是对角高斯分布这里p
θ
,q
φ
是两个可训练的神经网络,指标异常对应的编码记为x
i
,结构异常对应的编码记为x
n
,训练过程都采用经典的sgvb算法。
[0030]
为达上述目的,本技术第二方面实施例提出了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现本技术第一方面实施例所述的方法。
[0031]
为达上述目的,本技术第三方面实施例提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本技术第一方面实施例所述的方法。
[0032]
本技术附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变
得明显,或通过本技术的实践了解到。
附图说明
[0033]
本技术上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0034]
图1为本技术实施例中每条调用链处理成span组成的图。
[0035]
图2为本技术实施例所提供的一种调用链异常检测方法的流程示意图。
[0036]
图3为应用于本技术实施例中的深度贝叶斯模型图。
[0037]
图4为本技术实施例的具体系统方框图。
具体实施方式
[0038]
下面详细描述本技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本技术,而不能理解为对本技术的限制。
[0039]
下面参考附图描述本技术一种调用链异常检测方法。
[0040]
调用链异常检测问题的输入指的是调用链数据;调用链异常检测问题的输出指的是每条调用链是否是异常的以及具体异常的部分;
[0041]
图1为本技术实施例中每条调用链处理成span组成的图,具体而言,如图1所示,图中每一个方格是一个span,箭头表示span之间的触发关系,问题的目标输出就是这条调用链是否是异常的,以及具体哪些span或者服务是异常的。本技术实施例中调用链异常一般包括两类:
[0042]
1、调用链结构异常,调用链结构异常指的是出现了非正常的调用链结构。例如由于发布时错误地修改了配置,导致服务a访问了服务b1而不是服务b2导致故障;
[0043]
2、调用指标异常,调用指标异常指的是调用链结构是正常的,但是其中一些调用的某个指标存在异常,例如调用响应时间或者返回状态码。
[0044]
本技术实施例通过首先需要对服务名称,操作名称和实例id等字段进行编码。为了避免traceanomaly遇到的无法处理没有预先知道的结构的问题,这里采用hash编码,具体而言,本技术实施例对原始属性值通过sha256算法进行hash(hash对应的中文是哈希),将得到的结果看作一个k进制数,对每一个数位上的数字对m取模(此时每一个数位上的数字取值范围为0~m

1),取模得到的结果就是编码结果。该hash编码的过程等价于将输入随机分配到若干个桶内(桶的数量远大于可能的输入的数量,从而保证两个不同的输入被编码为相同的结果的可能性极低),然后将桶的编号表示为m进制数。
[0045]
图2为本技术实施例一种调用链异常检测方法的流程示意图。
[0046]
如图2所示,本技术实施例提供的一种调用链异常检测方法,包括以下步骤:
[0047]
步骤s10,将调用链处理成span组成的图。
[0048]
具体而言,首先本技术实施例将调用链处理成span组成的图(graph),图是一个数学概念,定义为节点和边的集合。调用链原始数据的格式为每一条调用对应一条包含多个字段的记录,如下表所示:
[0049][0050][0051]
本技术实施例中所有具有相同trace id的span是一个调用链,这些span组成节点集合v,每个span是一个节点。
[0052]
即(i是span的下标,n是span的个数)
[0053]
对其中的每一条span,每个parent id对应的span到当前span有一条边。这些边组成边集合e。
[0054]

[0055]
通过上述步骤,构成了本技术实施例中的图g=(v,e)。
[0056]
步骤s20,根据图嵌入的方法将所述调用链中的每一个span编码为高维向量。
[0057]
具体来说,本技术实施例对每个调用链对应的图进行编码,例如,对每一个span,也就是图上的每一个节点进行编码。
[0058]
本技术实施例中调用链存在两类异常:结构异常和指标异常,即,本技术实施例分别对结构异常和指标异常相关的特征进行编码。
[0059]
首先对指标异常的特征进行编码,指标异常和结构无关,因此只需要将span中的状态码和响应时间编码为一个向量即可。具体而言,状态码属于类别型属性,本技术实施例对其进行one

hot编码,例如状态码有a,b,c两种,那么a就编码为(1,0,0),b就编码为(0,1,0),c就编码为(0,0,1);响应时间本身就是数值类型,直接将响应时间加入编码,将指标异常对应的编码记为x
i

[0060]
然后对结构异常的特征进行编码,本技术实施例需要在节点的编码中考虑图的结构,即:考虑图的结构实际上就是考虑节点周围的节点的分布。本技术实施例主要通过服务名称、操作名称和实例id等属性来区分不同节点,因此,本技术实施例需要考虑节点周围的其他节点的这些属性的分布。
[0061]
也就是说,本技术实施例需要对服务名称,操作名称和实例id等字段进行编码。为了避免traceanomaly遇到的无法处理没有预先知道的结构的问题,本技术实施例采用hash编码,具体而言,本技术实施例对原始属性值通过sha256算法进行hash,把得到的结果看作一个k进制数,对每一个数位上的数字对m取模(此时每一个数位上的数字取值范围为0~m

1),取模得到的结果为编码结果。上述hash编码的过程等价于将输入随机分配到若干个桶内(桶的数量远大于可能的输入的数量,从而保证两个不同的输入被编码为相同的结果的可能性极低),然后将桶的编号表示为m进制数。
[0062]
具体度量该分布的方法,本发明采用了feather算法,其中,feather算法通过特征函数表示节点邻域特征的分布,特征函数是一个数学概念,可以用来唯一标识一个概率分布,类似概率分布的傅立叶变换。
[0063]
对于本技术实施例中的图g上的节点u,其特征函数为其中x
w
是节点w通过上一段的方法编码后的结果(服务名称,操作名称和实例id等属性)。θ是特征函数的自变量。i是虚数单位。x指的是所有节点w的x_w拼接起来的矩阵。p(w|u)是u的每个邻居w对应的权重,计算该权重的方法是通过随机游走:
[0064][0065]
其中a是图的邻接矩阵,r是用户指定的超参数,一般为1或者2。公式中的j指的是当前的迭代次数,也就是说,p(v_{j r}|v_{j})指的是在第j步位于u的情况下,第j r步游走到w的概率。
[0066]
步骤s30,通过深度贝叶斯模型获取所述高维向量的正常模式的概率分布。
[0067]
对于得到的特征函数,本技术实施例在一系列不同的采样点(θ的不同取值上)进行计算,将采样得到的结果作为最终的编码结果。feather算法通过用随机游走的方法编码了图的结构。通过使用特征函数,大大减少了标识较大的图需要的维度,从而减少了调用链异常检测算法的空间开销。同时feather算法是一个无参数化的图嵌入方法,因此其不需要训练模型,节约了时间。本技术实施例将结构异常对应的编码记为x
n

[0068]
图3为应用于本技术实施例中的深度贝叶斯模型图。
[0069]
将得到的span编码通过深度贝叶斯模型学习其概率分布,如图3所示,z
n
是隐变量,表示span的内在特征(即该span在做什么),通过z
n
足以知道该span对应的trace结构(x
n
)和它对应的调用指标(x
i
)应该是什么。也就是说,深度贝叶斯模型结构是通过z
n
生成x
n
和x
i

[0070]
步骤s40,依据获取的概率分布对待检测调用链的异常进行判断。
[0071]
本技术实施例分别训练该模型的左半和右半部分。首先训练结构异常(右半部分),训练的目标函数为
[0072][0073]
这里p
θ
,q
φ
是两个可训练的神经网络。训练过程采用经典的sgvb算法。
[0074]
对结构异常(右半部分)训练完成后,然后训练指标异常部分。训练的目标函数为,
[0075]
同样采用sgvb算法。
[0076]
在进行异常检测是针对每个span分别计算两个指标:
[0077][0078][0079]
这两个指标的含义分别是x_n的概率(的对数),和x_i在给定x_n情况下的条件概率(的对数)。严格地说,由于是连续性随机变量,这里两个概率都是概率密度(probabilitydensity)。它们表达的含义就是调用的指标服从正常模式的概率。
[0080]
如果logp(x
n
)小,说明当前span对应的trace结构在历史数据中出现的概率低,那么当前span存在结构异常。
[0081]
如果logp(x
i
|x
n
)小,说明当前span的指标在给定结构的条件出现概率小,那么当前span存在指标异常。
[0082]
图4为本技术具体系统方框图。
[0083]
最后,通过图2流程图与图4系统框图的方式阐明技术方案的实现步骤,具体思路看说明书附图。
[0084]
本发明具体发明点如下:第一,将每条调用链看作是span组成的图(graph)。和所有现有技术都不同,现有技术没有精确到span层次的。第二,将调用链数据中的每一个span编码为高维向量,和traceanomaly的编码方法的不同之处在于不需要预先知道所有可能的调用链结构,可以处理没遇见过的调用链结构;和mepfl的编码方法的不同之处在于本技术实施例的编码是span层次的,保留了整个调用链的完整信息,没有丢弃任何调用。第三,最后通过深度贝叶斯模型学习高维向量的正常模式的概率分布,之后通过新的调用链是否服从该正常概率分布来判断是否异常,和traceanomaly一样都是无监督的方法,克服mepfl中依赖有监督数据的问题;和traceanomaly一样都是深度学习方法,能够处理复杂的模式,克服microscope的简单统计方法的局限;和traceanomaly的不同在于本技术实施例通过一个结构比vae更加复杂的贝叶斯模型实现对结构异常和指标异常的分别检测。
[0085]
同时,通过本技术实施例能够同时检测结构异常和指标异常,并且能区分具体是哪一类的异常。在span的编码过程中,针对两类异常各自的特征分别进行编码。在检测模型中,设计了一个特征的贝叶斯模型,使得两类异常的异常程度能够被分别评估。
[0086]
本技术实施例不依赖有标注的训练数据,是无监督的方法。通过无参数化的图嵌入方法对调用链数据进行编码,通过无监督的深度贝叶斯模型学习数据的正常模式从而检测异常,不需要依赖有监督数据。
[0087]
本技术实施例可以充分利用完整的调用链数据。本技术的编码过程中充分利用了调用链数据中的每一个span和每一个字段,没有丢弃任何span。
[0088]
本技术实施例可以处理调用链数据的复杂模式。本技术使用了深度贝叶斯模型来学习数据的正常模式,由于深度神经网络强大的拟合能力,相比简单的统计方法可以更精确地处理调用链数据的复杂模式。
[0089]
本技术实施例的时间和空间效率高。一方面,本技术实施例采用的feather编码方
法通过特征函数大大压缩了表示邻域需要的维度数量,因此提高了编码的空间效率。另一方面,本技术实施例的方法可以直接处理没有见过的trace结构,因此当系统发生变更时,可以直接在已有模型上进行优化训练。相比与完全重新训练,耗时短得多,而且不需要再次读取旧数据。
[0090]
本技术实施例可以支持细粒度的根因定位。本技术实施例将调用链看作是由span组成的图,而span就是调用链数据构成的最基本单位。本技术实施例的方法可以给出调用链中每一个span是否是异常的,所以可以支持定位到任何比span粒度更粗的根因,包括实例,接口或者服务等。
[0091]
为了实现上述实施例,本发明还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时,实现上述施例所述的方法。
[0092]
为了实现上述实施例,本发明还提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例的方法。
[0093]
在本发明说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本技术的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
[0094]
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本技术的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
[0095]
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本技术的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本技术的实施例所属技术领域的技术人员所理解。
[0096]
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的
介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
[0097]
应当理解,本技术的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
[0098]
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0099]
此外,在本技术各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
[0100]
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本技术的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本技术的限制,本领域的普通技术人员在本技术的范围内可以对上述实施例进行变化、修改、替换和变型。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜