一种基于贝叶斯网络的系统故障定位方法和系统
技术领域
本公开涉及贝叶斯网络技术,尤其是基于贝叶斯网络的系统故障定位方案。
背景技术
伴随着互联网技术的迅猛发展,越来越多的业务系统通过互联网被集成在一起。系统集成就是指通过结构化的综合布线系统和计算机网络技术,将各个分离的设备(如个人电脑)、功能和信息等集成到相互关联的、统一和协调的系统之中,使资源达到充分共享,实现集中、高效、便利的管理。随着在底层起支撑作用的系统平台的集成数量越来越多(例如对于很多互联网巨头企业来说,其底层包含了数百甚至更多的平台或节点),这些平台在一段时间内(例如每周)的涉及代码、数据库和配置等的变更数目已达数千甚至更多。由于这些平台通过网络互连,这些变更中的某些变更可能不仅会影响本平台的运行,而且也会对其他平台的运行产生影响,这种影响严重时可能导致整个集成系统的崩溃。因此,当发生故障时,就需要对所有可能涉及的环节进行排查以寻找故障根源,这种排查并不局限于出故障的平台,还可能涉及其他平台。任何一个环节的疏忽、错误都可能导致系统风险,给企业带来巨大损失,其中某些损失甚至无法挽回。
因此,存在一种需求,希望能够提供一种能够快速有效地实现系统故障定位的技术。
发明内容
本公开提供了一种基于贝叶斯网络的推理方法,可以在故障发生时,根据以往系统的状态对可能发生故障的系统或者服务进行推理,从而推算出最可能发生故障的根源。
根据本公开的第一方面提供了一种基于贝叶斯网络的系统故障定位方法,包括:基于历史故障数据集合对贝叶斯网络模型进行训练以生成贝叶斯网络推理机,其中,所述贝叶斯网络推理机以条件概率表形式总结出系统接口易被引发故障的规律;执行系统变更的观测,并在确定发生故障的被观测节点后触发贝叶斯网络推理机预测;针对每个可能导致被观测节点处的故障的变更源,所述贝叶斯网络推理机根据所述条件概率表计算由其引发所述被观测节点故障的后验概率;以及选择后验概率最大的计算结果作为故障定位的结果输出。
根据本公开的第二方面提供了一种基于贝叶斯网络的系统故障定位系统,其特征在于,所述系统包括:贝叶斯网络学习机,被配置为基于历史故障数据集合对贝叶斯网络模型进行训练以构建贝叶斯网络推理机,其中,所述贝叶斯网络推理机以条件概率表形式总结出系统接口易被引发故障的规律;以及贝叶斯网络推理机,被配置为在所述系统故障定位系统调用变更观测以确定发生故障的被观测节点后,触发贝叶斯网络推理机预测,其中所述预测包括针对每个可能导致被观测节点处的故障的变更源,根据所述条件概率表计算由其引发所述被观测节点故障的后验概率;以及选择后验概率最大的计算结果作为故障定位的结果输出。
根据本公开的第三方面提供了一种存储有指令的计算机可读存储介质,当所述指令被执行时使得机器执行如第一方面所述的方法。
根据本公开的第四方面提供了一种计算机系统,包括用于执行如第一方面所述的方法的装置。
提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
附图说明
为了描述可获得本发明的上述和其它优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中:
图1是传统转账业务的程示意图。
图2是系统平台中的各种变更对下游系统中的接口的影响的示例性示意图。
图3是根据本公开的一个实施例的基于贝叶斯网络的系统故障定位方案的整体流程图。
图4是根据本公开的一个实施例的在学习阶段1中计算网络中每条边上的概率的示例。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
首先,以系统常用的一个转账业务的一部分所涉及到的流程为例对系统故障的场景进行说明。如图1所示,在该附图中以一个转账业务为例示出了传统的网络服务的过程示意图。在图中,当发生一笔转账业务时,系统首先调用转账接口110以激活转账流程。所述转账接口110随后内部地调用安全接口120和余额检查接口130。安全接口120主要用于对转账环境进行安全检测以检查是否存在任何安全风险,而余额检查接口则对要转出账户的余额进行查询以确保转出账户有足够的余额。而安全接口120接着又会调用环境检查接口140和监管检查接口150。环境检查接口140主要是对转账业务所存在的运行环境的安全性进行检查,而监管检查接口150的功能则是对转账流程中出现的各种调用线程的安全性进行监控。在这个简单的转账流程中可以看到,即使转账仅仅涉及两个系统之间的数据交换,但实际上却需要调用各种接口来实现。并且,任何接口的故障都有可能导致系统发生故障。例如系统管理员可能针对环境检查接口140的代码进行了变更以引入新的环境监控参数,但却忘记对其数据库进行相应的修改,这就可能导致环境检查接口140捕捉到新的环境参数,却无法通过对比数据库中的相关数据来判断风险。或者,系统管理员已经从数据库中删除了某个参数,但却忘记对环境检查接口140的代码部分进行相应的修改,这同样会导致所述环境检查接口140在运行时发生异常。可以理解,对任何接口的各种变更都有可能导致所述接口发生故障,进而使得整个系统故障。但是,要从这些接口中快速查找出到底是哪个接口发生故障并不容易。首先,各种业务可能涉及多个系统,例如,上述的转账业务就涉及到两个系统之间的数据交换,而像例如P2P数据传输、区块链、大数据统计等等业务更是可能涉及到成百上千个位于不同地方的系统平台。要从如此众多的系统交互中查找到哪个系统发生故障是很困难的。另一方面,就算在单个系统中,一个业务也可能同时涉及到多个接口的调用,而每个接口的故障都有可能导致整个系统发生故障。因此,要在一个系统中定位到具体发生故障的接口也是一种艰巨的挑战。还有,对于一个接口来说,发生变更的因素也有很多,例如DRM变更、数据库变更、代码变更等等。到底是这些变更中的哪种变更导致了接口发生故障,这也是令人无比头痛的一个考验。总之,随着互联网业务的联系越来越紧密,其故障定位的复杂性和多样性就越来越高,因此,技术人员急切希望能够提供一种快速有效地实现系统故障定位的技术。
为了解决上述问题,我们发现在图1的调用流程中,这些接口之间的调用并不会形成一个环,而是整个调用过程都是以树(Tree)的结构来表达,这就可以用一个贝叶斯网络(也可以叫DAG Network)进行表示。贝叶斯网络是一种概率网络,它是基于概率推理的图形化网络。贝叶斯网络是基于概率推理的数学模型,所谓概率推理就是通过一些变量的信息来获取其他的概率信息的过程,基于概率推理的贝叶斯网络(Bayesian network)是为了解决不定性和不完整性问题而提出的,它对于解决复杂设备不确定性和关联性引起的故障有很大的优势,在多个领域中获得广泛应用。正是由于网络服务的整个过程可以以树状结构来进行表示,就为我们在诊断网络服务故障时采用贝叶斯网络技术来进行系统故障定位提供了基础。
接着,结合图2所示的系统平台中的各种变更对下游系统中的接口的影响来进行说明。所述各种变更可以被作为本公开中的贝叶斯网络的数据来源。具体而言,在本公开中,各种类型的变更(如:DRM变更、数据库变更、代码变更、硬件变更以及其他各种环境变更等等,但应该理解,本公开的方案并不局限于上述这些变更,任何可能导致系统故障的变更都能被应用到本公开的方案来实现定位)是可能导致系统故障的根本原因。要排除系统故障,就必须首先找到到底是哪种变更导致了所述系统故障(也即系统故障定位)。而且,当一个变更发生时,它可能沿着网络中的任何一条路径影响它的下游的任何一个节点,并可能导致这些节点中的某个或多个节点发生故障。而一个节点发生故障的最显著的标志就是会产生大量报错信息。因此,在现有的系统中通常通过维护系统日志来记录这些异常信息。如在图2的示意图中所示,在第一行是在时间窗口t内发生的各种变更(例如DRM变更、数据库变更、代码变更以及更多变更因素),假设其中某一类DRM变更导致了下游系统1的接口2报错(状态为error)。那么,与系统的日志数据库相关联的埋点采集进程在发现接口2处的所述报错后,可以产生一个如在下表1所示的涉及报错的数据结构(如果一个变更影响了多个目标,那么对应的采集数据有相应的多行,在此不再累述):
表1
利用系统的日志数据库的埋点采集功能,通过日积月累的数据采集,可以在系统的日志数据库中生成丰富的报错数据的记录。并且除此之外,系统管理员对系统平台的手动维护/修理记录也可以被纳入到历史故障状态数据集合中。这些数据就是贝叶斯网络的数据来源。通过对所述数据的分析,本公开可以推算出系统故障的定位。
下面在图3中描述了根据本公开的一个实施例的基于贝叶斯网络的系统故障定位方案的整体流程图。如图3所示,整个系统故障定位过程可以分成三个阶段,即:
阶段1:贝叶斯网络推理机学习训练;
阶段2:贝叶斯网络推理机推理预测;
阶段3:预测结果转换。
下面结合附图具体对整个流程进行说明。
首先,在阶段1,在使用贝叶斯网络定位系统故障之前,必须对该贝叶斯网络进行学习训练,也即要用一些已知的数据对贝叶斯学习算法进行训练。因此,在本方案的第一阶段中开始对贝叶斯网络学习算法进行学习训练,所述训练主要是基于在系统运行历史中的各种历史故障数据以便从中总结出系统接口易被引发故障的规律,也即完成条件概率表的构造。如上所述,所述系统运行历史中的各种历史故障数据可以是来自各个系统的系统日志数据库中所记录的报错数据的汇总,也可以是系统管理员在检查和维修系统故障时自动/手动记录的维修记录。而所述训练使用贝叶斯网络学习机来实现。例如,当所述历史故障数据集合在本地可用(即存储在本地存储器上)的情况下,系统可以在离线情况下调用历史故障状态数据集合中的数据通过贝叶斯网络学习算法生成经训练的贝叶斯网络推理机(也即构造出条件概率表)。而如果所述历史数据并没有存储在本地系统中,本公开也可以通过网络远程访问与系统相关联的服务器来调用这些历史数据来进行在线训练以生成经训练的贝叶斯网络推理机。所述在线训练可以包括定期从各个系统收集历史故障数据,并使用所述历史故障数据不断更新所述贝叶斯网络推理机。具体的贝叶斯网络的训练过程可以采用各种已知的贝叶斯网络学习算法,例如梯度下降算法,在随后的示例中会进行举例说明。在通过训练构建好包含故障的条件概率表的贝叶斯网络推理机之后,就可以使用该推理机来推算可能的系统故障定位,如下所述。
在经过训练生成了贝叶斯网络推理机之后,在阶段2就可以将所述贝叶斯网络推理机部署到系统,以执行贝叶斯网络推理机预测。在预测阶段,首先,系统在线调用变更的观测(注意,如前所述,在一段时间内可能存在很多类型的变更,针对这些变更都有其相应的观测值)以确定需要触发贝叶斯网络推理预测的被观测节点,也即当在所述被观测节点处观测到了大量的报错消息时,就可以推断出该节点发生了故障并需要触发贝叶斯网络推理预测来排查故障源,此时,将该节点确定为被观测节点,例如如图2所示的系统1接口2。利用贝叶斯网络推理机针对所有可能导致被观测节点处的故障的变更源(例如DRM变更、数据库变更、代码变更等等经变更的数据来源)分别计算其引发被观测节点故障的后验概率(也即变更源可能是引发被观测节点出现故障的根源的后验概率),其中所述贝叶斯网络推理机主要根据贝叶斯网络推理机中包含的条件概率表分别为每个变更源生成其相应的后验概率。
当针对每个变更源都生成了后验概率后,在阶段3,可以将所有的后验概率按概率大小排序,并选择概率最大的结果作为定位的结果输出。至此,实现了系统故障定位。
在了解了本公开的基于贝叶斯网络的系统故障定位方案的基本流程之后,结合具体的一个示例来进行详细的说明。应该理解的是,所述示例仅仅是出于说明的目的被例举,而并非要把本公开的方案局限于该示例。
还是以图2中的系统1接口2发生故障的示例为例子进行描述。根据附图3的流程,首先,执行的是阶段1:贝叶斯网络推理机训练,所述训练包括两个步骤:
1.1:将历史故障状态数据集合中的数据(例如表1的内容)做数据预处理。所述预处理就是将所述数据转换为:(变更类型,目标状态,链路单元)的形式,即例如将表1中的数据记录转换为(DRM-2,系统1接口2推送配置信息,Error,0)、(DRM-2,系统1接口2推送配置信息,Error,入口1)、(DRM-2,系统1接口2推送配置信息,Error,接口1)、(DRM-2,系统1接口2推送配置信息,Error,接口2)。这种链路单元的拆分形成了一种由节点和有向边构成的有向无环图(Directed Acyclic Graph,DAG)。这种有向无环图由代表接口的各节点及连接这些节点的有向边构成。在其中,节点代表了接口,而节点间的有向边代表了节点间的互相关系(由父节点指向其子节点),所述有向边可以具有一个值,该值表示一个条件概率,以表达各节点之间的关系强度。这种由节点和有向边构成的有向无环图可以被称为贝叶斯网络。。
在一个实施例中,所述历史故障状态数据集合存储在系统平台本地,因此,可以离线地执行步骤1.1。在另一个实施例中,所述历史故障状态数据集合可能存储在远程服务器上,这时,可以通过网络访问所述服务器来获得历史故障状态数据集合以进行在线学习训练。
在还有的实施例中,可以定期访问远程服务器以获得最新的历史故障状态数据集合,并根据所述最新的历史故障状态数据集合不断进行在线学习训练。
1.2:在完成所述数据记录的拆分转换之后,可以针对每条链路(边)计算一个值,该值表示一个故障概率,随后,所有的值可以被汇总以构建出一个完整的条件概率表。具体而言,将步骤1.1的输出作为贝叶斯网络学习的输入,以学习到网络中每条边上的故障概率,如图4所示。
例如,假设与系统1接口2处的报错(即发生故障)有关的历史故障状态数据记录通过拆分后包含下述几条:
(DRM-2,系统1接口2推送配置信息,Error,接口2);
(DRM-3,系统1接口2推送配置信息,Error,接口2);
(DRM-2,系统1接口2推送配置信息,Error,接口2);
(DRM-1,系统1接口2推送配置信息,Error,接口2);
(DRM-2,系统1接口2推送配置信息,Error,接口2);
(DRM-3,系统1接口2推送配置信息,Error,接口2);
(DRM-3,系统1接口2推送配置信息,Error,接口2);
(DRM-2,系统1接口2推送配置信息,Error,接口2);
(DRM-2,系统1接口2推送配置信息,Error,接口2);
(DRM-1,系统1接口2推送配置信息,Error,接口2);
从上面的有关接口2的拆分后的历史故障状态数据记录中可以发现,在不同时间接口2所发生的十次故障中,由DRM-2的变更引起的记录有5条,由DRM-3的变更引起的记录有3条,而由DRM-1的变更引起的记录有1条。由此,通过上述统计,可以得到接口2出现的故障由DRM-2的变更引起的概率为0.5,由DRM-3的变更引起的概率为0.3,而由DRM-1的变更引起的概率为0.2。由此,在训练过程中,在条件概率表中为接口2可以构建如下表2:
故障节点 |
变更源 |
引起故障的概率 |
接口2 |
DRM-2 |
0.5 |
接口2 |
DRM-3 |
0.3 |
接口2 |
DRM-1 |
0.2 |
表2
为了方便说明,在上述示例中仅仅以DRM变更一种类型进行了说明,但应该理解,其它类型的变更源,例如数据库变更、代码变更等等也可能引发接口2的故障,针对这些变更源也可以构建如上所述的条件概率表,在此不再重复描述。同样,对于其它节点,例如接口1、入口1等等,也可以在条件概率表中分别针对所有对其产生影响的变更源构建相应的记录条目以形成完整的条件概率表。这样,通过对历史故障状态数据集合的记录进行拆分并随后对贝叶斯网络进行学习训练,就生成了包含条件概率表的贝叶斯网络推理机。
当然,为了便于理解,所举的示例仅仅是一种简单的训练方案,实际上具体的贝叶斯网络的训练过程也可以采用各种已知的贝叶斯网络学习算法,例如梯度下降算法,在此不再详细描述。
阶段2:贝叶斯网络推理机预测,此阶段也包括两个步骤:
2.1、系统1接口2出现报错信息“Error”时,系统平台开始调用变更观测进程。在该观测进程中,统计在一段时间内在该接口处发生的信息通信,以计算报错信息占请求量的比例x%,当x大于一个阈值,例如1(即一百条信息中的报错信息超过1条,所述阈值可以根据实际需要进行设置,当x超过该阈值时表示在系统1接口2出现大量报错的情况,也即系统1接口2发生了需要进行排查的故障),则将系统1接口2确定为被观测的节点,并触发贝叶斯网络推理预测。之所以规定为“x%”设定阈值,是因为这样可以避免由于其他偶发因素导致的报错信息带来的贝叶斯网络推理预测的误启动。例如,由于突发因素(例如电磁干扰、突发大数据流等)导致网络的暂时阻塞、延迟等,这些因素也可能导致接口2产生一些报错信息,但随着突发状况消失,网络一般会自动恢复到正常状态,因此,一般在很短时间后所述报错信息就会自动消失,并不需要进行故障排除。因此,限定一个阈值,可以将发生少量报错信息的上述暂时异常情况排除在故障情况之外,可以避免贝叶斯网络推理预测被频繁地误启动。当然,也可以采取更加精细准确的触发方式来实现上述目的,例如根据报错出现频率、业务完成的结果等,这些都属于本公开的保护范畴,因此,在此就不再详述。
2.2、在步骤2.1中由于系统1接口2的报错信息占请求量的比例x%超过了阈值而触发贝叶斯网络推理预测之后,在步骤2.2,将“系统1接口2”节点置为“被观测”状态,并利用贝叶斯网络推理机计算所有的由各种变更源引发该被观测节点的后验概率,得到一个后验概率列表。
由于在阶段1的训练过程中,已经基于历史故障状态数据集合对从变更源到被观测节点的每条边的概率进行了计算并构建了条件概率表,因此,利用经训练的贝叶斯网络推理机根据贝叶斯网络推理算法可以分别基于每个变更源的观测值生成其相应的后验概率。以包含1.2节中举例的条件概率表(表2)的贝叶斯网络推理机为例,根据该条件概率表,当“系统1接口2”节点发生故障时,由DRM-2引起该节点的大量报错的故障概率是0.5,由DRM-3引起该节点大量报错的故障概率是0.3,而由DRM-1引起a节点大量报错的故障概率是0.2。根据该条件概率表,贝叶斯网络推理机可以生成如下所示的后验概率:
P(DRM1|a)=0.2,
P(DRM-2|a)=0.5,
P(DRM-3|a)=0.3,
其中为了便于表述,将“系统1接口2”记为a。P(DRM-1|a)表示由DRM-1引起a节点(系统1接口2)的大量报错的故障概率,其值是0.2;P(DRM-2|a)表示由DRM-2引起a节点大量报错的故障概率,其值是0.5;而P(DRM-3|a)表示由DRM-3引起a节点大量报错的故障概率,其值是0.3。通过上述后验概率计算,就得到了可能引发系统1接口2故障的变更源的后验概率。
阶段3、预测结果转换
在计算并构建完包含所有可能引发被观测节点故障的变更源的后验概率之后,将在第二阶段预测的所有后验概率以列表的形式按照概率大小排序,取最大概率的结果输出以作为故障定位排查的结果。比如,以上面的示例为例,经过按照概率大小排序后的后验概率列表为:
P(DRM-2|a)=0.5,
P(DRM-3|a)=0.3,
P(DRM-1|a)=0.2,
其中由DRM-2引起a节点(系统1接口2)的大量报错的故障概率是0.5,由DRM-3引起a节点大量报错的故障概率是0.3,而由DRM-1引起a节点大量报错的故障概率是0.2。所以,可以将DRM-2输出作为预测的故障定位的结果。应该理解的是,所述排序也可以按从小到大进行,或可以直接从所有后验概率中选择出最大概率的结果作为输出,而无需进行排序。这都属于本公开的保护范畴内。
在另一个实施例中,当具有最大概率的变更源被作为可能的故障根源输出之后,如果操作者发现该具有最大概率的变更源并非实际的故障根源,则可以从所述后验概率列表中选择第二大概率的变更源重新输出以再次进行排查。如果发现该第二大概率的也不是故障根源,则可以继续选择第三大概率的变更源输出继续进行排查,以此类推,直至找到真正引发故障的变更源为止。
通过利用贝叶斯网络学习历史中系统接口易被引发故障的规律,在发生故障时,推理可能引起故障的变更源,使得在集成系统的一个子系统或者接口出现故障之后,应急人员可以清楚直观地看到其对其他相关系统带来的影响,进而顺藤摸瓜地推算出可能的故障根源以及时准确地排查出故障原因,避免了耗费大量劳力来人工筛查日志中的报错信息的低效方式,进而大大提高了应急响应的效率。
在其他实施例中,在阶段1构建贝叶斯网络的时候,还可以采用更高效的学习方法,例如可以根据变更源的重要性、或者变更源与节点之间的内在紧密关系等等因素,在构建条件概率表时(或者说在为节点相连的链路(边)计算概率值时)引入权重的概念。具体而言,对于某些重要的变更源可以在计算其概率时加大其权重以获得更高的概率值,或者适当减低其它变更源的概率值,从而引导贝叶斯网络推理机优先将该重要的变更源输出以对其进行优先排查。所述重要的变更源可以包括对程序核心代码的变更、对操作系统的更新、数据库的存储结构的变更等等。这些改进也都在本公开的保护范畴中。
虽然以上描述了不同的实施例,但应当理解的是它们只是作为示例而非限制。(诸)相关领域的技术人员将领会,在不偏离如所附权利要求书所定义的本发明的精神和范围的情况下,可以在形式和细节方面进行各种修改。因此,此处所公开的本发明的宽度和范围不应被上述所公开的示例性实施例所限制,而应当仅根据所附权利要求书及其等同替换来定义。