微服务系统故障诊断及根因定位方法
未命名
07-22
阅读:172
评论:0
1.本发明涉及计算机技术领域,尤其涉及一种微服务系统故障诊断及根因定位方法。
背景技术:
2.微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的 api 进行通信的小型独立服务组成。这些服务由各个小型独立团队负责。微服务架构使应用程序更易于扩展和更快地开发,从而加速创新并缩短新功能的上市时间。微服务体系结构以其高可用性,快速进化和易于扩展的特性在web应用程序开发中变得非常流行。微服务架构将应用程序分解为多个小型服务,使其开发,维护更快,可以提供更高的灵活性。同时,正是因为微服务架构将整个应用分散为多个服务,导致故障诊断非常困难,并且在大量访问量的生产场景下,故障的出现是不可避免的,所以,能够快速发现故障的类型并定位到发生故障的服务,对于保证微服务的质量和用户体验是至关重要的。
3.通常使用多元时间序列来监控微服务系统。多变量时间序列通过收集每个时间戳的微服务信息去反映一个系统是否运行正常。系统故障诊断是从实时序列中识别故障并诊断导致异常的原因,同时报告微服务故障行为的发生。所以在微服务体系中,利用系统故障诊断来报告故障发生原因,如cpu占用,内存泄露等。因此,系统故障诊断对提高微服务系统的可靠性具有重要意义。除此之外,由于微服务架构中各服务之间复杂的依赖关系,当一个微服务发生故障后,故障可能会沿着依赖关系传播到多个微服务。所以当故障发生时,操作人员需要快速找到导致整个体系发生故障的根源,即根因定位。
4.目前,已提出各种解决方案,使故障的检测自动化,并自动确定其可能的根本原因。现有的故障检测解决方案依赖于识别服务行为中的异常,这些异常可能是其可能发生故障的症状。然而,目前大多数方法只能检测是否发生了异常,不能实现故障诊断,即给出具体发生故障的原因,这导致在故障发生后,操作员不能快速找到发生故障的原因,造成故障排除速度减慢,损失增大。除此之外,存在的故障诊断方法大多数为有监督故障诊断方法,有监督故障诊断方法要求训练数据是有标注的,然而在微服务体系巨大访问量的生产场景下,人工标记数据需要大量的人力,物力和财力,这对大多数公司来说,可应用范围受限。同时,由于故障诊断和根源分析的现有解决方案分散在不同的文献片段中,并且往往只关注异常检测或根源分析,这阻碍了应用程序操作员的工作。
5.并且由于微服务架构中数据量庞大,各个服务之间依赖关系复杂,现有故障诊断和根因定位方法仍然存在下列不足:在故障诊断方法中,对样本进行标记分类需要消耗大量的人力,财力。而基于无监督的故障诊断聚类方法已经不足以提取监控数据的特征,故障诊断精度也不尽人意。
技术实现要素:
6.本发明的目的就在于为了解决上述问题设计了一种微服务系统故障诊断及根因
定位方法。
7.本发明通过以下技术方案来实现上述目的:微服务系统故障诊断及根因定位方法,包括:s1、构建x个异常检测模型;s2、获取微服务系统中的监控数据作为训练数据集;s3、训练数据集分别导入x个异常检测模型,对其进行训练优化,得到x个优化后的异常检测模型;s4、分析x个优化后的异常检测模型的训练结果;并根据训练结果构建故障诊断模型;s5、对故障节点进行因果关系学习,并构建节点之间的因果关系图作为异常传播图;s6、实时获取监测数据;s7、利用故障诊断模型分析监测数据的故障诊断结果;s8、根据异常传播图和故障诊断结果定位故障原因。
8.本发明的有益效果在于:本方法通过预训练机制,自动从x个异常检测模型中选择x个最适合检测cpu占用,内存泄露和网络延迟的模型,并将这x个模型级联起来,实现对观测数据故障诊断的目的。除此之外,通过捕捉故障数据的异常模式,并与根因定位方法结合,达到对发生故障服务定位的目的。同时,通过在5个真实的微服务数据集上与已有的方法进行故障诊断和根因定位性能的比较,证明本方法能实现较高的故障诊断和根因定位;实现了在微服务架构中庞大的数据,各服务复杂的依赖关系中,有效对系统故障进行诊断,并对导致故障的根因进行定位。
附图说明
9.图1是本发明微服务系统故障诊断及根因定位方法的架构图;图2是本发明微服务系统故障诊断及根因定位方法的训练机制流程图;图3是本发明微服务系统故障诊断及根因定位方法的故障诊断流程图;图4是本发明与所有基线方法在macro-precision上的综合排名;图5是本发明与所有基线方法在macro-recall上的综合排名;图6是本发明与所有基线方法在macro-f1上的综合排名。
具体实施方式
10.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
11.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
12.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
13.在本发明的描述中,需要理解的是,术语“上”、“下”、“内”、“外”、“左”、“右”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,或者是本领域技术人员惯常理解的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的设备或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
14.此外,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
15.在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,“设置”、“连接”等术语应做广义理解,例如,“连接”可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接连接,也可以通过中间媒介间接连接,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
16.下面结合附图,对本发明的具体实施方式进行详细说明。
17.微服务系统故障诊断及根因定位方法,其特征在于,包括:s1、构建x个异常检测模型。
18.s2、获取微服务系统中的监控数据作为训练数据集。
19.s3、训练数据集分别导入x个异常检测模型,对其进行训练优化,得到x个优化后的异常检测模型。
20.s4、分析x个优化后的异常检测模型的训练结果;并根据训练结果构建故障诊断模型;分析训练结果包括:提取包含多个预设特征的数据,分别导入x个优化后的异常检测模型,得到每个优化后的异常检测模型对于预设特征的异常检测效果作为训练结果。
21.构建故障诊断模型:根据训练结果在x个优化后的异常检测模型中选取x个异常检测模型,并根据训练结果的优劣顺序进行级联构建故障诊断模型,其中x小于x。
22.s5、利用pc算法对故障节点进行因果关系学习,并构建节点之间的因果关系图作为异常传播图。
23.s6、实时获取监测数据。
24.s7、利用故障诊断模型分析监测数据的故障诊断结果。
25.s8、根据异常传播图和故障诊断结果定位故障原因;具体包括:s81、利用pagerank算法对异常传播图进行根因分析,并输出所有故障节点的初始因果分数v,表示为,其中μ表示微服务架构中服务的数量,α表示概率矩阵的转移概率,p为转换概率,节点i到j的转换概率p
ij
表示为,其中w
ij
表示经过pc算法得到的i和j之间的权重;s82、利用故障诊断结果分别计算故障数据的异常度,异常度表示为
,其中表示监控数据,γ表示发生故障的类型,i代表滑动窗口中第i个时间步,k代表特征数量,n代表输入故障数据的时间长度,thred
γ
在故障类型为γ进行诊断时返回的异常阈值;s83、根据初始因果分数和异常度进行加权整合计算每个节点的最终因果分数score
γ
,表示为,β表示根因推断分数对最后的因果分数做出的贡献,表示当发生类型的故障时服务节点的初始因果分数。
26.s84、根据最终因果分数对故障节点进行故障重要度排序定位故障原因。
27.本方法通过预训练机制,自动从8个异常检测模型中选择3个最适合检测cpu占用,内存泄露和网络延迟的模型,并将这3个模型级联起来,实现对观测数据故障诊断的目的。除此之外,我们通过捕捉故障数据的异常模式,并与根因定位方法结合,达到对发生故障服务定位的目的。同时,通过在5个真实的微服务数据集上与已有的方法进行故障诊断和根因定位性能的比较,证明本方法能实现较高的故障诊断和根因定位;实现了在微服务架构中庞大的数据,各服务复杂的依赖关系中,有效对系统故障进行诊断,并对导致故障的根因进行定位。
28.本发明微服务系统故障诊断及根因定位方法的工作原理如下:在本工作原理的说明中,x=8,x=3训练数据集对8个异常检测模型进行训练优化;抽样数据对优化后的8个异常检测模型自动选择出异常检测效果最佳的3个模型作为故障诊断的级联模型。在异常检测模型的训练优化中,分别得到了检测三种故障效果最佳的三个模型。将训练数据中cpu,latency,memory正常运行时产生的数据分别提取出来放入对应的模型中,进行模型的训练,使得三个模型能够充分学习正常运行时cpu,latency,memory的特征。对于故障的诊断先后顺序,利用选取模型时的f1值来决定。将每个模型的f1值按从大到小的顺序作为诊断的先后顺序。
29.在测试阶段,已经训练好的三个模型级联起来,对输入数据进行故障诊断,故障诊断流程如图3所示。具体步骤如下:输入数据经过异常检测模型1时,仅检测故障1,检测到的数据为异常时,输出该数据为故障1,否则,表示数据为正常或其他类型故障,紧接着,将模型输出的不是故障1的数据放入第二个异常检测模型中,诊断出故障2,以此类推,最后由x个异常检测模型输出x个故障,不满足x种故障的数据作为正常数据输出。
30.在根因定位部分,在因果结构学习中,的目标是构建监控度量的因果图。因果图可以看作是度量之间的异常传播路径。从观测数据构造因果图较流行的方法是pc算法。pc算法利用统计检验来进行条件独立性分析,以此学习随机变量之间的因果关系。将微服务系统中的监控数据定义为,其中i代表滑动窗口中第i个时间步,k代表特征数量。将每个时间序列视为变量,将每个时间点的数据视为样本,pc算法输出具有k个节点的有向无环图dag。具体如下:将k点连接成全连接的无向图g,并测试g中每个相邻节点的条件独立性。如果条件独立性存在,则删除两个节点之间的边缘。然后利用v分离的原理来确定图中边缘的依赖方向,并将骨架扩展到dag。通常,当关键性能指标发生异常,那么表示
这个服务发生了故障。当微服务发生了网络延迟,则整个服务发生了故障。当异常发生时,提取异常数据中的latency特征输入到根因分析中,利用pc算法构建出异常传播图。为了能够从异常传播图中定位故障服务器,采用pagerank算法对异常传播图进行根因分析。将p
ij
定义为节点i到j的转换概率,具体计算公式如下:
31.其中w
ij
表示经过pc算法得到的i和j之间的权重。得到概率矩阵后,计算每个节点的根本原因得分v,具体公式如下:
32.其中α表示概率矩阵的转移概率,在本原理说明中设置为0.85。
33.除了拓扑原因之外,在某些系统故障发生期间,系统的异常模式也会影响最后的根因结果。为了捕捉故障数据的异常模式,在故障诊断期间分别返回在进行cpu占用,内存泄露和网络延迟诊断时的异常阈值。利用这三个异常检测阈值分别计算发生cpu占用,内存泄露和网络延迟三种故障时数据的异常度η,具体的计算公式如下:,,,,,分别表示当发生cpu异常、memory异常和latency异常时,输入数据的异常度。
34.因果整合:结合异常度和初始因果分数,进行因果整合,得到最后的最终因果分数,具体公式如下:,其中,β表示根因推断分数对最后的因果分数做出的贡献,在本原理说明中设置为β为0.5。
35.在得到最终因果分数后,根据所有最终因果分数进行从大到小排序,排名越靠前,证明该服务为导致服务发生故障的根本原因的可能性越大。
36.试验过程1、数据集在实验中,部署了sock-shop电子商务网站,它作为微服务和云原生技术的基准。该网站包括13项服务,包括前台、目录、购物车、用户、订单、支付、运输等功能服务,以及促进不同服务之间沟通的通信服务。
37.使用kubernetes在云中多个虚拟机(vm)上部署sock-shop。kubernetes集群包括1个主节点和3个工作节点,每个工作节点配置如下:ubuntu 18.04, 4vcpu, 16g ram memory, 80g disk。在主节点上使用开源监控和可视化工具prometheus和grafana来监控系统并收集服务级和资源级数据。此外,在主节点上使用负载生成工具locust来模拟微服务应用程序的工作负载。13个sock-shop服务部署在工作节点上,由kubernetes自动分配给不同的虚拟机。
38.为了模拟实际运行的应用程序,注入了三种常见异常:cpu占用、内存泄漏和网络延迟。使用pumba工具模拟网络故障,并为docker容器进行压力测试资源,以实现异常注入。对于cpu hog,消耗每个服务的cpu资源;对于内存泄漏,为每个服务连续分配内存;对于网络延迟,通过流量控制来延迟网络报文。每个异常持续1到5分钟,应用程序正常运行10到30分钟,然后为每个异常重复该过程至少5次。根据prometheus配置每5秒实时采集一次数据,同时采集服务级和资源级数据。在服务级别,收集每个服务的延迟。在资源级别,收集容器资源相关的指标,包括cpu使用情况、内存使用情况、磁盘读写情况以及网络接收和传输字节数。
39.接下来的对比实验用于对比本方法与已有方法的性能对比。
40.2、数据预处理为了提高模型的精度,采用数据标准化处理训练集和测试集,将不同规格的数据转换到统一的规格中,以减少规模,特征,分布差异对模型的影响。采用min-max标准化。
41.3、模型训练过程图1中
①
为本模型的预训练模块,设计该模块的主要目的是能够自动自适应从候选模型中选择最适合的,能够实现cpu、内存memory和延迟latency中某类异常的最佳检测模型。具体流程如图2所示,在训练数据上进行随机采样。具体步骤为:将已经在预处理过的训练数据上产生一个随机数,根据随机数对训练数据进行抽样,抽取一段大小为500的数据集作为训练子集。然后再从训练数据中随机抽取出一条发生了cpu占用的数据,并根据该数据产生一段大小为100的数据集,同时,以同样的方法分别抽样到包括内存泄漏和网络延迟的数据,将这三段数据集拼接在一起形成一个大小为300的测试子集。然后将随机采样的训练子集和测试子集中的cpu特征提取出来,分别放入候选模型中进行异常检测,并输出f1值。当在进行cpu异常检测时,数据中的其他异常视为正常数据。在进行5次采样后。输出5次采样后异常检测的平均f1值。接下来,找出平均f1值最大的模型,并输出该模型名称。以同样的方式分别得到最适合检测网络延迟和内存泄露的模型。
42.如图1中
②
所示,在数据预训练模块中,分别得到了检测三种故障的最佳模型。将训练数据中正常运行时cpu,latency,memory的监控数据分别提取出来放入对应的模型中,进行模型的训练,使得三个模型能够充分学习正常运行时cpu,latency,memory的特征。对于故障的诊断先后顺序,利用预训练阶段选取模型的f1值来决定。将每个模型的f1值按从大到小的顺序作为诊断的先后顺序。
43.模型训练完成后,如图1中
③
所示,将训练好的三个模型级联起来,对收集到的数据进行故障诊断。故障诊断的具体步骤如图3所示,首先,将数据输入到第一个模型中,进行异常检测。在异常检测时,设定一个异常阈值,当预测数据与真实数据的误差超过该阈值,则认定该点为异常点。为了能够提高异常检测精度,采用最佳f1值方法搜索最佳阈值,并返
回该阈值。当模型1对输入数据进行了异常检测后,输出异常数据和正常数据,其中异常数据表示故障1的发生,正常数据包括其他故障数据和没有发生任何故障的数据。接下来,将输出为正常的数据放入下一个模型中进行故障2的检测,同第一个模型一样,输出故障2和正常数据,并将该模型检测为正常的数据放入模型3中,输出故障3和正常数据。在三次故障诊断中,得到了三个异常阈值,用于捕捉实体度量数据的异常模式,以提高在根因定位中的定位精确率。
44.将发生异常的数据放入基于因果推断的根因定位中,如图1中
④
所示。在该部分中通过pc算法对故障节点进行因果关系学习,并构建节点之间的因果关系图,将因果关系图作为异常传播图。然后利用pagerank对异常传播图进行根因分析,并输出故障节点的因果分数。
45.为了进一步提高定位精度,利用故障诊断阶段返回的异常阈值分别计算当发生cpu占用,内存泄露和网络延迟时故障数据的异常度,具体公式如下:
46.其中thred在对相应故障进行诊断时返回的异常阈值。
47.如图1中
⑤
所示,将基于因果定位的根因推断方法得到的因果分数和数据的异常分数进行加权整合,并通过β来调节基于因果推断的根因定位分数和异常度对最后因果分数的贡献。在得到最后的因果分数,根据因果分数对故障节点进行故障重要度排序。排序越靠前证明该节点是导致故障传播根因的概率越大。
48.模型性能指标故障诊断模型的性能比较采用分类的几个基于混淆矩阵的主要性能指标:宏精确率、宏召回率、宏f1-score。
[0049][0050]
精确率指模型预测为正的样本中实际也为正的样本占被预测为正的样本的比例,计算公式为
[0051]
召回率指实际为正的样本中被预测为正的样本所占实际为正的样本的比例,计算公式为:
[0052]
f1 score是精确率和召回率的调和平均值,计算公式为:
[0053]
宏精确率,宏召回率和宏f1分别是指所有类别的每一个统计指标值的算数平均值。
[0054]
此外还使用f1 average rank来验证模型的鲁棒性。f1 average rank表示五个数
based)。
[0060]
图4、图5、图6分别展示了macro-precision,macro-recall和macro-f1在本模型和11种模型上的表现,从图中可以看出,本模型在三个评估指标上表现都较好,表明本模型能够更好的选择出适合诊断三种故障的模型并级联起来使得其在故障诊断方面有更高的性能。
[0061]
表1、本技术与11种故障诊断在5个数据集上的检测性能对比
[0062][0063]
表2、本技术与3种根因定位方法在5个数据集上的平均定位性能对比
[0064]
本发明的技术方案不限于上述具体实施例的限制,凡是根据本发明的技术方案做出的技术变形,均落入本发明的保护范围之内。
技术特征:
1.微服务系统故障诊断及根因定位方法,其特征在于,包括:s1、构建x个异常检测模型;s2、获取微服务系统中的监控数据作为训练数据集;s3、训练数据集分别导入x个异常检测模型,对其进行训练优化,得到x个优化后的异常检测模型;s4、分析x个优化后的异常检测模型的训练结果;并根据训练结果构建故障诊断模型;s5、对故障节点进行因果关系学习,并构建节点之间的因果关系图作为异常传播图;s6、实时获取监测数据;s7、利用故障诊断模型分析监测数据的故障诊断结果;s8、根据异常传播图和故障诊断结果定位故障原因。2.根据权利要求1所述的微服务系统故障诊断及根因定位方法,其特征在于,分析训练结果包括:提取包含多个预设特征的数据,分别导入x个优化后的异常检测模型,得到每个优化后的异常检测模型对于预设特征的异常检测效果作为训练结果。3.根据权利要求1或2所述的微服务系统故障诊断及根因定位方法,其特征在于,根据训练结果在x个优化后的异常检测模型中选取x个异常检测模型进行级联构建故障诊断模型,其中x小于x。4.根据权利要求3所述的微服务系统故障诊断及根因定位方法,其特征在于,在s4中,选取的x个异常检测模型根据训练结果的优劣顺序进行级联构建故障诊断模型。5.根据权利要求1所述的微服务系统故障诊断及根因定位方法,其特征在于,在s5中,利用pc算法对故障节点进行因果关系学习构建节点之间的因果关系图作为异常传播图。6.根据权利要求1所述的微服务系统故障诊断及根因定位方法,其特征在于,在s8中包括:s81、利用pagerank算法对异常传播图进行根因分析,并输出所有故障节点的初始因果分数;s82、利用故障诊断结果分别计算故障数据的异常度;s83、根据初始因果分数和异常度进行加权整合计算每个节点的最终因果分数;s84、根据最终因果分数对故障节点进行故障重要度排序定位故障原因。7.根据权利要求6所述的微服务系统故障诊断及根因定位方法,其特征在于,在s81中,初始因果分数v表示为,其中μ表示微服务架构中服务的数量,α表示概率矩阵的转移概率,p为转换概率,节点i到j的转换概率p
ij
表示为,其中w
ij
表示经过pc算法得到的i和j之间的权重。8.根据权利要求7所述的微服务系统故障诊断及根因定位方法,其特征在于,在s82中,
计算故障数据的异常度η表示为,其中表示监控数据,γ表示发生故障的类型,i代表滑动窗口中第i个时间步,k代表特征数量,n代表输入故障数据的时间长度,thred
γ
在故障类型为γ进行诊断时返回的异常阈值。9.根据权利要求8所述的微服务系统故障诊断及根因定位方法,其特征在于,在s83中,计算最终因果分数score
γ
表示为,β表示根因推断分数对最后的因果分数做出的贡献,表示当发生类型的故障时服务节点的初始因果分数。
技术总结
本发明公开了微服务系统故障诊断及根因定位方法,涉及计算机技术领域,包括S1构建X个异常检测模型;S2获取微服务系统中的监控数据作为训练数据集;S3训练优化X个异常检测模型;S4根据训练结果构建故障诊断模型;S5对故障节点进行因果关系学习,构建异常传播图;S6实时获取监测数据;S7利用故障诊断模型分析监测数据的故障诊断结果;S8根据异常传播图和故障诊断结果定位故障原因;本方法通过预训练机制,自动从X个异常检测模型中选择x个最适合检测CPU占用,内存泄露和网络延迟的模型,并将这x个模型级联起来,实现对观测数据故障诊断的目的。通过捕捉故障数据的异常模式,并与根因定位方法结合,达到对发生故障服务定位的目的。达到对发生故障服务定位的目的。达到对发生故障服务定位的目的。
技术研发人员:陈鹏 宋雨佳 温序铭 辛茹月 赵志明 陈娟 熊玲 李曦
受保护的技术使用者:西华大学
技术研发日:2023.06.13
技术公布日:2023/7/20
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
