一种故障定位方法及装置转让专利

申请号 : CN202110002144.0

文献号 : CN112866010B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李永福王鹏

申请人 : 聚好看科技股份有限公司

摘要 :

本申请实施例提供一种故障定位方法及装置,方法包括:计算服务调用链关系图中相邻节点的服务相关系数,将相关系数作为相邻节点所在边的权重,以及根据服务调用链关系图和权重创建邻接矩阵,服务调用链关系图包括各节点之间的服务调用关系;计算任一节点与其他节点的服务相关系数,以及将相关系数作为初始向量:将初始向量与邻接矩阵迭代相乘,直至数据收敛,得到结果向量,以及根据结果向量确定故障根因。本申请实施例的故障定位方法不仅能够快速定位故障根因,还能够节约人力,提升定位故障根因的效率。

权利要求 :

1.一种故障定位方法,其特征在于,包括:

获取服务调用链关系图,计算所述服务调用链关系图中相邻节点的服务相关系数,将所述相关系数作为相邻节点所在边的权重,以及根据所述服务调用链关系图和所述权重创建邻接矩阵,其中,所述服务调用链关系图包括各节点之间的服务调用关系;

计算任一节点与其他节点的服务相关系数,以及将所述相关系数作为初始向量;

将所述初始向量与所述邻接矩阵迭代相乘,直至数据收敛,得到结果向量,所述结果向量包括所述服务调用链关系图中多个节点的故障根因疑似值,所述故障根因疑似值用于指示节点出现故障的概率;

按照所述多个节点的故障根因疑似值由大到小的顺序进行排列得到故障排查顺序,所述故障排查顺序用于指示所述多个节点出现故障的概率由大到小的顺序。

2.根据权利要求1所述故障定位方法,其特征在于,在计算所述服务调用链关系图中相邻节点的服务相关系数,将所述相关系数作为相邻节点所在边的权重时,所述方法具体包括:获取相邻节点的多个服务监控数据,根据多个所述服务监控数据分别计算相邻节点的多个相关系数,将数值最大的所述相关系数作为相邻节点所在边的权重。

3.根据权利要求1所述故障定位方法,其特征在于,在根据所述服务调用链关系图和所述权重创建邻接矩阵之前,所述方法还包括:在所述服务调用链关系图中添加节点到节点本身的边,以及将新添加边的权重设置为

1。

4.根据权利要求1所述故障定位方法,其特征在于,在根据所述服务调用链关系图和所述权重创建邻接矩阵之前,所述方法还包括:在所述服务调用链关系图中相邻节点之间只存在单向的边时,在所述相邻节点之间添加与当前存在边的方向相反的边,以及将新添加边的权重设置为当前存在边的权重与预设系数的乘积。

5.根据权利要求1所述故障定位方法,其特征在于,在将所述初始向量与所述邻接矩阵迭代相乘之前,所述方法还包括:将所述邻接矩阵归一化处理。

6.根据权利要求1所述故障定位方法,其特征在于,在将所述初始向量与所述邻接矩阵迭代相乘之前,所述方法还包括:将所述初始向量中数值小于相关系数阈值的所述相关系数的数值更改为0。

7.一种故障定位装置,其特征在于,包括:

邻接矩阵创建单元,用于执行:获取各节点间的服务调用链关系图,计算所述服务调用链关系图中相邻节点的服务相关系数,将所述相关系数作为相邻节点所在边的权重,以及根据所述服务调用链关系图和所述权重创建邻接矩阵,其中,所述调用链关系图包括各节点之间的服务调用关系;

初始向量创建单元,用于执行:计算任一节点与其他节点的服务相关系数,以及将所述相关系数作为初始向量;

故障根因确定单元,用于执行:将所述初始向量与所述邻接矩阵迭代相乘,直至数据收敛,得到结果向量;所述结果向量包括所述服务调用链关系图中多个节点的故障根因疑似值,所述故障根因疑似值用于指示节点出现故障的概率;

按照所述多个节点的故障根因疑似值由大到小的顺序进行排列得到故障排查顺序,所述故障排查顺序用于指示所述多个节点出现故障的概率由大到小的顺序。

8.根据权利要求7所述的故障定位装置,其特征在于,在计算所述服务调用链关系图中相邻节点的服务相关系数,将所述相关系数作为相邻节点所在边的权重时,所述邻接矩阵创建单元具体用于执行:获取相邻节点的多个服务监控数据,根据多个所述服务监控数据分别计算相邻节点的多个相关系数,将数值最大的所述相关系数作为相邻节点所在边的权重。

9.根据权利要求7所述的故障定位装置,其特征在于,在根据所述服务调用链关系图和所述权重创建邻接矩阵之前,所述邻接矩阵创建单元具体用于执行:在所述服务调用链关系图中添加节点到节点本身的边,以及将新添加边的权重设置为1。

10.根据权利要求7所述的故障定位装置,其特征在于,在根据所述服务调用链关系图和所述权重创建邻接矩阵之前,所述邻接矩阵创建单元具体用于执行:在所述服务调用链关系图中相邻节点之间只存在单向的边时,在所述相邻节点之间添加与当前存在边的方向相反的边,以及将新添加边的权重设置为当前存在边的权重与预设系数的乘积。

说明书 :

一种故障定位方法及装置

技术领域

[0001] 本申请涉及通信技术领域,尤其涉及一种故障定位方法及装置。

背景技术

[0002] 随着分布式系统和微服务的兴起,生产系统变得越来越复杂,系统故障的发生也越来越频繁。分布式系统通常包括数十个甚至数百个微服务,这些微服务部署于不同的服务器。在接收到用户的服务请求之后,需要多个微服务通过互相调用的形式完成用户的请求。
[0003] 当系统的某个微服务发生故障时,多个微服务间由于互相调用的关系,其他微服务也会出现异常的情况。为了定位故障的根因服务,传统的方法为,运维人员从最前端的服务开始,逐个排查异常的服务,直至排查到故障的根因服务。上述方法耗时耗力,定位故障根因的效率较低。

发明内容

[0004] 为了解决传统的故障定位方法耗时耗力,定位故障根因的效率较低的问题,本申请提供了一种故障定位方法及装置。
[0005] 第一方面,本申请实施例提供一种故障定位方法,该方法包括:
[0006] 获取各节点间的服务调用链关系图,计算所述服务调用链关系图中相邻节点的服务相关系数,将所述相关系数作为相邻节点所在边的权重,以及根据所述服务调用链关系图和所述权重创建邻接矩阵,其中,所述调用链关系图包括各节点之间的服务调用关系;
[0007] 计算任一节点与其他节点的服务相关系数,以及将所述相关系数作为初始向量;
[0008] 将所述初始向量与所述邻接矩阵迭代相乘,直至数据收敛,得到结果向量,以及根据所述结果向量确定故障根因。
[0009] 第二方面,本申请实施例提供一种故障定位装置,该装置包括:
[0010] 邻接矩阵创建单元,用于执行:获取各节点间的服务调用链关系图,计算所述服务调用链关系图中相邻节点的服务相关系数,将所述相关系数作为相邻节点所在边的权重,以及根据所述服务调用链关系图和所述权重创建邻接矩阵,其中,所述调用链关系图包括各节点之间的服务调用关系;
[0011] 初始向量创建单元,用于执行:计算任一节点与其他节点的服务相关系数,以及将所述相关系数作为初始向量;
[0012] 故障根因确定单元,用于执行:将所述初始向量与所述邻接矩阵迭代相乘,直至数据收敛,得到结果向量,以及根据所述结果向量确定故障根因。
[0013] 本申请提供的技术方案包括以下有益效果:根据各节点间的服务调用关系和各节点间的服务相关系数创建邻接矩阵和初始向量,以及将初始向量和邻接矩阵迭代相乘,得到结果向量,根据结果向量确定故障根因。本申请实施例的故障定位方法不仅能够快速定位故障根因,还能够节约人力,提升定位故障根因的效率。

附图说明

[0014] 为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0015] 图1示出了本申请实施例提供的一种故障定位方法的流程示意图;
[0016] 图2示出了本申请实施例提供的一种节点间服务调用链关系示意图;
[0017] 图3示出了本申请实施例提供的又一种节点间服务调用链关系示意图;
[0018] 图4示出了本申请实施例提供的一种故障定位装置框架图。

具体实施方式

[0019] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0020] 本说明书通篇提及的″多个实施例″、″一些实施例″、″一个实施例″或″实施例″等,意味着结合该实施例描述的具体特征、结构或特性包括在至少一个实施例中。因此,本说明书通篇出现的短语″在多个实施例中″、″在一些实施例中″、″在至少另一个实施例中″或″在实施例中″等并不一定都指相同的实施例。此外,在一个或多个实施例中,具体特征、结构或特性可以任何合适的方式进行组合。因此,在无限制的情形下,结合一个实施例示出或描述的具体特征、结构或特性可全部或部分地与一个或多个其他实施例的特征、结构或特性进行组合。这种修改和变型旨在包括在本申请的范围之内。
[0021] 在容器云环境下,定位故障根因的传统方法为依靠运维人员的经验,逐个节点分析排查故障,而随着容器云中的微服务越来越来,需要的分析时间也越来越多,定位故障的效率严重滞后,导致容器云平台的可用性和稳定性收到威胁。
[0022] 为了解决上述问题,本申请提供一种故障定位方法,该方法基于容器云产生的数据(接口调用链数据和监控数据),利用推荐算法,确定推荐结果,运维人员按照推荐结果定位故障根因,从而提升故障定位效率。
[0023] 如图1的故障定位方法的流程示意图,该方法包括以下步骤:
[0024] 步骤S101,获取服务调用链关系图;本申请实施例的服务调用链关系图是基于各个节点的接口调用链数据。
[0025] 示例性的,如图2所示,采集各节点服务间的调用链数据,通过服务间的调用关系构造基本的有向图。具体的,该服务调用链关系图中包括八个节点,八个节点上分别包括八个接口A1至A8,八个接口分别承载服务S1至S8。节点(S1,A1)上的服务为最前端接收请求的服务。当用户请求服务时,调用关系为:节点(S1,A1)同时向节点(S2,A2)、节点(S3,A3)、节点(S4,A4)以及节点(S5,A5)调用服务S2、S3、S4以及S5,节点(S4,A4)又向节点(S6,A6)和节点(S7,A7)调用服务S6和服务S7,节点(S5,A5)向节点(S7,A7)调用服务S7,最后节点(S6,A6)和节点(S7,A7)又同时调用节点(S8,A8)的服务S8。由此完成整个服务调用链关系,形成如图2所示的有向图。这里,假设S1的指标出现异常时,需要定位到有向图中的具体哪个节点异常,最终导致S1的异常。
[0026] 在图2所示的有向图中,具有调用关系的两个节点之间存在带有方向的边。此时,获取各个节点的服务监控数据。示例性的,可以采集服务的CPU使用率、内存使用率、网卡入流量、网卡出流量等监控数据。当服务S1异常时,可以采集发生异常时的前3个小时的监控数据作为原始数据。根据有向图,计算相邻节点(即存在有方向边的两个节点)的服务相关系数。可以根据多个监控数据分别计算相邻节点之间的相关系数,最后将数值最大的相关系数作为相邻节点所在边的权重。示例性的,如果根据CPU使用率计算的相关系数最大,则将根据CPU使用率夹计算的相关系数作为相邻节点所在边的权重。
[0027] 计算相关系数的方法可以利用皮尔逊相关系数计算法,斯皮尔曼相关系数计算法,肯德尔相关系数计算法等。根据图2所示的服务调用链关系图和得到的边的权重创建邻接矩阵。该邻接矩阵为M(N×N)的矩阵,其中N为节点的个数,邻接矩阵中的数值即为计算得到的边的权重。
[0028] 步骤S102,计算任一节点与其他节点的服务相关系数,以及将所述相关系数作为初始向量。示例性的,可以计算节点(S1,A1)与其他节点的服务相关系数,得到初始向量V=[V1、V2...V8],初始向量中的数值依次为节点(S1,A1)与节点(S2,A2)至节点(S8,A8)的服务相关系数。
[0029] 步骤S103,将步骤S102中创建的初始向量V=[V1,V2...V8]和步骤S103中创建的邻接矩阵M迭代相乘,直至数据收敛,即得到的结果向量中数值趋近平稳。得到的结果向量V′=[V1′,V2′...V8′]中分别表示八个节点的故障根因疑似值。运维人员可以直接将故障根因疑似值数值最大的节点作为故障根因进行排查。也可以以得到的故障根因疑似值对节点进行排序。示例性的,如果故障根因疑似值的大小顺序为V2′、V5′...V1′,则按照节点(S2,A2)、节点(S5,A5)...节点(S1,A1)的顺序进行故障排查,从而提升故障排查的效率。
[0030] 在一些实施例中,由于服务还可能存在自己调用自己的情况,为了进一步提高故障根因计算的准确性,如图3所示,在图中添加节点到节点自身的边,节点到节点自身的边的权重设置为1,则在邻接矩阵中节点到节点自身的数值即为1。
[0031] 在一些实施例中,由于服务调用时,发出请求需要有反馈的过程,因此请求的过程都是交互的,为了进一步提高故障根因计算的准确性,如图3所示,在图中存在正向边(即调用方向的边)的两节点之间添加返回的边,权重设置为当前边的权重与预设系数的乘积。示例性的,节点(S1,A1)和节点(S3,A3)之间的正向边的权重为0.8,则节点(S1,A1)和节点(S3,A3)之间添加的反向边的权重为0.8*预设系数。其中,预设系数大于0且小于1,具体的可根据实际情况确定。在邻接矩阵中节点(S1,A1)到节点(S3,A3)的权重数值则为0.8,则节点(S3,A3)到节点(S1,A1)的权重则为0.8*预设系数。
[0032] 在一些实施例中,在将初始向量与邻接矩阵迭代相乘之前,还将邻接矩阵归一化处理,得到转移概率矩阵。对邻接矩阵进行归一化处理后,可以减少矩阵中某一较大的数值对其他较小数值的影响。归一化处理后的转移概率矩阵中的数值取值范围都转化为0到1区间内。
[0033] 在一些实施例中,在将初始向量与邻接矩阵迭代相乘之前,还将初始向量中数值小于相关系数阈值的相关系数的数值更改为0。示例性的,计算得到的初始向量为[1,0.2,0.3,0.5,0.5,0.6,0.7,0.5],相关系数的阈值为0.5,则小于0.5的相关系数0.2和0.3修改为0,得到修改后的初始向量为[1,0,0,0.5,0.5,0.6,0.7,0.5]。这样可以过滤掉一些不相关的服务,从而减少计算量,进一步提高故障定位的效率。
[0034] 本申请实施例提供一种故障定位装置,用于执行图1对应的实施例,如图4所示,本申请提供的故障定位装置包括:
[0035] 邻接矩阵创建单元201,用于执行:获取各节点间的服务调用链关系图,计算相邻节点的服务相关系数,将所述相关系数作为相邻节点所在边的权重,以及根据所述服务调用链关系图和所述权重创建邻接矩阵,其中,所述调用链关系图包括各节点之间的服务调用关系;
[0036] 初始向量创建单元202,用于执行:计算任一节点与其他节点的服务相关系数,以及将所述相关系数作为初始向量;
[0037] 故障根因确定单元203,用于执行:将所述初始向量与所述邻接矩阵迭代相乘,直至数据收敛,得到结果向量,以及将结果向量中数值最大的节点确定为故障根因。
[0038] 在一些实施例中,在计算相邻节点的服务相关系数,将所述相关系数作为相邻节点所在边的权重时,所述邻接矩阵创建单元201具体用于执行:
[0039] 获取相邻节点的多个服务监控数据,根据多个所述服务监控数据分别计算相邻节点的多个相关系数,将数值最大的所述相关系数作为相邻节点所在边的权重。
[0040] 在一些实施例中,在根据所述服务调用链关系图和所述权重创建邻接矩阵之前,所述邻接矩阵创建单元201具体用于执行:在所述服务调用链关系图中添加节点到节点本身的边,以及将新添加边的权重设置为1。
[0041] 在一些实施例中,在根据所述服务调用链关系图和所述权重创建邻接矩阵之前,所述邻接矩阵创建单元201具体用于执行:在所述服务调用链关系图中相邻节点之间只存在单向的边时,在所述相连节点之间添加与当前存在边的方向相反的边,以及将新添加边的权重设置为当前存在边的权重与预设系数的乘积。
[0042] 以上已经描述的包括本发明的实现的示例。为了描述要求保护主题的目的,当然不可能描述组件或方法的每一个可设想组合,但是要意识到,本创新的许多另外组合和置换是可能的。相应地,要求保护主题打算包含全部这类改变、修改和变化,其落入所附权利要求的精神和范围之内。此外,包括″摘要″中所述的事物的本申请的所示实现的以上描述并不是要详细列举或者将所公开实现局限于所公开的精确形式。虽然本申请中为了说明目的而描述具体实现和示例,但是如相关领域的技术人员能够认识的,被认为在这类实现和示例的范围之内的各种修改是可能的。
[0043] 具体来说并且关于由上述组件、装置、电路、系统等所执行的各种功能,除非另加指示,否则用来描述这类组件的术语打算对应于执行所述组件的所指定功能(例如,功能等效)的任何组件,即使不是在结构上等效于所公开结构(其执行要求保护主题的本申请所示示范方面的功能)。在这方面,还将会认识到,创新包括系统以及计算机可读存储介质,其具有计算机可执行指令,以用于执行要求保护主题的各种方法的动作和/或事件。
[0044] 已经针对若干组件/块之间的交互描述了上述系统/电路/模块。能够意识到,这类系统/电路和组件/块能够包括那些组件或者所指定子组件、所指定组件或者子组件的一些和/或附加组件,并且按照以上述各种置换和组合。子组件还能够实现为通信地耦合到其它组件而不是包括在父组件(分级)内的组件。另外,应当注意,一个或多个组件可组合为提供聚合功能性的单个组件或者分为若干单独子组件,以及可提供任何一个或多个中间层(例如管理层),以通信地耦合到这类子组件,以便提供综合功能性。本申请所述的任何组件还可与本申请中没有具体描述但是本领域的技术人员已知的一个或多个其它组件进行交互。
[0045] 虽然阐明本发明的广义范围的数值范围和参数是近似值,但是具体示例中阐明的数值尽可能准确地报导。但是,任何数值固有地含有必然产生于其相应测试测量中找到的标准偏差的某些误差。此外,本申请所公开的全部范围要被理解为包含其中所包含的任何和全部子范围。例如,″小于或等于11″的范围能够包括零的最小值与11的最大值之间(并且包含该最小值与最大值)的任何和全部子范围,即,任何和全部子范围具有等于或大于零的最小值以及等于或小于11的最大值(例如1至5)。在某些情况下,如对参数所述的数值能够具有负值。
[0046] 另外,虽然可能已经仅针对若干实现之一公开了本创新的特定特征,但是这种特征可如对任何给定或特定应用可预期和有利的与其它实现的一个或多个其它特征相组合。此外,在详细描述或者权利要求中使用术语″包括(include、including)″、″具有″、″含有″及其变体和其它类似词语的意义上,这些术语打算采用与作为开放过渡词语的术语″包含″相似的方式是包含的,而没有排除任何附加或其它元件。
[0047] 遍及本说明书中提到″一个实现″或″一实现″表示结合该实现所述的特定特征、结构或特性包含在至少一个实现中。因此,短语″在一个实现中″或者″在一实现中″在遍及本说明书中的各个位置的出现不一定全部指相同实现。此外,具体特征、结构或特性可采用任何适当方式结合在一个或多个实现中。
[0048] 此外,遍及本说明书中提到″项″或″文件″意味着结合实现所述的特定结构、特征或对象不一定指相同对象。此外,″文件″或″项″能够指各种格式的对象。
[0049] 如本申请中使用的术语″节点″、″组件″、″模块″、″系统″等一般打算指作为硬件(例如电路)、硬件和软件的组合的计算机相关实体或者与具有一个或多个特定功能性的操作机器相关的实体。例如,组件可以是(但不限于)在处理器(例如数字信号处理器)上运行的进程、处理器、对象、可执行、执行线程、程序和/或计算机。作为说明,在控制器上运行的应用和控制器两者均能够是组件。一个或多个组件可驻留在进程和/或执行线程中,以及组件可定位在一个计算机上和/或分布在两个或更多计算机之间。虽然在各个实现中描绘单独组件,但是要意识到,组件可采用一个或多个公共组件来表示。此外,各个实现的设计能够包括不同组件放置、组件选择等,以实现最佳性能。此外,″装置″能够采取专门设计硬件;通过其上的软件(其使硬件能够执行特定功能)的执行被专门化的一般化硬件;计算机可读介质上存储的软件;或者其组合的形式。
[0050] 此外,词语″示例″或″示范″在本申请中用来表示″用作示例、实例或说明″。本申请中描述为″示范″的任何方面或设计不一定被理解为相对其它方面或设计是优选或有利的。相反,词语″示例″或″示范″的使用打算以具体方式呈现概念。如本申请所使用的,术语″或者″打算表示包含″或″而不是互斥″或″。即,除非另加说明或者从上下文清楚地知道,否则″X采用A或B″打算表示自然包含置换的任一个。即,如果X采用A;X采用B;或者X采用A和B两者,则在上述实例的任何实例下均满足″X采用A或B″。另外,如本申请和所附权利要求中所使用的冠词″一(a和an)″应当一般地理解为表示″一个或多个″,除非另加说明或者从上下文清楚地知道针对单数形式。