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

一种面向在线实时的微服务调用链异常检测方法

2022-06-11 12:20:02 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,具体而言涉及一种面向在线实时的微服务调用链异常检测方法。


背景技术:

2.云计算以及面向服务的软件开发方法等技术的发展加速了大规模业务应用迁移上云的进程,极大的提高了大规模应用的开发、扩展及运维效率。微服务架构已逐渐成为大规模云应用的主流设计架构,也是面向服务软件开发方法的发展方向,其在传统的面向服务的开发模式上进一步去中心化,将功能复杂的单体应用拆分成一系列功能单一、可独立部署上线以及具有高内聚低耦合等特点的微服务的集合。然而微服务实例之间复杂的依赖关系不仅增加了故障发生的频率,也增大了故障诊断的难度。尤其是当微服务调用拓扑中某一个微服务发生故障时,故障会随着调用链扩散并且会影响到与自身部署在同一个容器或物理机上的其他微服务(即使二者之间没有调用关系,但共享cpu、内存等资源)从而引发“故障传播”,即在较短的时间间隔内产生大量的异常告警。因此为了避免故障在系统内大范围传播,需要在少量故障发生时尽快的检测和定位故障发生的根因。


技术实现要素:

3.本发明针对现有技术中的不足,提供一种面向在线实时的微服务调用链异常检测方法,调用链数据以类似图的结构记录微服务级别的调用关系、执行路径以及性能参数,可以在系统发生故障时及早地检测出受故障影响的微服务实例及其所在网元(容器或物理机),并随后启动故障根因定位,提高故障应对的响应速度。
4.为实现上述目的,本发明采用以下技术方案:
5.一种面向在线实时的微服务调用链异常检测方法,所述异常检测方法包括以下步骤:
6.s1,获取调用链数据,该调用链数据由按时序排序的事件组成;将微服务调用链建模为自然语言序列,对调用链中记录的事件进行解析,将事件提取为语义序列及响应时间序列;
7.s2,利用词汇嵌入式表示算法提取出调用链中事件的向量化表示,将调用链表示为按时序排列的数值型向量序列;
8.s3,从数值型向量序列中按时间窗口大小提取长度为n的子序列,前n-1条作为参考值,第n条作为观测值,采用基于注意力机制的双层长短期记忆深度神经网络,预测得到观测值的事件模板和对应的响应时间,将预测结果和实际观测到的结果相对比,以同时检测调用链中存在的微服务实例调用路径异常与性能异常。
9.为优化上述技术方案,采取的具体措施还包括:
10.进一步地,步骤s1中,所述事件中包含调用类型、时间戳、响应时间、调用链唯一标识、事件唯一标识、父事件唯一标识、调用网元唯一标识和微服务名称八个字段;
11.将事件提取为语义序列及响应时间序列的过程包括以下子步骤:
12.从事件包含的八个字段中选取调用类型、调用网元唯一标识和微服务名称组成事件模板,从事件包含的八个字段中选取响应时间作为微服务响应时间;
13.其中,对所述微服务响应时间进行标准化处理,得到所述微服务响应时间的标准化微服务响应时间;
14.完成调用链数据解析后,长度为n的调用链t=[e0,e1,...,e
n-1
]被表示为按时间戳排序的两条序列,分别是事件模板序列t
ρ
=[ρ0,ρ1,...,ρ
n-1
]以及响应时间序列t
η
=[η0,η1,...,η
n-1
],其中ei代表调用链中记录的事件,ρi代表数据解析完成后获得的事件模板,ηi代表每个事件中记录的微服务的响应时间。
[0015]
进一步地,步骤s2中,利用词汇嵌入式表示算法提取出调用链中事件的向量化表示,将调用链表示为按时序排列的数值型向量序列的过程包括以下步骤:
[0016]
s21,将调用链看作语句,事件看作语句中的词语,事件之间的调用关系看作语法,得到事件模板集合s={ρ0,ρi,...,ρ
v-1
},v代表独一无二的事件模板的个数;
[0017]
s22,对事件模板进行预处理,利用独热编码方式将集合s中的每个事件模板ρ映射到一个维度为v的向量o,将事件模板编码为独热向量,得到集合s对应的独热编码向量集合o={o0,o1,...,o
v-1
},其中oi代表事件ei对应的独热编码向量;
[0018]
s23,对于给定调用链的事件模板序列t
ρ
=[ρ0,ρ1,...,ρ
n-1
],通过查询集合o将t
ρ
映射为to=[o0,o1,...,o
n-1
],其中ok代表事件ek对应的独热编码向量;将事件模板ρi对应的独热向量输入词汇嵌入式表示模型中,词汇嵌入式表示模型输出为事件模板ρi的上下文对应的独热向量ρb∈{...,ρ
i-1
,ρ
i 1
,ρ
i 2
,...};其中,所述词汇嵌入式表示模型为解码器和编码器都为全连接神经网络的自编码器;自编码器训练完成后,将事件模板的独热向量输入到编码器中,得到事件模板的语义向量;所述语义向量包含其对应所述事件模板在调用链中的上下文信息。
[0019]
进一步地,步骤s23中,将事件模板ρi对应的独热向量输入词汇嵌入式表示模型中,词汇嵌入式表示模型输出为事件模板ρi的上下文对应的独热向量ρb∈{...,ρ
i-1
,ρ
i 1
,ρ
i 2
,...}的过程包括以下子步骤:
[0020]
s231,将ρi对应的oi映射到低维空间中,计算低维表示h,计算公式如下:
[0021][0022]
其中,代表oi的低维表示,且d<v,为词汇嵌入式表示模型中隐藏层的参数;
[0023]
s232,由h预测ρb,计算公式如下:
[0024]
y=softmax(w
′v×dh)
[0025]
p(ρb=ρk|ρi)=yk,k∈[0,v-1]
[0026]
其中y为词汇嵌入式表示模型的输出,w
′v×d为词汇嵌入式表示模型中输出层的参数,softmax()为归一化指数函数,p(ρb=ρk|ρi)为词汇嵌入式表示模型在给定ρi的条件下,预测上下文ρb=ρk的概率;
[0027]
s233,设模型的优化目标是最大化给定事件模板ρi生成上下文事件模板的概率,等同于最小化损失函数,损失函数的计算公式如下:
[0028][0029]
其中c为ρi对应的上下文事件模板的个数,ρi′
代表ρi在调用链中对应的上下文;
[0030]
s231,待模型收敛后,计算事件模板ρi对应的语义向量vi,计算公式如下:
[0031][0032]
进一步地,步骤s3中,采用基于注意力机制的双层长短期记忆深度神经网络,预测得到观测值的事件模板和对应的响应时间的过程包括以下步骤:
[0033]
s31,将长度为n的调用链数据表示为语义向量序列tv=[v0,v1,...,v
n-1
]和响应时间序列t
η
=[η0,η1,...,η
n-1
];将上述序列按元素拼接为双模态向量序列tv=[v0,v1,...,v
n-1
]作为基于注意力机制的双向lstm的输入,其中vi=[vi,ηi];
[0034]
s32,将长度为l的子序列t
l
=[v
t-l 1
,v
t-l 2
,...,v
t-1
,v
t
]作为双层长短期记忆深度神经网络的输入,从前向和后向两个方向挖掘子序列中包含的信息,并且每个lstm块都会输出一个隐向量h,得到相应的双向lstm的输出;
[0035]
s33,由每个lstm块的输出h得到每个时刻事件的权重,计算公式如下:
[0036][0037]
其中为注意力层中第一个全连接层的参数,t代表lstm块对应的时间点,l代表每一层lstm块的数量,即时间窗口大小,hi代表每个lstm块的输出;
[0038]
s34,由每个时刻对应的lstm块的输出h以及对应的权重λ得到注意力层的输出,计算公式如下:
[0039][0040]
其中,pred=[u,η
pred
],w

为注意力层中第二个全连接层的参数;
[0041]
s35,将u作为模型预测的多分类结果,η
pred
作为模型预测的t 1时刻对应的事件的响应时间,计算公式如下:
[0042]
p(ρ
t 1
=ρi,|ρ
t-l 1
,...,ρ
t
)=ui′
,i

∈[0,v-1]。
[0043]
进一步地,步骤s3中,将预测结果和实际观测到的结果相对比,以同时检测调用链中存在的微服务实例调用路径异常与性能异常是指:
[0044]
若事件模板预测值与观测值中实际的事件模板不同,则判定观测值所在的调用链中存在调用路径异常;若响应时间预测值与观测值中实际的响应时间不同,则判定观测值所在的调用链中存在微服务性能异常。
[0045]
进一步地,若事件模板预测值与观测值中实际的事件模板不同,则判定观测值所在的调用链中存在调用路径异常的过程包括:
[0046]
将所述事件模板预测值中包含的多个事件模板的出现概率按从大到小的顺序排序;根据概率排序结果,选取最有可能在下一个时刻出现的事件模板集合;若所述观测值不在所述下一个时刻可能出现的事件模板集合中,则判定所述观测值所在的调用链中存在调用路径异常。
[0047]
进一步地,若响应时间预测值与观测值中实际的响应时间不同,则判定观测值所在的调用链中存在微服务性能异常的过程包括:
[0048]
将所述预测值中包含的下一个事件模板对应的响应时间与所述观测值中包含的
响应时间作对比,计算二者的均方根误差;若所述均方根误差大于动态阈值,则判定所述预测值所在的调用链中存在微服务性能异常;其中,动态阈值由验证集输入收敛后的所述调用链异常检测模型中得到。
[0049]
进一步地,所述动态阈值由验证集输入收敛后的所述调用链异常检测模型中得到,动态阈值的获取过程包括以下步骤:
[0050]
a31,获取在系统正常运行一段时间内产生的调用链数据并将其按照一定比例分为训练集和验证集;在模型训练阶段,基于训练集同时采用多分类交叉熵损失以及均方误差损失之和作为模型的总体损失函数,在此损失函数的引导下采用随机梯度下降算法更新模型参数,并对模型参数采用l2正则化;待模型收敛后,将验证集输入模型中,利用模型的响应时间预测值η
pred
与t 1时刻的观测值η
t 1
计算均方误差r,计算公式如下:
[0051]
r=(η
pred-η
t 1
)2;
[0052]
a32,计算出r的均值μ以及标准差σ,根据坎特立不等式,对
[0053][0054]
将ε=βσ替代ε,其中β为置信度水平,计算公式如下:
[0055][0056]
a33,在微服务性能异常检测过程中采用r
threshold
=μ βσ作为判断r是否异常的动态阈值;如果模型的预测值η
pred
与实际观测值η
t 1
的均方误差r>r
threshold
,则判断此事件中响应的微服务存在性能异常。
[0057]
本发明的有益效果是:
[0058]
本发明的面向在线实时的微服务调用链异常检测方法,利用深度学习模型学习正常的调用链的行为模式,同时考虑事件之间的依赖关系以及响应时间,采用基于注意力机制的双向lstm模型同时检测调用路径异常和性能异常,提高调用链异常检测的精度,避免异常的误报和漏报。
附图说明
[0059]
图1是本发明实施例的面向在线实时的微服务调用链异常检测方法流程图。
[0060]
图2为本发明实施例的微服务调用链异常检测模型的架构示意图。
[0061]
图3是本发明实施例提供的微服务调用链语义向量化模型结构示意图。
具体实施方式
[0062]
现在结合附图对本发明作进一步详细的说明。
[0063]
需要注意的是,发明中所引用的如“上”、“下”、“左”、“右”、“前”、“后”等的用语,亦仅为便于叙述的明了,而非用以限定本发明可实施的范围,其相对关系的改变或调整,在无实质变更技术内容下,当亦视为本发明可实施的范畴。
[0064]
图1是本发明实施例的面向在线实时的微服务调用链异常检测方法流程图。参见图1,该异常检测方法包括以下步骤:
[0065]
s1,获取调用链数据,该调用链数据由按时序排序的事件组成;将微服务调用链建
模为自然语言序列,对调用链中记录的事件进行解析,将事件提取为语义序列及响应时间序列。
[0066]
s2,利用词汇嵌入式表示算法提取出调用链中事件的向量化表示,将调用链表示为按时序排列的数值型向量序列。
[0067]
s3,从数值型向量序列中按时间窗口大小提取长度为n的子序列,前n-1条作为参考值,第n条作为观测值,采用基于注意力机制的双层长短期记忆深度神经网络,预测得到观测值的事件模板和对应的响应时间,将预测结果和实际观测到的结果相对比,以同时检测调用链中存在的微服务实例调用路径异常与性能异常。
[0068]
一、将事件提取为语义序列及响应时间序列
[0069]
获取调用链数据。如图2所示,调用链由一系列带有时间戳的event(下文统称为事件)构成,每个事件包含调用类型、时间戳、响应时间、调用链唯一标识、事件唯一标识、父事件唯一标识、调用网元唯一标识和微服务名称八个字段。在这八个字段中,calltype代表事件的调用类型。starttime代表事件的调用发起时间,即事件的时间戳。elapsedtime代表事件的响应时间。traceid为此条调用链的唯一标识。spanid为事件在调用链中的唯一标识。pid代表此事件在调用链中的父事件的spanid。cmdb_id代表发起此次调用的网元唯一标识。servicename代表响应此次调用的服务网元。每条调用链都有traceid字段作为其唯一标识,将调用链t表示为按时间戳starttime排序的事件序列[e0,e1,...,e
n-1
],即t=[e0,e1,...,e
n-1
],其中n代表调用链t的长度。
[0070]
为保证在语义向量化步骤中能以数值向量的形式准确地描述事件的行为,从事件包含的八个字段中选取调用类型、调用网元唯一标识和微服务名称组成事件模板,从事件包含的八个字段中选取响应时间作为微服务响应时间;其中,对微服务响应时间进行标准化处理,得到微服务响应时间的标准化微服务响应时间。具体的,本实施例采用calltype、cmdb_id以及servicename三个字段对事件进行分类,并将上述三个字段组成正则表达式calltype_cmdb_id_servicename作为事件类别的标记,称之为事件模板。在完成调用链数据解析后,一个长度为n的调用链t=[e0,e1,...,e
n-1
]就可以被表示为按时间戳排序的两条序列,分别是事件模板序列t
ρ
=[ρ0,ρ1,...,ρ
n-1
]以及响应时间序列t
η
=[η0,η1,...,η
n_1
]。
[0071]
二、将调用链表示为按时序排列的数值型向量序列
[0072]
如图3所示,采用自然语言处理思想,利用词汇嵌入式表示方法word2vec提取事件序列中的上下文语义信息并将事件模板转换为固定维度的数值型向量(本文称之为语义向量化),并且由于独一无二的事件模板的数目较少,省略了原算法中的负采样过程。词汇嵌入式算法word2vec主要包含两种模型,分别是跳字模型(skip-gram)和连续词模型(cbow),本文采用跳字模型来实现事件模板的语义向量化,主要包含两个步骤:
[0073]
步骤一、事件模板预处理。在完成调用链数据解析后,会得到一个事件模板集合s={ρ0,ρ1,...,ρ
v-1
},v代表独一无二的事件模板的个数。本实施例利用独热编码(one-hot encode)将集合s中的每一个事件模板ρ映射到一个维度为v的向量o,由此得到集合s对应的独热编码向量集合o={o0,o1,...,o
v-1
},其中
[0074]
步骤二、语义信息提取。描述事件模板的语义向量需要满足两个需求:可区分性和可对比性。可区分性指语义向量可以高度区分不同的事件模板,而可对比性指语相似事件应该有相似的语义向量。因此,为了满足以上两点需求,本实施例在给定一条调用链的事件
模板序列t
ρ
=[ρ0,ρ1,...,ρ
n-1
],通过查询集合o将t
ρ
映射为to=[o0,o1,...,o
n-1
],其中接着在跳字模型中,采用一个事件模板ρi去预测它的上下文ρb∈{...,ρ
i-1
,ρ
i 1
,ρ
i 2
,...},来完成事件模板的语义向量化。具体过程如下:
[0075]
首先将ρi对应的oi映射到低维空间中,计算低维表示h,计算公式如下:
[0076][0077]
其中,代表oi的低维表示,且d<v。接着由h预测ρb,计算公式如下:
[0078]
y=softmax(w
′v×dh)
[0079]
p(ρb=ρk|ρi)=yk,k∈[0,v-1]
[0080]
其中y为词汇嵌入式表示模型的输出,p(ρb=ρk|ρi)为词汇嵌入式表示模型在给定ρi的条件下,预测上下文ρb=ρk的概率。
[0081]
模型的优化目标是最大化给定事件模板ρi生成上下文事件模板的概率,等同于最小化下式所示损失函数,损失函数的计算公式如下:
[0082][0083]
其中c为ρi对应的上下文事件模板的个数。
[0084]
待模型收敛后,计算事件模板ρi对应的语义向量vi,计算公式如下:
[0085][0086]
预测下一个可能出现的事件模板和对应的响应时间。
[0087]
如图2所示,采用基于注意力机制的双向lstm作为调用链异常检测模型。除了微服务之间复杂的调用关系会对调用链异常检测带来困难,如何同时检测调用路径异常和微服务性能异常也是调用链异常检测要面临的挑战之一,原因主要有以下两点:(i)即使在没有发生异常的情况下,微服务的响应时间也会在一个较大的范围内波动,这是由于微服务的响应时间不仅包含其自身的响应时间,还包括其所有子调用的响应时间。由于微服务调用路径的多样化,仅利用微服务的响应时间进行异常检测的方法会产生较多误报,因此在考虑响应时间以检测微服务性能异常的同时也要考虑微服务相应的调用路径。(ii)一些故障可能调用链中的某些微服务下线(例如物理机宕机导致部署在其上的微服务下线或者数据库因访问者过多而拒绝访问请求),异常的调用路径和正常的调用路径可能会有相同的结构,这时只能通过二者的响应时间来区分彼此。因此本实施例提出的微服务调用链异常检测模型可以学习微服务调用路径和响应时间之间的关联关系,从而同时检测调用链中存在的调用路径异常和响应时间异常。
[0088]
三、微服务实例调用路径异常与性能异常检测
[0089]
在完成数据解析和语义向量化之后,长度为n的调用链就被表示为语义向量序列tv=[v0,v1,...,v
n-1
]和响应时间序列t
η
=[η0,η1,...,η
n-1
],为了同时检测调用路径异常和微服务性能异常,将上述序列按元素拼接为双模态向量序列tv=[v0,v1,...,v
n-1
]作为基于注意力机制的双向lstm的输入,其中vi=[vi,ηi]。
[0090]
双向lstm接受长度为l的子序列t
l
=[v
t-l 1
,v
t-l 2
,...,v
t-1
,v
t
]作为输入,从前向和后向两个方向挖掘子序列中包含的信息,并且每个lstm块都会输出一个隐向量h。
[0091]
得到双向lstm的输出后,采用注意力机制去自动地为子序列中不同的事件施加不
同的权重。本实施例首先由每个lstm块的输出h得到每个时刻事件的权重,计算公式如下:
[0092][0093]
其中为注意力层中第一个全连接层的参数,接着由每个时刻对应的lstm块的输出h以及对应的权重λ得到注意力层的输出,计算公式如下:
[0094][0095]
其中,pred=[u,η
pred
],w

为注意力层中第二个全连接层的参数,将u作为模型预测的多分类结果,η
pred
作为模型预测的t 1时刻对应的事件的响应时间,计算公式如下:
[0096]
p(ρ
t 1
=ρi′

t-l 1
,...,ρi)=ui′
,i

∈[0,v-1]
[0097]
将预测结果与实际观测到的结果相对比判定异常。
[0098]
根据参考值中实际的事件模板和响应时间对观测值中的事件模板和响应时间进行预测,分别得到事件模板预测值和响应时间预测值,若事件模板预测值与观测值中实际的事件模板不同,则判定观测值所在的调用链中存在调用路径异常;若响应时间预测值与观测值中实际的响应时间不同,则判定观测值所在的调用链中存在微服务性能异常。
[0099]
例如,将数值型向量中提取出的观测值输入到调用链异常检测模型中,得到模型的预测值;其中预测值中包含下一个事件模板出现的概率分布和下一个事件模板对应的响应时间。其中,调用链异常检测模型由基于注意力机制的双向lstm神经网络模型训练得到。概率分布包含多个事件模板的在下一个时刻出现的概率;响应时间对应下一个可能出现的事件模板对应的响应时间。将事件模板预测值中包含的多个事件模板的出现概率按从大到小的顺序排序;根据概率排序结果,选取最有可能在下一个时刻出现的事件模板集合;若观测值不在下一个时刻可能出现的事件模板集合中,则判定观测值所在的调用链中存在调用路径异常。将预测值中包含的下一个事件模板对应的响应时间与观测值中包含的响应时间作对比,计算二者的均方根误差;若均方根误差大于动态阈值,则判定预测值所在的调用链中存在微服务性能异常;其中,动态阈值由验证集输入收敛后的调用链异常检测模型中得到。动态阈值由验证集输入收敛后的调用链异常检测模型中得到的过程包括:从调用链异常检测模型训练集中提取部分数据作为验证集;从验证集中提取参考值和观测值;将验证集中参考值输入所述调用链异常检测模型中,得到响应时间预测值;计算验证集中所有样本对应的响应时间预测值的平均值和标准差;根据平均值和标准差利用坎泰利不等式计算动态阈值。
[0100]
以前述模型为例,获取在系统正常运行一段时间内产生的调用链数据并将其按照一定比例分为训练集和验证集。在模型训练阶段,基于训练集同时采用多分类交叉熵损失以及均方误差损失之和作为模型的总体损失函数,在此损失函数的引导下采用随机梯度下降算法更新模型参数,并对模型参数采用l2正则化。待模型收敛后,将验证集输入模型中,利用模型的响应时间预测值η
pred
与t 1时刻的观测值η
t 1
计算均方误差r,计算公式如下:
[0101]
r=(η
pred-η
t 1
)2。
[0102]
接着计算出r的均值μ以及标准差σ,根据坎特立不等式(cantelli inequality),对
[0103]
[0104]
将ε=βσ替代ε,计算公式如下:
[0105][0106]
由于验证集中包含的都为正常的调用链数据,因此大多数均方误差r的值会很接近均值μ,在微服务性能异常检测过程中采用r
threshold
=μ βσ作为判断r是否异常的阈值,如果模型的预测值η
pred
与实际观测值η
t 1
的均方误差r>r
threshold
,则可判断此事件中响应的微服务存在性能异常。
[0107]
根据模型预测的各事件出现概率大小,选出最有可能出现的m个候选事件,如果实际观测值不在这m个候选事件中,则判断为存在调用路径异常。
[0108]
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
再多了解一些

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

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

相关文献