APP下载

实现故障监控的智能预警

2020-08-13李虹韩永佳

软件 2020年6期
关键词:关联度预警分类

李虹 韩永佳

摘  要: 本文提出了一种基于K-平均算法的智能监控预警算法。对于被监控的系统,该算法首先对所发生的故障进行分类,然后对故障类两两进行分析,建立故障实例之间的关联关系。在此基础上,该算法进一步搜索关联故障实例在故障类中的最佳分布并计算故障类之间的绝对和相对关联度。当关联度达到设定的阈值,我们则认为分组故障类存在关联关系,彼此之间存在相互触发动因。本文正是通过寻找这种关联关系来帮助实现故障监控的连带预警功能,实现潜在故障规避。为了对所提出的算法进行客观的评估,我们以企业内部的关键业务系统作为样本数据进行测试。测试结果表明,本算法能够高效并较准确地挖掘故障之间的关联性,对故障的智能监控预警具有实际意义。

关键词: K-平均算法;分类;故障;关联度;监控;预警

中图分类号: TP277    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2020.06.049

本文著录格式:李虹,韩永佳. 实现故障监控的智能预警[J]. 软件,2020,41(06):237241

【Abstract】: This paper presents an algorithm of intelligent pre-warning of exceptions based on K-means algorithm. For the system monitored, the algorithm firstly classifies the exceptions already occurred. Then, it works out the associate relationship of the exception instances for every two exception classifications and finds out the best distribution of the associated exception instances in the exception classifications. Thus, the algorithm calculates the absolute and relative association degree of every two exception classifications and chooses those exception classifications whose association degree meets the threshod request as the associated ones. Thus, the algorithm is able to pre-warn the exception of one classification possible to happen when it detects some exceptions of the associated classification already happened, and help to tell us to do something to avoid it. To evaluate the algorithm justly, we test it using some of our key business systems as data samples. The result shows that our algorithm can discover the relationship of exceptions efficiently and fairly exactly. It is quite valuable in the intelligent pre-warning of exceptions.

【Key words】: Data-mining; Classification; Exception; Association degree; Monitor; Pre-warning

0  引言

就如何提升客戶满意度,近年来业界展开了大量的探讨。需求满足、支撑到位是客户的基本诉求。而这全依赖于企业信息化水平的不断发展。业务系统的合理建设为各种业务的创新和规模发展提供了良好的基础。而后期系统的高效运维则是业务得以长久持续发展的保障。因此,业务系统支撑效率对客户的满意度起着至关重要的作用。因此,就如何提高业务系统健壮性(参见[1-6]),确保系统稳定可靠;加强系统监控(参见[7-10]),及时消除潜在故障,降低故障发生率;提升抢修技能、强化抢修工具配置,进而提高故障响应速度,降低故障处理时长均成为我们重点探讨的方向。

随着工业互联网的不断发展,企业对业务系统连贯不中断的要求越来越高。而业务系统数量、规模的快速增长,系统功能结构的日益复杂与传统后置型故障管理模式(故障发生之后才进行抢修恢复的模式)效率低之间的矛盾不断扩大。错中复杂的故障使得排障困难重重,传统后置型的故障处理模式在持续提高故障处理效率上遇到了巨大的瓶颈,更无法达到降低故障发生率以实现系统高可靠、业务不中断的目的。因此近年来,我们开始转向研究前置型的故障运维管理(参见[11-15]),拟通过提升系统稳定性,加强对潜在故障的提前识别能力,有效实现故障规避,降低故障发生率,力求实现系统连贯可用、支撑及时到位。

就提升系统稳定性和可用性,业界围绕项目开发的过程管理、系统构建模式和软件质量管理等,已经总结了一系列系统开发运维和项目管理的方法论(参见[16-22])。迭代式的开发过程、模块化的系统架构、质检模块的引入等,均有助于降低程序的复杂度,提高系统故障的可识别率。通过实现功能模块的高内聚低耦合,采用修正式增量开发,可以进一步提高系统的可维护和可延续性,从而达到提高系统的稳定可靠性的目的。但是,当业务系统规模扩张到一定程度,功能结构和模块间的关系错综复杂,系统故障的可识别率就难以持续提高,故障发生时的响应速度和恢复时间就会受到较大的影响。而且往往还无法避免蝴蝶效应下的连带故障(由另一个故障所引起发生的故障)发生。因此,在企业业务和信息化不断发展的新形势下,我们要进一步破除壁垒,重点研究系统监控手段,强化故障监控能力,通过故障规避来实现更深层次的系统健壮性和可维护性的提升。

一般来说,常用的系统监控手段包括系统级和应用级的,主要针对系统软硬件环境和应用连接心跳、服务响应等方面來展开监控。这些监控的场景基本都是已知并预设好的,往往也没有深入到系统功能内部,缺乏对更小颗粒度故障间关联关系的思考和应用。突破系统级和应用级监控,我可以把颗粒度进一步缩小至故障本身。每一个故障都可以作为一个对象颗粒,他们之间可能存在千丝万缕的关系:单一的前置关系、组合的后置结果等。通过对海量的故障数据进行清洗、过滤、整理,我们可以挖掘出大量的高价值信息,找出故障之间的充分必要条件,实现连带故障的提前预警。从而可以对复杂的功能组合场景进行深层监控和告警,进一步降低故障发生率,提升系统稳定性。

对此,本文提出了基于K-平均的智能监控预警算法。算法的原理背景是:总是在某个时间段内   结队出现的故障之间,必然存在某种关联关系。精准挖掘这种潜在关系,可以实现对连带故障的触发告警。

结合二次数据挖掘技术(参见[23-26]),本文采用并优化了分类聚类的K-平均算法,提升了故障分类的准确性,为预警算法整体有效奠定了坚实的基础。在精准分类的基础上,智能监控预警算法进一步找出在设定时间窗口内成对出现频次达到阈值的故障类,标记为关联故障类。当一类故障发生时,即可触发另一类关联故障的告警,可以有效规避微小故障所带来的破坏性蝴蝶效应。从算法思想和实际检验来看,基于K-平均的智能预警算法可以有效突破单一系统内部故障告警的局限,进一步延伸至对跨系统、更多组合场景下系统间的故障关联预警,为业务稳定、智能运维提供强有力的支撑。

以下的内容,第1节将介绍预备知识和概念;第2节给出本文所提出的智能预警算法;第3节给出测试数据和结果;第4节为小结。

1  预备知识和概念

1.1  定义1

已知故障类EC(kw1, kw2,…, kwn),kw1, kw2,…, kwn是EC类的关键词;已捕捉的故障实例中e1, e2,…ei∈EC,且e1, e2,…, ei的发生时间分别为t1, t2,…, ti,则我们称EC((kw1, kw2,…, kwn), (e1, e2,…,ei), (t1, t2,…, ti))为故障类EC的实例分布,简记为O(EC)。

1.2  定义2

已知故障实例e1, e2的发生时间分别为t1, t2,假设选定时间关联区域为T,则,若t2∈{t1–T, t1+T},我们称e1, e2在T时间区内关联,记为e1∞T e2。

设?表示空实例,则对于任意的故障实例e,在任意的时间关联区域T内,均有e∞T ?。

其中,{t1–T, t1+T}表示以时间t1为中心,前后展开时间段T的时间区域。

1.3  定义3

已知故障实例e和故障实例集E,选定时间关联区域T,若对于"ei∈E, e∞T ei,则我们记e∞T E。

1.4  定义4

已知故障类EC1(kw1, kw2,…, kwm)和EC2(kwk, kwk+1,…, kwn)的实例分布分别为EC1((kw1, kw2,…, kwm), (e1, e2,…, ei), (t1, t2,…, ti))和EC2((kwk, kwk+1,…, kwn), (eh, eh+1,…, ej), (th, th+1,…, tj));选定时间关联区域T,对于"eu∈(e1, e2,…, ei),$Eu? (?,eh, eh+1,…, ej), eu∞T Eu,且,?$Eu′, (?, eh, eh+1,…, ej) ? Eu? Eu, eu∞T Eu′,则:

我们定义T(EC1, EC2) ={(e1:e′1:E1, e2:e′2:E2,…, ei:e′i:Ei)}为EC1和EC2在当前实例分布下的T关联分布,其中,e′u∈Eu (1≤u≤i),且"v, 1≤v≤i, v≠u,   e′u≠e′v。

1.5  定义5

已知T(EC1, EC2)为故障类EC1和EC2在实例分布O(EC1)和O(EC2)下的T关联分布,r = (e1: e′1:E1, e2:e′2:E2,…, ei:e′i:Ei)∈T(EC1, EC2),则,我们定义:

(1)|r| = ∑1;

(2)|Eu| = ∑1。

1.6  定义6

已知T(EC1, EC2)为故障类EC1和EC2在实例分布O(EC1)和O(EC2)下的T关联分布,则:

我们定义EC1和EC2在当前事件分布下的最优T关联分布为r,其中,r∈T(EC1, EC2),且?$r′,     r′∈T(EC1,EC2), |r′|>|r|。

1.7  定义7

已知r = (e1:e′1:E1, e2:e′2:E2,…, ei:e′i:Ei)是故障类EC1和EC2在实例分布O(EC1)和O(EC2)下的最优T关联分布,则,我们定义:

(1)EC1和EC2在当前实例分布下的绝对T关联度为|r|。

(2)EC1和EC2在当前实例分布下的相对T关联度为|r|/|E|,E = {e1, e2,…, ei}。

2  算法

2.1  简介

本文所提出的基于K-平均的智能监控预警算法,它以已监控入库的故障实例为基础,通过对故障进行关键词聚类和分类,再对每个故障类搜索其实例分布(参考1.1定义1)在指定的时间区域内与之关联的另一类故障集(参考1.2定义2和1.3定义3),得出故障类之间的关联分布(参考1.4定义4)和最优关联分布(参考1.5定义5和1.6定义6),从而计算出它们的绝对T关联度和相对T关联度。当关联度达到设定阈值时,系统自动标记这两类  故障为关联故障类,为后续触发连带故障预警提供基础。

算法的核心关键在于获取故障类间的最优关联分布。其实现的思路是,根据关联故障集大小从小到大对中心实例(即每个分组都以其中一类故障作为参考物,以该类故障的实例分布为中心)进行排序,优先考虑关联故障集集合较小者,然后对中心实例进行关联故障成员选择,即1.7定义7中r = (e1:e′1:E1, e2:e′2:E2,…, ei:e′i:Ei)的e′1, e′2,…, e′i,优先选择在本分组实例中参与关联次数较少的作为其关联故障,进而通过排序计算获得最优关联分布。

本算法结果有效的基本前提是高准确度的故障分类。因此,本文在基于K-平均的分类聚类算法的基础上,通过二次数据挖掘,对K-平均算法进行优化,提升了故障类的分类准确性。根据本文算法思想,故障的入库数、时间关联区域和关联度阈值的选取对智能监控预警算法结果的有效性也有着重大的影响。

2.2  具体算法

/*伪码内部的关键变量*/

EC[]:用以存储故障类;

Tobj[][]:用以存储每个故障类的故障实例的发生时间;

Robj[][]:用以存储在某关联时间区域下,两类故障的故障实例间的关联分布情况;

Rdegree[]:在计算两类故障的故障实例间的  关联分布时,用以记录被关联对象参与所有关联的次数;

Tfield:用以表示时间关联区域;

Bobj[]:用以记录某类故障与另一类故障的最优关联分布;

ABRelation[][]:用以存储两两故障类之间的绝对关联度;

CompRelation[][]:用以存储两两故障类之间的相对关联度;

ABLeast:绝对关联度下限;

CompLeast:相对关联度下限;

/*算法伪码*/

(1)根据K中心算法,对已沉淀的故障进行分类聚类,从而得到EC[],分类的同时把故障类的实例对象的发生时间记录在Eobj[][]中。

(2)根据每类故障的实例分布,计算故障类两两之间的绝对关联度和相对关联度,伪码如下:

ABRelation.Clear();

CompRelation.Clear();

for(EC1 = 0; EC1 < EC.Length; EC1++){

for(EC2 = EC1+1; EC2

Robj.Clear();

Rdegree.Clear();

for(i = 0; i

k = 0;

for(j = 0; j

if((Tobj[EC2][j]>=Tobj[EC1][i]-Tfield) &&(Tobj[EC2][j]<=Tobj[EC1][i]+Tfield)){

Robj[i][k++]=j; //記录EC1第i个故障实例的关联故障

Rdegree[j]++; //记录EC2第j个故障实例参与关联的次数

}

}

}

//寻找最优关联分布

Robj.Sort(); //根据Robj[i].Length从小到大排序,即对于EC1的每个故障实例,优先考虑关联故障数较少者

for(i = 0; i

//关联故障数相同的故障实例归为一组,进而根据关联故障的参与关联次数选择最优关联分布的 成员

for(j=i+1; j

if(Robj[i].Length

}

Choose(Robj,Bobj,i,j,Rdegree);//优先选择参与关联次数较少的关联故障作为最优关联分布成员

}

for(i = 0; i

if(Bobj[i] >= 0){  //Bobj[i]<0表示?

ABRelation[EC1][EC2]++;

CompRelation[EC1][EC2]=CompRelation [EC1][EC2]+(float)1/Robj[i].Length;

}

}

CompRealtion[EC1][EC2] = CompRelation[EC1] [EC2]/Tobj[EC1].Length;

}

}

(3)根据ABRelation[][],CompRelation[][],ABLeast和CompLeast确定故障类之间的绝对和相对关联关系,即当ABRelation[EC1][EC2] >= ABLeast,则我们认为EC1和EC2绝对关联;当Comp?Relation[EC1][EC2] >= CompLeast,我们认为EC1和EC2相对关联。

(4)故障预警时,根据实际情况选取绝对关联或相对关联的故障作为故障的预警输出。

3  实验数据

根据智能预警的算法原理,故障预警结果的准确性取决于故障分类的精确度,时间关联区域的大小以及关联度阈值三个关键要素。三要素的选取因故障实例的积累数量和被监控系统当前的稳定性不同而变化。例如,在智能预警模块投入使用初期,由于故障实例沉积数量较少,此时故障分类应选取较高的精确度,分类宜小不宜大;同时,若被监控系统已处于较稳定的状态,则时间关联区域应适当放宽,关联度阈值选取较大值,否则,若被监控系统正好处于变更活动期,则时间关联区域和关联阈值可参考采用正常平均值。而当智能预警模块投入使用并经过较长一段时间,故障实例的积累数量足够多时,故障分类的精确度可相对下调,时间关联区域和关联阈值可统一采用正常平均值。

猜你喜欢

关联度预警分类
分类算一算
法国发布高温预警 严阵以待备战“史上最热周”
分类讨论求坐标
数据分析中的分类讨论
园林有害生物预警与可持续控制
基于灰色关联度的水质评价分析
机载预警雷达对IFF 的干扰分析
基于灰关联度的锂电池组SOH评价方法研究
基于灰色关联度的公交线网模糊评价
广义区间灰数关联度模型