具体实施方式
网络拓扑结构中包括多个节点,多个节点可以通过复杂的调用链路串联在一起,共同为业务提供服务。然而,当一个节点出现故障并发出告警时,由于节点之间可以通过调用链路相互关联,因此,会导致其他正常的节点也会产生告警,这样,就需要定位真正的故障节点。
现有技术中,在定位故障节点时,通过可以采用人工定位的方法。具体地,在监控到多个节点出现故障告警时,可以由专家基于历史经验推导出多个节点中可能的故障节点。然而,在实际应用中,人工定位的方法往往受限于专家的经验,针对未出现过的故障,通常很难推导出真正的故障节点或定位的故障节点有误,导致不能有效地定位故障节点。
此外,在定位故障节点,还可以通过方法库进行定位。具体地,可以将人工经验沉淀为定位规则,通过脚本的方式保存在方法库中,当监控到多个节点出现故障告警时,可以调用方法库中的定位规则来判断真正的故障节点。然而,在实际应用中,方法库需要长时间的积累和开发,复杂度和开发难度都比较大,且,方法库中的定位规则通常基于历史经验沉淀得到,针对未出现过的故障,通常很难判断真正的故障节点,导致不能有效地定位故障节点。
由此可见,现有技术中还缺少一种有效地方法可以定位网络拓扑结构中真正的故障节点。
为了解决上述技术问题,本申请实施例提供一种故障定位方法和装置,该方法包括:获取网络拓扑结构中多个节点的多个告警信息;对所述多个告警信息进行预处理,凸显多个目标告警信息;若所述多个目标告警信息对应的多个目标节点的个数大于或等于预设个数,则确定所述多个目标节点的调用链路;基于所述调用链路,确定所述多个目标节点的故障特征;基于所述多个目标节点的故障特征,确定所述多个目标节点中的故障节点。
这样,在获取到多个告警信息后,通过凸显其中的目标告警信息,基于目标告警信息对应的目标节点的调用链路确定多个目标节点的故障特征,通过多个目标节点的故障特征定位得到真正的故障节点,可以实现对故障节点地有效定位,从而在定位到真正的故障节点后,可以有针对性地进行故障解决,进而为用户提供正常服务。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1是本申请的一个实施例故障定位方法的流程示意图。所述方法如下所述。
S102:获取网络拓扑结构中多个节点的多个告警信息。
在S102中,可以采用多个监控设备分别对网络拓扑结构中包括的多个节点进行监控,在监控的过程中,当网络拓扑结构中的一个或多个节点出现故障时,该一个或多个节点的监控设备会发出告警信息,并引发其他正常节点的监控设备也会发出告警信息。
在多个监控设备发出多个告警信息后,本实施例可以获取该多个告警信息。其中,多个告警信息可以对应多个节点,该多个节点可以理解为发出该多个告警信息的多个监控设备所监控的多个节点,多个节点中可以包括故障节点和正常节点。
本实施例中,告警信息可以包括告警信息对应的节点的标识,与告警信息对应的节点存在调用关系的其他节点的标识以及告警信息的告警类型。其中,告警信息的告警类型可以是网络超时、磁盘读写失败、数据库操作失败、业务问题等。
在获取到多个告警信息后,可以执行S104。
S104:对所述多个告警信息进行预处理,凸显多个目标告警信息。
在S104中,由于多个告警信息中通常包括重要的告警信息以及不重要的告警信息,而重要的告警信息通常是需要重点关注的告警信息,不重要的告警信息通常是不需要重点关注且可以忽略的告警信息,因此,本实施例在获取到多个告警信息后,可以对多个告警信息进行预处理,以凸显其中重要的告警信息,同时减少告警信息的冗余。这里为了便于区分,可以将重要的告警信息称为目标告警信息。
本实施例在对多个告警信息进行预处理时,可以分别对每个节点的告警信息进行时间关联分析。以其中一个节点为例,在对该节点的告警信息进行预处理时,可以包括以下至少一种:
第一:对节点的告警信息进行压缩,将设定周期内重复的告警信息合并为一个告警信息。
设定周期可以理解为预设的最小区分时间周期,在设定周期内,若节点的监控设备产生出大量重复的告警信息,则为了减少告警信息的冗余,可以将设定周期内重复的多个告警信息进行合并,得到一个告警信息。
可选地,在将多个重复告警信息进行合并后,可以在合并后的一个告警信息中可以记录被合并的告警信息的个数。
例如,在设定周期1分钟内,由于网络问题导致节点1的监控设备产生大量相同的网络IO超时的告警信息,那么,这些相同的网络IO超时的告警信息可以合并为一个告警信息,合并后的告警信息中可以记录被合并的告警信息的数量。
本实施例中,在对一个节点的告警信息进行压缩时,压缩规则可以描述如下:
其中,E1至En为一个节点的n个告警信息,t为上述记载的设定周期,T1为E1的告警时间,Ti为Ei的告警时间,“==”计算符表示两个告警信息的相似度小于区分的粒度,其中,若E1==E2,则可以说明E1和E2为重复的告警信息。
基于上述压缩规则可知,若E1至En为重复的告警信息,且Ti-T1<t,即E1至Ei为设定周期内的多个重复告警信,则,可以只保留E1,忽略E2至Ei,即将E1至Ei合并为一个告警信息。
第二:对节点的告警信息进行过滤,滤除不满足业务关注条件且告警时间位于设定时间段内的告警信息。
具体地,针对一个节点的每个告警信息,可以判断告警信息是否满足预设的关注条件,预设的关注条件可以基于具体地业务规则确定,这里不做具体限定。
若告警信息满足预设的关注条件,则可以确定该告警信息为需要关注的告警信息,并将该告警信息作为目标告警信息;若告警信息不满足预设的关注条件,则可以进一步判断该告警信息的告警时间是否位于设定时间段内,设定时间段可以是业务高峰期(例如每天的10:00至19:00),也可以是业务低峰期(例如每天的2:00至6:00),具体可以根据实际的业务规则确定,这里不做具体限定。
若告警信息的告警时间位于设定时间段内,则可以认为该告警信息是可以忽略的告警信息,并对该告警信息进行过滤,若告警信息的告警时间没有位于设定时间段内,则可以认为该告警信息为需要关注的告警信息,并将该告警信息作为目标告警信息。
本实施例中,在对节点的告警信息进行过滤时,过滤规则可以描述如下:
其中,Ei为一个节点的一个告警信息,S()函数表示业务规则判断,A为预设的关注条件,T表示设定时间段。
基于上述过滤规则可知,若Ei不满足预设的关注条件A且Ei的告警时间位于T内,则可以对Ei进行过滤。
第三:对节点在设定周期内的告警信息进行次数统计;舍弃次数小于预设次数的告警信息。
设定周期可以与上述记载的设定周期相同。
针对一个节点的告警信息,可以以设定周期为时间单位,统计节点在设定周期内的告警信息的次数,若统计得到的次数小于预设次数,则可以认为节点在设定周期内的告警信息为偶发性的告警信息,不需要重点关注,为了避免冗余,可以将这些偶发性的告警信息舍弃。其中,预设次数可以根据实际的业务规则确定,这里不做具体限定。
若统计得到的次数大于或等于预设次数,则可以认为节点在设定周期内的告警信息不是偶发性的告警信息,而是需要重点关注的告警信息,此时,不能将这些告警信息舍弃。
本实施例中,在对次数小于预设次数的告警信息进行舍弃时,舍弃规则可以描述如下:
其中,E1至En为一个节点的n个告警信息,t为设定周期,“==”计算符表示两个告警信息的相似度小于区分的粒度,count为统计相同告警信息的计数值,M为预设次数。
基于上述舍弃规则可知,若节点在设定周期内的告警信息的个数count小于M时,可以将节点在设定周期内的告警信息舍弃。
第四:确定节点在设定周期内的告警信息的优先级;舍弃优先级低于预设优先级的告警信息。
设定周期可以与上述记载的设定周期相同。
针对一个节点在设定周期内的每个告警信息,可以执行以下操作:
首先,确定告警信息的优先级。告警信息的优先级可以基于告警类型确定得到,例如,若告警信息的告警类型为网络超时、磁盘读写失败或数据库操作失败,则可以认为告警信息的优先级为高优先级,若告警信息的告警类型为业务问题,则可以认为告警信息的优先级为低优先级。
需要说明的是,优先级的级别可以包括上述记载的高优先级和低优先级两种级别,也可以包括更多种级别,这里不做具体限定。
其次,将告警信息的优先级与预设优先级进行比较,若告警信息的优先级低于预设优先级,则可以认为该告警信息是不重要的告警信息,为了避免冗余,可以舍弃该告警信息;反之,若告警信息的优先级等于或高于预设优先级,则可以认为该告警信息是重要的告警信息,需要重点关注,可以将该告警信息作为目标告警信息。其中,预设优先级可以根据实际的业务需求确定,这里也不做具体限定。
本实施例中,在对优先级低于预设优先级的告警信息进行舍弃时,舍弃规则可以描述如下:
其中,E1至En为一个节点的n个告警信息,t为设定周期,sD==为告警事件所发生的上下游环境相同,S为告警事件的优先级。
基于上述舍弃规则可知,若Ei的优先级高于Ej的优先级,则可以舍弃优先级较低的Ej,这里可以认为Ei的优先级大于预设优先级,Ej的优先级小于预设优先级。
本实施例中,在对一个节点的告警信息进行预处理时,优选地,可以进行上述四种预处理,以便更加有效地凸显出其中的重要告警信息。其中,四种预处理的先后顺序可以不做具体限定。
在对一个节点的告警信息进行上述四种预处理后,可以按照相同的方法对多个节点中其他节点的告警信息进行上述四种预处理,最终可以得到多个目标告警信息。
需要说明的是,由于在对每个节点的告警信息进行上述四种预处理时,会对每个节点的告警信息进行过滤和舍弃,因此,在对一个节点的告警信息进行预处理后,该节点的告警信息有可能会被全部过滤或舍弃掉,这样,在对多个节点的告警信息进行预处理后,最终得到的目标告警信息对应的节点的个数很有可能小于未预处理之前多个告警信息对应的多个节点的个数。
例如,在对20个节点的告警信息进行上述预处理后,其中12个节点的告警信息被全部过滤或舍弃,那么,最终得到的目标告警信息对应的节点的个数为8个。
在基于上述记载的内容得到多个目标告警信息后,可以执行S106。
S106:若所述多个目标告警信息对应的多个目标节点的个数大于或等于预设个数,则确定所述多个目标节点的调用链路。
在S106中,在得到多个目标告警信息后,可以判断多个目标告警信息对应的节点的个数是否大于或等于预设个数,以便确定目标告警信息是否为复杂的告警信息。这里为了便于区别,可以将目标告警信息对应的节点称为目标节点。
本实施例中,复杂的告警信息可以理解为目标告警信息对应的目标节点中既包括正常节点也包括故障节点,从而难以直接定位故障节点。预设个数可以根据复杂告警信息的判断标准确定。
在一种实现方式中,若目标节点的个数小于预设个数,则可以说明目标告警信息不是复杂的告警信息,此时,可以将目标节点确定为故障节点。
在另一种实现方式中,若目标节点的个数大于或等于预设个数,则可以说明目标告警信息是复杂的告警信息,目标节点中既包括真正的故障节点也包括正常节点,无法直接定位故障节点。在这种情况下,为了进一步定位故障节点,可以确定多个目标节点的调用链路,以便可以基于该调用链路定位多个目标节点中的故障节点。
本实施例中,调用链路中可以包括:多个目标节点的调用方向、多个目标节点的调用失败依赖权重以及多个目标节点的强弱依赖权重。以其中两个目标节点为例,两个目标节点的调用方向可以表征两个目标节点之间的调用关系;两个目标节点的调用失败依赖权重可以表征其中一个目标节点在一定时间内调用另一个目标节点时的调用失败次数,具体可以与调用失败次数成反比;两个目标节点的强弱依赖权重可以表征一个目标节点对另一个目标节点的依赖程度,具体可以理解为一个目标节点调用失败时,另一个目标节点调用失败的可能性。
这样,在确定多个目标节点的调用链路时,一种实现方式可以包括:
首先,可以获取S102中记载的网络拓扑结构中多个节点的调用信息。
调用信息中可以包括网络拓扑结构对应的链路网络,多个节点中每个节点的运行数据以及每个节点随时间变化的运行规律。其中:
链路网络中可以包括多个调用链路,多个调用链路可以将网络拓扑结构中的多个节点串联在一起,以便为不同的业务提供服务,本实施例中,链路网络可以基于网络拓扑结构中包括的多个节点之间的调用trace日志确定得到。
节点的运行数据可以包括节点被调用的次数以及被调用的平均时长等,其中,节点被调用的次数可以包括节点被调用成功的次数和被调用失败的次数。本实施例中,节点的运行数据可以通过对节点进行远程数据采集得到。
节点随时间变化的运行规律可以理解为节点按照日、周、小时等周期性变化的运行情况,具体可以通过对节点的运行数据进行分析得到。
其次,可以基于调用信息,得到多个目标节点之间的调用方向、调用失败依赖权重以及强弱依赖权重。
具体地,可以基于调用信息中包括的链路网络,确定多个目标节点之间的调用关系,基于调用关系,可以得到多个目标节点之间的调用方向;基于多个目标节点之间的调用方向,以及调用信息中包括的多个目标节点被调用的次数,确定多个目标节点之间调用时的调用失败次数,进而得到多个目标节点之间的调用失败依赖权重;基于调用信息中包括的多个目标节点的运行数据和运行规律,通过分析可以得到多个目标节点的之间的强弱依赖权重。
最后,基于多个目标节点之间的调用方向、调用失败依赖权重以及强弱依赖权重,可以得到多个目标节点的调用链路。
在得到调用链路后,可以执行S108。
S108:基于所述调用链路,确定所述多个目标节点的故障特征。
在S108中,在得到多个目标节点的调用链路后,可以基于调用链路对多个目标节点进行空间关联分析,得到多个目标节点的故障特征,其中,多个目标节点的故障特征可以用于确定多个目标节点中的故障节点。
本实施例中,在确定多个目标节点的故障特征时,至少可以包括以下两种实现方式。
第一种实现方式:
可以基于调用链路中包括的调用方向和调用失败依赖权重,采用最小生成树算法对调用链路进行裁剪,得到最小生成树,最小生成树可以用于表征多个目标节点的故障特征。
本实施例采用的最小生成树算法可以是Kruskal算法,在采用Kruskal算法对调用链路进行裁剪时,具体实现方式如下:
第一,构建一个集合,此时,该集合是一个空集合,对应空的最小生成树。
第二,确定调用链路中每个边对应的调用失败依赖权重,并按照调用失败依赖权重从小到大的顺序将调用链路中的所有边进行排序。其中,一个边对应的调用失败依赖权重可以理解为该边两端的两个目标节点之间的调用失败依赖权重。
第三,确定未包含在上述集合中的所有边,针对其中调用失败依赖权重最小的边,若满足条件:边不在上述集合中,且边不能与集合中的边构成环,则将该调用失败依赖权重最小的边放入集合中。
第四,循环执行上述第三个步骤,直至集合中最小生成树的边对应的目标节点包括调用链路中所有的目标节点,即调用链路中所有的目标节点全部包含在集合中。
为了便于理解上述生成最小生成树的步骤,可以参见图2和图3。
图2为本申请的一个实施例多个目标节点的调用链路的示意图。图2所示的调用链路中可以包括6个目标节点,分别为A、B、C、D、E和F,6个目标节点之间的调用方向如图2所示。
此外,图2中每个边上标注的数值为每个边对应的两个目标节点之间的调用失败依赖权重。例如,A和B之间的调用失败依赖权重为5,A和C之间的调用失败依赖权重为7。
基于图2所示的调用链路,在生成最小生成树时,首先,可以将调用失败依赖权重为5的边(即A和B对应的边以及E和F对应的边)放入到集合中;其次,可以将调用失败依赖权重为6的边(即B和D对应的边)放入到集合中;再次,可以将调用失败依赖权重为7的边(即A和C对应的边以及C和F对应的边)放入到集合中,此时,由于图2所示调用链路中包括的6个目标节点已全部包括在集合中,因此,此时集合中的最小生成树即为最终需要确定的最小生成树,如图3所示。
本实施例中,由于最小生成树是由调用链路中调用失败依赖权重之和最小的边构成的,调用失败依赖权重之和最小意味着这些边对应的目标节点之间的调用失败次数越多,而节点调用失败次数多在一定程度上可以说明节点的告警信息比较重要,因此,本实施例得到的最小生成树可以用于凸显重要的告警链路,进一步地,可以用于表征多个目标节点的故障特征。
第二种实现方式:
可以基于调用链路确定多个目标节点的单点最短路径,基于多个目标节点的单点最短路径确定多个目标节点的故障特征,具体实现方式如下:
首先,基于调用链路中包括的调用方向和调用失败依赖权重,确定多个目标节点对应的多条单点最短路径。
本实施例可以针对每个目标节点,确定与每个目标节点分别对应的一条单点最短路径(SSSP,Single-Source Shortest Paths)。以其中一个目标节点为例,在确定目标节点的单点最短路径时,可以采用SSSP算法,以目标节点为出发点,按照调用方向的反方向查找与目标节点联通的业务以及与目标节点关联的链路,从而得到目标节点对应的单点最短路径。
SSSP算法可以是Dijkstra算法,也可以是其他用于求取单点最短路径的算法,这里不做具体限定。以下可以以Dijkstra算法求取目标节点的单点最短路径为例进行说明。
在基于Dijkstra算法求取目标节点对应的单点最短路径时:
第一:可以初始化全集U、点集S和点集Q,其中,U为调用链路中的所有目标节点的集合,S为调用链路中已经找到最短路径的点的集合,在初始状态下可以假设仅有起点(即待求取单点最短路径的目标节点)属于S,Q为调用链路中还未找到最短路径的目标点的集合,显然,U=S+Q。
第二,设Lk为当前情况下,起点经过S中若干点到点k的最短距离(k∈U),在初始状态下,L起点=0,其他均为+∞。这样,在确定目标节点的单点最短路径时:
从起点开始,沿某调用链路中的某条边(设该边对应的调用失败依赖权重为arcs)找到与起点相邻的目标节点n,令Ln=min{Ln,L起点+arcs},按此方式更新与起点相邻的所有目标节点。在集合Q中找到Lk最小的目标节点v,则Lv即起点到目标节点v的最短路径长度。
将目标节点v从Q中取出并放入S中,对目标节点v重复上述操作。
如此重复,直到S=U,即
时,结束,Lk即为从起点到各点的最短路径长度,对应的路径即为起点(即待求取单点最短路径的目标节点)的单点最短路径。
在基于上述方法得到一个目标节点的单点最短路径后,可以基于相同的方法确定得到其他目标节点的单点最短路径。
为了便于理解,可以仍以上述图2所示的调用链路为例进行说明。
在确定图2所示的目标节点F的单点最短路径时,首先,可以初始化集合U、S和Q,U中包括目标节点A、B、C、D、E和F,S中仅包括F,Q中包括A、B、C、D和E。
其次,以F为出发点,在Q中反向查找与F相邻的目标节点B、C和D,基于图2所示的每条边的调用失败依赖权重可知,C至F的路径最短,因此可以将C放入集合S中,并确定C至F的最短路径长度为7;针对D,D经过集合S中的点到F的路径仅有一条,即D→F,且路径长度为8,因此,可以确定D至F的最短路径长度为8,并将D放入S中;针对B,B经过集合S中的点到F的路径有三条,分别是B→F,B→C→F,B→D→F,其中,B→D→F的路径长度最短,因此,可以确定B至F的最短路径长度为14,并将B放入S中。
此时,集合Q中还剩余目标节点A和E,可以继续以F为出发点反向查找,可以确定目标节点A,A经过集合S中的点到F的路径仅有一条,即A→C→F,因此,可以确定A至F的最短路径长度为14。
此时,集合Q中还剩余目标节点E,但是,由于本实施例是基于F反向查找最短路径,而E与F之间的调用方向不符合反向查找的规则,因此,这里不再考虑E至F的最短路径。
至此,可以得到目标节点F的单点最短路径,如图4所示。
在得到F点的单点最短路径后,可以基于相同的方法确定A至E的单点最短路径,这里不再重复说明。
其次,在得到多个目标节点对应的多条单点最短路径后,可以基于多条单点最短路径中每条边的调用失败依赖权重和强弱依赖权重,确定多条目标节点对应的多个故障特征值。
以其中一个目标节点对应的一条单点最短路径为例,在确定该目标节点对应的故障特征值时,具体实现方式如下:
针对单点最短路径中的一条边,可以将该条边对应的调用失败依赖权重以及强弱依赖权重相乘,相乘后得到的值可以视为该条边对应的故障特征值。在得到一条边对应的故障特征值后,可以基于相同的方法,得到单点最短路径中其他边对应的故障特征值。其中,单点最短路径中包括的多条边对应的故障特征值即为目标节点对应的故障特征值。
为了便于理解,可以参见图4。
图4位目标节点F对应的单点最短路径,假设A和C之间的强弱依赖权重为30%,C和F之间的强弱依赖权重为50%,B和D之间的强弱依赖权重为75%,D和F之间的强弱依赖权重为100%,则,将这些强弱依赖权重分别与调用失败依赖权重7、7、6和8相乘,可以得到目标节点的多个故障特征值:2.1、3.5、4.5和8。
在基于上述记载的方法得到一个目标节点对应的故障特征值后,可以基于相同的方法得到其他目标节点对应的故障特征值。
最后,在得到多个目标节点对应的多个故障特征值后,可以基于这些故障特征值,确定多个目标节点对应的多个稀疏矩阵,其中,多个稀疏矩阵可以用于表征所述多个目标节点的故障特征。
在确定稀疏矩阵时,以其中一个目标节点为例,可以将该目标节点的故障特征值以及该目标节点对应的单点最短路径中其他的目标节点,作为图的边和点,结合即该目标节点输出的故障特征值以及输入该目标节点对应的单点最短路径的故障特征值,基于图计算的方法转化为非归一化的稀疏矩阵,在对非归一化的稀疏矩阵进行归一化处理后,得到的稀疏矩阵即为目标节点对应的稀疏矩阵。由于该稀疏矩阵是通过目标节点对应的故障特征值确定得到,故障目标节点的故障特征值是基于目标节点对应单点最短路径确定得到,因此,目标节点的稀疏矩阵可以用于表征目标节点的故障特征。
为了便于理解,可以以上述图4为例进行说明。
已知图4所示的单点最短路径对应的多个故障特征值为2.1、3.5、4.5和8,假设输入入口节点A的故障特征值为2,输入入口节点B的故障特征值为5,目标节点G输出的故障特征值为10,那么,可以得到以下非归一化的稀疏矩阵:
对非归一化的矩阵进行归一化处理后,可以得到归一化的稀疏矩阵:
在基于上述记载的方法确定一个目标节点对应的稀疏矩阵后,可以基于相同的方法确定调用链路中其他目标节点对应的稀疏矩阵,这里不再重复说明。
在实际应用中,可以采用上述记载的第一种实现方式确定多个目标节点的故障特征,也可以通过上述记载的第一种实现方式确定多个目标节点的故障特征,还可以同时采用两种实现方式确定多个目标节点的故障特征,这里不做具体限定。
在得到多个目标节点的故障特征后,可以执行S110。
S110:基于所述多个目标节点的故障特征,确定所述多个目标节点中的故障节点。
在S110中,可以基于S108中确定的多个目标节点的故障特征,定位多个目标节点中真正的故障节点。
本实施例中,若多个目标节点的故障特征通过S108中记载的第一种实现方式确定得到,则在定位多个目标节点中的故障节点时,可以包括如下步骤:
首先,可以获取多个目标节点对应的多个故障特征树。
多个故障特征树可以是多个最小生成树,一个故障特征树可以理解为一个目标节点为故障节点时,通过获取该目标节点的调用链路,并基于上述S108记载的方法对调用链路进行裁剪得到的最小生成树。
其次,将上述S108中确定的最小生成树与多个故障特征树进行对比,确定最小生成树与多个故障特征树之间的相似度。
最后,可以将最小生成树与多个故障特征树之间的相似度与第一预设阈值进行比较,确定相似度大于或等于第一预设阈值的故障特征树(为了便于区分,以下可以称为目标故障特征树)。其中,第一预设阈值可以是90%,也可以是95%,具体可以根据实际情况确定。
由于目标故障特征树与最小生成树的相似度比较高,因此,最小生成树可以视为目标故障特征树对应的目标节点为故障节点时得到的最小生成树,此时,可以将多个目标节点中,与目标故障特征树对应的目标节点确定为真正的故障节点。
本实施例中,若多个目标节点的故障特征通过S108中记载的第二种实现方式确定得到,则在定位多个目标节点中的故障节点时,可以包括如下步骤:
首先,获取多个目标节点对应的多个故障稀疏矩阵。
一个故障稀疏矩阵可以对应一个目标节点,具体可以理解为,通过模拟一个目标节点为故障节点,获取目标节点的调用链路,并基于上述S108中记载的方法得到目标节点对应的单点最短路径,基于该单点最短路径确定得到的稀疏矩阵。
其次,将多个目标节点对应的稀疏矩阵与多个故障稀疏矩阵进行对比,得到多个目标节点对应的多个相似度。
具体地,针对其中一个目标节点,可以将目标节点对应的稀疏矩阵与该目标节点对应的故障稀疏矩阵进行对比,得到一个目标节点对应的一个相似度。之后,可以基于相同的方法得到其他目标节点对应的相似度,从而可以得到多个目标节点对应的多个相似度。
最后,将多个目标节点的相似度与第二预设阈值进行比较,确定大于或等于第二预设阈值的相似度(为了便于区分,可以将大于或等于第二预设阈值的相似度称为目标相似度)。其中,第二预设阈值可以是90%,也可以是95%,具体可以根据实际情况确定。
本实施例中,若目标节点对应的相似度为目标相似度,即目标节点对应的稀疏矩阵与其对应的故障稀疏矩阵的相似度较高,则可以说明,目标节点的稀疏矩阵可以视为该目标节点为故障节点时得到的稀疏矩阵,因此,可以将目标相似度对应的目标节点确定为故障节点。
至此,可以基于上述记载的方法定位得到目标节点中的故障节点。
本实施例中,在定位得到故障节点后,还可以进一步确定故障链路和故障节点影响的业务范围。具体地,在定位故障节点后,可以将故障节点所在的最长调用链路作为故障链路,将故障链路中位于故障节点上游的节点所涉及的业务,确定为故障节点影响的业务范围。
为了便于理解整个技术方案,可以参见图5。图5为本申请的一个实施例故障定位方法的流程示意图,所述方法可以包括如下步骤。
S501:获取网络拓扑结构中多个节点的调用信息。
调用信息可以包括可以包括网络拓扑结构对应的链路网络,多个节点中每个节点的运行数据以及每个节点随时间变化的运行规律。具体可以参见图1所示实施例中记载的调用信息。
需要说明的是,S501为整个技术方案准备阶段执行的步骤,在后续每次定位故障节点时,不一定都需要执行。
S502:获取网络拓扑结构中多个节点的多个告警信息。
S503:对多个告警信息进行预处理,凸显多个目标告警信息。
预处理可以包括以下四种预处理操作之一:对设定周期内的告警信息进行压缩、对非重点关注的告警信息进行过滤、对设定周期内对次数小于预设次数的告警信息进行舍弃以及对设定周期内优先级低于预设优先级的告警信息进行舍弃。
优选地,可以对多个告警信息进行上述四种预处理操作,四种预处理操作的先后顺序不做具体限定。
S504:判断目标告警信息对应的目标节点的个数是否大于或等于预设个数。
若是,则可以确定目标告警信息为复杂的告警信息,难以直接定位故障节点,此时,可以执行S505;若否,则可以确定目标告警信息不是复杂的告警信息,可以直接定位故障节点,此时可以执行S516。
S505:确定多个目标节点的调用链路。
调用链路中可以包括多个目标节点的调用方向、多个目标节点的调用失败依赖权重以及多个目标节点的强弱依赖权重。
调用链路可以基于S501中的调用信息确定得到,具体可以参见图1所示实施例中记载的相应内容,这里不再重复说明。
S506:基于调用链路中包括的调用方向和调用失败依赖权重,对调用链路进行裁剪,得到最小生成树。
最小生成树可以用于表征多个目标节点的故障特征。
S507:获取多个目标节点对应的多个故障特征树。
一个故障特征树通过模拟一个目标节点为故障节点,并采最小生成树算法对所述一个目标节点的调用链路进行裁剪得到。
S508:确定最小生成树与多个故障特征树的相似度。
S509:将与最小生成树的相似度大于或等于第一预设阈值的故障特征树对应的目标节点确定为故障节点。
上述S506至S509的具体实现方式可以参见图1所示实施例中相应步骤的具体实现,这里不再重复描述。
本实施例中,在执行S505后,还可以通过确定目标节点对应的单点最短路径的方法定位故障节点。具体可以包括以下步骤:
S510:基于调用链路中包括的调用方向和调用失败依赖权重,确定多个目标节点对应的多条单点最短路径。
S511:基于多条单点最短路径中每条边的调用失败依赖权重和强弱依赖权重,确定多个目标节点对应的多个故障特征值。
S512:基于多个故障特征值,确定多个目标节点对应的多个稀疏矩阵。
多个稀疏矩阵可以用于表征多个目标节点的故障特征。
S513:获取多个目标节点对应的多个故障稀疏矩阵。
一个故障稀疏矩阵可以通过模拟一个目标节点为故障节点,并基于该一个目标节点对应的单点最短路径确定得到,一个目标节点对应的单点最短路径基于该目标节点的调用链路确定得到。
S514:将多个目标节点对应的稀疏矩阵与多个故障稀疏矩阵进行对比,得到多个目标节点对应的多个相似度。
S515:将大于或等于第二预设阈值的相似度对应的目标节点确定为故障节点。
上述S510至S515的具体实现方式可以参见图1所示实施例中相应步骤的具体实现,这里不再重复描述。
S516:将目标告警信息对应的目标节点确定为故障节点。
本申请实施例提供的技术方案,在接收到网络拓扑结构中多个节点的告警信息后,可以对告警信息进行预处理,凸显其中的目标告警信息;若目标告警信息对应的多个目标节点的数量大于或等于预设个数,则需要进一步确定其中的故障节点,此时可以获取包括多个目标节点的调用链路;基于该调用链路,可以分析得到多个目标节点的故障特征;基于多个目标节点的故障特征,可以确定多个目标节点中的故障节点。这样,在获取到多个告警信息后,通过凸显多个告警信息中的目标告警信息,基于目标告警信息对应的目标节点的调用链路确定多个目标节点的故障特征,通过多个目标节点的故障特征定位得到真正的故障节点,可以实现对故障节点地有效定位,从而在定位到真正的故障节点后,可以有针对性地进行故障解决,进而为用户提供正常服务。
上述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
图6是本申请的一个实施例电子设备的结构示意图。请参考图6,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成基于多租户服务的业务分组装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
获取网络拓扑结构中多个节点的多个告警信息;
对所述多个告警信息进行预处理,凸显多个目标告警信息;
若所述多个目标告警信息对应的多个目标节点的个数大于或等于预设个数,则确定所述多个目标节点的调用链路;
基于所述调用链路,确定所述多个目标节点的故障特征;
基于所述多个目标节点的故障特征,确定所述多个目标节点中的故障节点。
上述如本申请图6所示实施例揭示的故障定位装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field -Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
该电子设备还可执行图1和图5的方法,并实现故障定位装置在图1所示实施例中的功能,本申请实施例在此不再赘述。
当然,除了软件实现方式之外,本申请的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
本申请实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1和图5所示实施例的方法,并具体用于执行以下操作:
获取网络拓扑结构中多个节点的多个告警信息;
对所述多个告警信息进行预处理,凸显多个目标告警信息;
若所述多个目标告警信息对应的多个目标节点的个数大于或等于预设个数,则确定所述多个目标节点的调用链路;
基于所述调用链路,确定所述多个目标节点的故障特征;
基于所述多个目标节点的故障特征,确定所述多个目标节点中的故障节点。
图7是本申请的一个实施例故障定位装置70的结构示意图。请参考图7,在一种软件实施方式中,所述故障定位装置70可包括:获取单元71、预处理单元72、链路确定单元73、特征分析单元74以及故障定位单元75,其中:
获取单元71,获取网络拓扑结构中多个节点的多个告警信息;
预处理单元72,对所述多个告警信息进行预处理,凸显多个目标告警信息;
链路确定单元73,若所述多个目标告警信息对应的多个目标节点的个数大于或等于预设个数,则确定所述多个目标节点的调用链路;
特征分析单元74,基于所述调用链路,确定所述多个目标节点的故障特征;
故障定位单元75,基于所述多个目标节点的故障特征,确定所述多个目标节点中的故障节点。
可选地,所述预处理单元72,对所述多个告警信息进行预处理,包括:
针对其中一个节点的告警信息,执行以下至少一种:
对所述告警信息进行压缩,将设定周期内重复的告警信息合并为一个告警信息,所述设定周期为预设的最小区分时间周期;
对所述告警信息进行过滤,滤除不满足业务关注条件且告警时间位于设定时间段内的告警信息;
对所述设定周期内的告警信息进行次数统计;舍弃次数小于预设次数的告警信息;
确定所述设定周期内的告警信息的优先级;舍弃优先级低于预设优先级的告警信息。
可选地,所述调用链路中包括所述多个目标节点的调用方向、所述多个目标节点的调用失败依赖权重以及所述多个目标节点的强弱依赖权重。
可选地,所述特征分析单元74,基于所述调用链路,确定所述多个目标节点的故障特征,包括:
基于所述调用链路中包括的调用方向和调用失败依赖权重,采用最小生成树算法对所述调用链路进行裁剪,得到最小生成树,所述最小生成树用于表征所述多个目标节点的故障特征。
可选地,所述故障定位单元75,基于所述多个目标节点的故障特征,确定所述多个目标节点中的故障节点,包括:
获取所述多个目标节点对应的多个故障特征树,一个故障特征树通过模拟一个目标节点为故障节点,并采最小生成树算法对所述一个目标节点的调用链路进行裁剪得到;
确定所述最小生成树与所述多个故障特征树的相似度;
将目标故障特征树对应的目标节点确定为故障节点,所述目标故障特征树与所述最小生成树的相似度大于或等于第一预设阈值。
可选地,所述特征分析单元74,基于所述调用链路,确定所述多个目标节点的故障特征,包括:
基于所述调用链路中包括的调用方向和调用失败依赖权重,确定所述多个目标节点对应的多条单点最短路径;
基于所述多条单点最短路径中每条边的调用失败依赖权重和强弱依赖权重,确定所述多个目标节点对应的多个故障特征值;
基于所述多个故障特征值,确定所述多个目标节点对应的多个稀疏矩阵,所述多个稀疏矩阵用于表征所述多个目标节点的故障特征。
可选地,所述故障定位单元75,基于所述多个目标节点的故障特征,确定所述多个目标节点中的故障节点,包括:
获取所述多个目标节点对应的多个故障稀疏矩阵,一个故障稀疏矩阵通过模拟一个目标节点为故障节点,并基于所述一个目标节点对应的单点最短路径确定得到,所述一个目标节点对应的单点最短路径基于所述一个目标节点的调用链路确定得到;
将所述多个目标节点对应的稀疏矩阵与所述多个故障稀疏矩阵进行对比,得到所述多个目标节点对应的多个相似度;
将目标相似度对应的目标节点确定为故障节点,所述目标相似度大于或等于第二预设阈值。
可选地,所述故障定位单元75,在所述多个目标节点的个数小于所述预设个数时,确定所述多个目标节点为故障节点。
本实施例提供的故障定位装置70还可执行图1和图5的方法,并实现故障定位装置在图1和图5所示实施例的功能,本申请实施例在此不再赘述。
总之,以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。