李虹 韓永佳

摘 ?要: 本文提出了一種基于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 ?實驗數據 根據智能預警的算法原理,故障預警結果的準確性取決于故障分類的精確度,時間關聯區域的大小以及關聯度閾值三個關鍵要素。三要素的選取因故障實例的積累數量和被監控系統當前的穩定性不同而變化。例如,在智能預警模塊投入使用初期,由于故障實例沉積數量較少,此時故障分類應選取較高的精確度,分類宜小不宜大;同時,若被監控系統已處于較穩定的狀態,則時間關聯區域應適當放寬,關聯度閾值選取較大值,否則,若被監控系統正好處于變更活動期,則時間關聯區域和關聯閾值可參考采用正常平均值。而當智能預警模塊投入使用并經過較長一段時間,故障實例的積累數量足夠多時,故障分類的精確度可相對下調,時間關聯區域和關聯閾值可統一采用正常平均值。