彥 逸,周開東,林細(xì)君,麥曉輝,肖建毅,曾朝霖
(廣東電網(wǎng)有限責(zé)任公司信息中心,廣東 廣州 510620)
隨著電力營銷業(yè)務(wù)和用戶量的增長以及集中監(jiān)控系統(tǒng)持續(xù)推廣和實用化,電力營銷系統(tǒng)產(chǎn)生了大量的事件、告警以及故障數(shù)據(jù)。為了減少故障排查的工作量以及系統(tǒng)故障的恢復(fù)時間,節(jié)約大量的人力、物力,提高電力營銷系統(tǒng)的穩(wěn)定性,快速、準(zhǔn)確地對故障進(jìn)行定位已經(jīng)變得越來越重要。
故障定位(Fault Location),又稱為根因分析(Root Cause Analysis),旨在系統(tǒng)中出現(xiàn)異常的表征時,如事件、告警等,迅速準(zhǔn)確地定位故障原因。故障定位作為工業(yè)系統(tǒng)重要的工作,目前已有許多關(guān)于其算法的研究[1-5],根據(jù)模型大致可以分為基于分類模型的方法和基于概率圖模型的方法[6]。
基于分類模型的方法通常依賴大量的訓(xùn)練樣本,根據(jù)訓(xùn)練好的模型對發(fā)生的事件預(yù)測根因。Baraldi等人[7]使用K-近鄰算法(K-Nearest Neighbors, KNN)進(jìn)行多層次的分類實現(xiàn)故障定位。Wang等人[8]在利用相對主成分分析(Relative Principle Component Analysis, RPCA)對特征進(jìn)行降維的基礎(chǔ)上使用支持向量機(jī)(Support Vector Machine,SVM)進(jìn)行故障分類。Aslan等人[9]根據(jù)發(fā)生事件的不同對故障類型進(jìn)行判斷,進(jìn)而對不同故障類型使用不同的人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network, ANN)進(jìn)行定位來提高泛化能力。上述基于分類模型的方法對于故障和事件關(guān)系變化頻繁的場景具有魯棒性,然而這些方法的缺點也非常明顯:1)單純地對數(shù)據(jù)進(jìn)行擬合,沒有考慮事件和故障背后的因果機(jī)制;2)模型只返回預(yù)測的根因,可解釋性很差;3)分類模型的方法很難與存在的專家領(lǐng)域知識相結(jié)合。
相反地,基于概率圖模型的方法考慮了專家知識,構(gòu)建故障傳播模型(Fault Propagation Model,F(xiàn)PM)對故障和事件的關(guān)系進(jìn)行描述,在此基礎(chǔ)上采用決策算法得出對事件做出最佳解釋的故障子集。例如Gharahbagheri等人[10]使用貝葉斯網(wǎng)絡(luò)(Bayesian Network, BN)將不同的診斷知識集成并使用后驗概率進(jìn)行推理定位,Bennacer等人[11]基于BN和實例推理相結(jié)合。考慮到系統(tǒng)中數(shù)據(jù)的時效性,一些學(xué)者采用動態(tài)貝葉斯網(wǎng)絡(luò)(Dynamic Bayesian Network,DBN)在BN的基礎(chǔ)上對故障和事件的關(guān)系在時間維度上也進(jìn)行建模,Hu等人[12]在DBN的基礎(chǔ)上使用前向后向算法進(jìn)行故障根因推斷,Cai等人[13]基于DBN對不同來源的數(shù)據(jù)分別建模并通過多源信息融合進(jìn)行定位。Zhang等人[14-16]將定性模型與定量概率結(jié)合,利用動態(tài)不確定因果圖(Dynamic Uncertain Causality Graph, DUCG)進(jìn)行故障定位。然而基于概率圖模型的方法高度依賴專家先驗知識,需要事前構(gòu)建故障和事件之間的因果網(wǎng)絡(luò)。對于采用負(fù)載均衡策略的電力營銷系統(tǒng)來說,系統(tǒng)會根據(jù)當(dāng)前運行的服務(wù)器壓力等信息進(jìn)行請求的分發(fā)調(diào)度,前端服務(wù)器對后端服務(wù)器的調(diào)用關(guān)系是頻繁變動的,也就是故障和事件關(guān)系是無法確定的,也就無法對此構(gòu)建FPM。
因此,針對這種場景本文提出一種基于因果規(guī)則的故障定位算法,對故障數(shù)據(jù)進(jìn)行因果規(guī)則挖掘并進(jìn)一步計算故障根因的概率。本文算法考慮了故障和事件的因果機(jī)制,并且能夠柔性地加入專家知識;同時,不需要明確故障和事件之間因果圖的結(jié)構(gòu)并且無需學(xué)習(xí)FPM中復(fù)雜的參數(shù)。為了驗證算法的有效性,本文選擇真實生產(chǎn)環(huán)境下的數(shù)據(jù)集進(jìn)行驗證,實驗結(jié)果表明該算法能夠快速準(zhǔn)確定位故障根因。
電力營銷系統(tǒng)是一個需要大吞吐量、高并發(fā)的Web系統(tǒng),為此采用了分布式部署方案[17]以及負(fù)載均衡策略[18]。它根據(jù)業(yè)務(wù)類型拆分為營銷主應(yīng)用、客服應(yīng)用和個性化應(yīng)用,進(jìn)行垂直方式的分布式部署,每種應(yīng)用構(gòu)成一個相對獨立的子模塊,根據(jù)用戶發(fā)出請求的業(yè)務(wù)類型分發(fā)到相應(yīng)的模塊(部分來自客服和個性化的前端請求可能被分發(fā)到主應(yīng)用的后端,如圖1)。為了進(jìn)一步提高系統(tǒng)的性能,不同的模塊內(nèi)部的前端(Web)、后端(Java)均使用多臺服務(wù)器,并且每個服務(wù)器上提供多個端口為該模塊的業(yè)務(wù)提供服務(wù)。數(shù)據(jù)庫層(DB)是不同業(yè)務(wù)模塊共用的,仍然采用多服務(wù)器多端口的形式。為了對服務(wù)器資源進(jìn)行合理分配,每一個模塊的入口和前端、前端和后端之間采用了負(fù)載均衡策略,對請求進(jìn)行集群分發(fā)。例如,圖1(圖中每個服務(wù)器如Web1都包含多個端口為功能請求提供服務(wù))中的請求通過負(fù)載均衡,有可能被分發(fā)到該模塊下的任一服務(wù)器。
圖1 電力營銷系統(tǒng)的簡易拓?fù)浣Y(jié)構(gòu)示意圖
定義1分布式部署。是一種通過在不同的服務(wù)器放置不同的邏輯組件(垂直分布)或者服務(wù)器在物理上分成邏輯上等效的部分,每個部分在其自己的完整數(shù)據(jù)集的共享上操作(水平分布),達(dá)到降低維護(hù)和部署難度、提高并發(fā)量、提高訪問速度的部署方案[17]。
定義2負(fù)載均衡(Load Balancing)。是一種通過將用戶請求在集群之間進(jìn)行合理的調(diào)度分發(fā),達(dá)到優(yōu)化資源使用、最大化吞吐量、最小化響應(yīng)時間,并避免任何單個資源過載的計算機(jī)技術(shù)[18]。
即使采用了上述提高系統(tǒng)穩(wěn)定性與可用性的架構(gòu),電力營銷系統(tǒng)中的服務(wù)器主機(jī)或服務(wù)器的端口發(fā)生故障,依然可能會導(dǎo)致為用戶所提供的許多相關(guān)的功能出現(xiàn)資源不可用等事件。如表1,系統(tǒng)中不同層次的服務(wù)器主機(jī)或者主機(jī)上的端口均可能發(fā)生故障。需要在觀測到事件發(fā)生時,準(zhǔn)確有效地對故障原因定位到某服務(wù)器主機(jī)或服務(wù)器上某一端口。然而,在這個復(fù)雜的系統(tǒng)下,由于負(fù)載均衡策略的存在,無法得知請求被分發(fā)到具體主機(jī)的具體端口,大大加大了故障定位的難度。針對上述問題的特性,本文提出一種適用于自適應(yīng)學(xué)習(xí)因果規(guī)則并進(jìn)行定位的方法,即基于因果規(guī)則的故障定位算法。
表1 故障類別
層次主機(jī)端口WebIP_a…IP_bPort_m…Port_n…Port_m…Port_nJavaIP_c…IP_dPort_m…Port_n…Port_m…Port_nDBIP_e…IP_fPort_m…Port_n…Port_m…Port_n
由于當(dāng)前基于分類模型和基于概率圖模型的方法無法準(zhǔn)確有效地解決采用負(fù)載均衡、因果結(jié)構(gòu)頻繁變動的系統(tǒng)的故障定位問題,因此需要提出一種因果規(guī)則的故障定位算法。本章分2個主要階段給出具體的細(xì)節(jié),即如何學(xué)習(xí)因果規(guī)則和如何基于因果規(guī)則進(jìn)行定位,最后給出整個算法(Causal Rules Fault Location Algorithm, CRFLA)的偽代碼。
在因果關(guān)系發(fā)現(xiàn)中,常常對圖2所示的典型的因果網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行討論。由于V-結(jié)構(gòu)在統(tǒng)計學(xué)角度不等同于任何其他包含相同變量的結(jié)構(gòu),與其他馬爾科夫等價類結(jié)構(gòu)相比,V-結(jié)構(gòu)在因果關(guān)系識別問題上更具有魯棒性和可識別性[19]。事件和故障之間存在圖2(b)的V-結(jié)構(gòu)說明故障變量f1和f2共同影響事件變量y。因此,可以通過發(fā)現(xiàn)事件和故障之間存在的V-結(jié)構(gòu)對事件發(fā)生的因果規(guī)則進(jìn)行挖掘。基于V-結(jié)構(gòu)的獨立性性質(zhì),可以使用式(1)的因果關(guān)聯(lián)興趣度度量(Causal Association Interesting Measure, CAIM)[20]規(guī)則Ij1Ij2→Ee的可能性。
(a) 馬爾科夫等價類
CAIM(Ij1Ij2→Ee)=N(f1,y)+N(f2,y)-
N(f1,f2)+N(f1,f2|y)
(1)
其中,N(f1,y)為f1和y的歸一化互信息[21]。
對于先導(dǎo)變量只有一個的因果規(guī)則Ij1→Ee,CAIM計算如式(2):
CAIM(Ij1→Ee)=N(f1,y)
(2)
對于更加普遍的先導(dǎo)變量數(shù)大于等于3的因果規(guī)則I→Ee,其必定包含若干個子規(guī)則Ij1Ij2→Ee和Ij1→Ee,并且其興趣度取決于最劣子規(guī)則。因此進(jìn)一步得到對規(guī)則I→E的廣義的興趣度度量,如式(3)。
(3)
基于CAIM進(jìn)行因果規(guī)則挖掘,可以得到每個事件e發(fā)生時可能的故障-事件規(guī)則集合Re。同時,在進(jìn)行因果規(guī)則挖掘的搜索過程中,可以靈活地結(jié)合專家先驗知識進(jìn)行剪枝。為了進(jìn)一步對系統(tǒng)進(jìn)行根因定位,在下一節(jié)提出如何利用因果規(guī)則集合進(jìn)行推斷。
上述得到的所有因果規(guī)則的先導(dǎo)變量的集合即為導(dǎo)致事件發(fā)生的可能原因的候選集,定義為I。接下來,將給出如何利用因果規(guī)則進(jìn)行根因發(fā)現(xiàn)。筆者發(fā)現(xiàn)在系統(tǒng)中某個故障的發(fā)生常常導(dǎo)致許多相關(guān)事件發(fā)生,一些事件可能同時受到相同的原因節(jié)點影響,例如某數(shù)據(jù)庫主機(jī)發(fā)生故障可能導(dǎo)致系統(tǒng)中許多功能無法使用。因此,認(rèn)為若某個故障原因集I0在某段時間內(nèi),導(dǎo)致最多事件發(fā)生的即為根因C。根據(jù)故障原因集對發(fā)生事件集的影響程度,定義故障原因集I0是根因的可能性h(I0)的計算方式,如式(4):
(4)
其中,1為指示函數(shù),表示規(guī)則集合Re0中是否存在I0→Ee0或者樣本si是否包含I0和e0。ε0為某段時間內(nèi)發(fā)生的所有事件集合,e0為其中發(fā)生的某個事件。
由此,進(jìn)一步定義根故障原因集I0是根因的概率p(I0)以及事件的根因C,如式(5)和式(6):
(5)
(6)
因此,在第一階段得到所有事件對應(yīng)的故障原因集合R的基礎(chǔ)上,使用式(4)~式(6)對原因進(jìn)行評估并推斷得到根因。
首先給出基本的流程。第一階段:對于不同的事件e,其可能的故障原因I有多種,而每種故障原因I可能包含多個故障,共同影響事件e。于是,對每個事件的可能原因I進(jìn)行增量式搜索。根據(jù)式(1)、式(2)和式(3)判斷集合I中的所有故障是否同時是某個事件的原因節(jié)點,若是那么I有可能導(dǎo)致事件e,那么將規(guī)則加入可能的因果規(guī)則集Re,進(jìn)而得到所有的因果規(guī)則集合R。另外,在對每個事件的原因進(jìn)行搜索時,能夠結(jié)合專家先驗知識進(jìn)行剪枝,如下的prior_rule_filter方法將與事件e無關(guān)的故障預(yù)先進(jìn)行剔除。第二階段:上一階段得到R,其所有規(guī)則的先導(dǎo)I0的集合即為故障根因的候選集。因此,根據(jù)R和樣本集S判斷每個規(guī)則在該段時間內(nèi)是否發(fā)生,使用式(4)和式(5)計算得到每個原因作為根因的概率,概率最大的原因集合即為根因。
詳細(xì)偽代碼如下:
算法 CRFLA輸入:事件集ε,故障集F;可觀測的事件-故障樣本集S與待定位的事件發(fā)生集ε0={e1,e2,…,en};最小的CAIM閾值c;輸出:故障根因集C;初始化:R=?,C=?;//第一階段FOR each e in εRe=?Fe=prior_rule_filter(e,F)FOR each item F in FeIF CAIM(F→Ee)?cR'=Re∪{F→Ee}ELSECONTINUEEND IF
FOR each rule I→Ee in ReNew Rule r=I∪{F}→EeIF CAIM(r)?cR'=R'∪{r}END IFEND FORRe=R'END FORR=R∪ReEND FOR//第二階段FOR each e0 in ε0FOR each rule I0→Ee0 in Re0FOR each si in SIF I0→Ee0 NOT occurs in siCONTINUEELSE IF Count(I0→Ee0) EXISTCount(I0→Ee0)=Count(I0→Ee0)+1ELSE//初始化Count(I0→Ee0)=1END IFEND FOREND FOREND FORFOR each itemset I0 in Rh(I0)=Count(I0→Ee0)|ε0|END FORFOR each itemset I0 in Rp(I0)=h(I0)∑Il∈Ih(Il)END FORC=arg max I0∈R p(I0)返回:事件集ε0的故障根因集C
為了評估本文提出的CRFLA算法的有效性,挑選了廣東電網(wǎng)的電力營銷系統(tǒng)中真實生產(chǎn)環(huán)境產(chǎn)生的事件和故障數(shù)據(jù),采樣頻率為5 min/次,區(qū)間為2018年11月27日至2018年12月27日的間歇性故障[22]。實驗環(huán)境:處理器為Xeon E5-2620 v4,內(nèi)存64 GB,Linux 64位操作系統(tǒng)的Python語言。
本實驗中將CAIM閾值設(shè)為0.1,表2展示了CRFLA在本數(shù)據(jù)集上故障根因定位的結(jié)果。
表2 故障根因定位結(jié)果
故障時段開始時刻結(jié)束時刻事件發(fā)生比例/%故障根因及概率12018/11/3023:052018/11/3023:5067.22{'營銷Web應(yīng)用服務(wù)器2:7028'}:1.022018/12/040:002018/12/040:1513.17{'管理數(shù)據(jù)庫服務(wù)器1:1530'}:0.5,{'管理數(shù)據(jù)庫服務(wù)器2:1530'}:0.532018/12/0715:002018/12/0716:3556.51{'營銷Web應(yīng)用服務(wù)器4:7028'}:1.042018/12/0910:552018/12/0912:3034.02{'歷史數(shù)據(jù)庫服務(wù)器2:1530'}:1.052018/12/1012:002018/12/118:5074.69{'營銷Web應(yīng)用服務(wù)器4:7030'}:1.062018/12/2016:452018/12/2016:5574.69{'營銷Web應(yīng)用服務(wù)器3:7030'}:1.0
從表2結(jié)果可以看出,在不同時間段能準(zhǔn)確地定位到服務(wù)器端口,并且得到的根因概率基本為1。例如,在2018/11/30 23:05至2018/11/30 23:50這段時間內(nèi),故障持續(xù)了45 min,平均有486個功能菜單無法正常使用,該故障導(dǎo)致了67.22%的功能不可用。CRFLA算法第一階段通過因果規(guī)則挖掘得到:每個事件{′營銷Web應(yīng)用服務(wù)器2:7028′}→εe這一因果規(guī)則,這說明這段時間內(nèi)每個事件的發(fā)生可能原因只有一個;第二階段根據(jù)式(4)和式(5)計算得到{′營銷Web應(yīng)用服務(wù)器2:7028′}為根因的概率是1.0。
為了驗證算法的正確性,實驗結(jié)果交由運維工程師驗證。同時,為了進(jìn)行定量的對比實驗,根據(jù)真實的故障原因集Ct,定義故障定位的準(zhǔn)確率計算方式如式(7):
(7)
由于基于概率圖模型的方法在因果關(guān)系頻繁變動的系統(tǒng)下無法進(jìn)行構(gòu)圖,因此與基于分類模型的方法RPCA-SVM[8]和ANN[9]進(jìn)行對比實驗,準(zhǔn)確率結(jié)果如表3所示。
從表3中可以看到,CRFLA除了故障時段2,故障定位結(jié)果都得到了100%的準(zhǔn)確率,在每個時間段的定位中均得到了最高的準(zhǔn)確率。在本數(shù)據(jù)集中,CRFLA平均準(zhǔn)確率為91.67%,和RPCA-SVM的41.67%以及ANN的69.45%相比,具有較大的提升。實驗結(jié)果表明,CRFLA取得了最佳的效果,能夠迅速、準(zhǔn)確地定位故障根因。
表3 故障根因定位準(zhǔn)確率/%
故障時段RPCA-SVMANNCRFLA110010010025050503016.671004050100501001006100100100平均值41.6769.4591.67
表4 不同故障類別的根因定位平均準(zhǔn)確率/%
故障類別WebJavaDB平均準(zhǔn)確率100-75
為了評估不同類別的故障定位準(zhǔn)確率,進(jìn)一步計算表1中3個層次的故障定位的平均準(zhǔn)確率,結(jié)果如表4所示。根據(jù)電力營銷系統(tǒng)的拓?fù)浣Y(jié)構(gòu)可知,上述3種類別的故障發(fā)生具有傳遞關(guān)系。Web類型的故障更加直接地導(dǎo)致事件發(fā)生,而Java和DB則具有更加復(fù)雜的關(guān)系。因此,可以得到Web類型的故障更容易進(jìn)行定位,其準(zhǔn)確率最高,達(dá)到100%,DB次之(注意,表4中,由于Java類別的故障在該數(shù)據(jù)中恰好沒有發(fā)生,故用“-”表示)。
本文提出了一種基于因果規(guī)則的故障定位算法CRFLA,該方法能夠解決負(fù)載均衡帶來的故障因果關(guān)系頻繁變動的復(fù)雜系統(tǒng)的故障定位問題,有效避免了根因無法解釋和專家先驗知識匱乏無法提前構(gòu)建因果網(wǎng)絡(luò)的問題,在考慮故障與事件的因果關(guān)系的同時可以靈活地結(jié)合專家先驗知識。將算法應(yīng)用在廣東電網(wǎng)的電力營銷系統(tǒng)的真實數(shù)據(jù)上,實驗結(jié)果表明本文方法能夠?qū)崿F(xiàn)準(zhǔn)確、高效的故障定位。