王 銳
(中國移動通信集團廣東有限公司,廣東 廣州 510623)
大型IT 系統中會出現大量的故障狀況或異常。如果網絡中產生一個故障,則在網管監控系統中可能出現多個告警事件,進而導致數以萬計的告警產生。例如網絡中某一路由器出現了故障,網管監控系統中不但出現該路由器的告警,而且所有與該路由器相連的設備均會產生告警[1]。因此,減少無效告警并對收集到的告警進行根因分析[2]是非常重要的。
現有根因分析的基本思路:通過人工檢索相關錯誤日志和告警數據,從中定位實際產生的問題以及引發告警的真正原因。當需要檢索的告警和日志數據達到一定量級時,就會出現效率問題。本文基于正負關聯規則和設備拓撲關系,提出了一種大型IT 系統中的告警根因計算方法。
根本原因(root cause)是指影響IT 系統正常工作并觸發告警的最開始或基礎性原因。
識別根本原因是外延推理常見的問題。外延推理是從結果推論原因的過程(如告警)[3]。主要是通過建立“原因→結果”的傳播模型,然后通過科學的關聯分析,逐步找到問題的根本原因,而不是僅僅關注問題的表征。
關聯規則的原理:使用頻率最高的數據挖掘經常用于發現不同種類、不同項目之間的聯系[4],即從數據集中識別出頻繁出現的屬性值集(頻繁項集)[5],然后再利用這些頻繁項集描述關聯關系規則的過程。
1.2.1 關聯規則相關原理
關聯規則的經典算法為Apriori 算法[6-8],該算法基本分2 步:
(1)挖掘頻繁項集,根據最小支持度閾值(min_sup)找出數據集中所有的頻繁項集,直到再沒有滿足min_ sup 條件的項集為止。
(2)基于頻繁項集生成關聯規則,對于對任意事務集X,Y,若count 為事務的支持數,則事務X 的支持度:

若X 為頻繁集,Y?X,Y≠?,且sup(X)/sup(Y)≥min_conf(最小置信度),則關聯規則X=>(X-Y)成立。
若關聯規則X=>Y 成立,則其置信度conf(X=>Y)由式(2)可以求得:

若同時滿足sup(X=>Y)≥min_sup 和conf(X=>Y)≥min_sup,則為強關聯規則,反之為弱關聯規則,需要設置最小支持度閾值和最小置信度閾值才能得到符合的關聯規則。
1.2.2 正負關聯規則的相關原理
經典的Apriori 算法因其高度依賴候選項集產生頻繁項集理論,大多數關聯規則通過支持度-置信度框架得出[9],即最小支持度會過濾掉樣本出現次數不多的規則,但是該規則不適應現有IT 系統的故障關聯分析當中。
IT 系統整體情況是趨于穩定的,出現嚴重的異常故障事件是較少的樣例,所以相關關聯分析的樣本數據會比較少,可能會被傳統的算法忽略。為了彌補單一最小支持度不足的情況,本方法將采用正負關聯規則進行頻繁項的挖掘。相關原理:假設頻繁項集已經求出并且已經保存在集合Collection 中,挖掘正負關聯規則的框架如下:

在上一章節中討論了根因分析以及關聯規則的相關原理。本章將基于正負關聯規則數據挖掘進行IT 系統的告警根因分析,提出了一種告警根因事務數據庫的清洗生成方法,以及相對應的告警根因判斷方法。
步驟1:對基于IT 系統相關的拓撲有向關聯關系、錯誤日志、告警進行采集和標準化處理,標準化處理包含:統一數據字段、時間格式和節點唯一標識。
步驟2:對清洗后的錯誤日志、告警進行聚類處理,將錯誤日志和告警歸納為能夠涵蓋關鍵信息內容的泛化模板。
步驟3:統計各個拓撲節點上聚類后的錯誤日志、告警的總頻次K,在同一個時間窗口切片中,取拓撲有向關聯關系的且有向路徑深度不超過N 的各節點之間的錯誤日志、告警的頻次J,根據每個節點到根節點的有向路徑深度得到動態加權系數ω,考慮時間窗口內出現的頻次J、總頻次K、加權系數ω,得到錯誤日志和告警之間的事務數據庫D。
步驟4:相關度因子corr 表示項集之間的正關聯和負關聯,當corr>1 時,挖掘項集之間的正關聯規則A?B,當corr<1 時,挖掘項集之間的負關聯規則A??B,當corr=1時,不進行規則挖掘,并根據最小支持度和最小置信度的區間閾值進行相關度計算,判斷規則是否保留。
步驟5:根據步驟4 的正負關聯規則計算結果,如果存在有效的負關聯規則A??B,則在對應的正關聯規則中剔除掉正規則A??B,將剔除后的正規則集合作為最終告警根因輸出。告警根因分析流程圖,如圖1 所示。

圖1 告警根因分析流程圖
在計算聚類后的錯誤日志、告警的事件標記為I 項集,則每一個事件In項發生的總頻次為Kn,在拓撲有向關聯關系的節點中,如果按時間窗口進行切片,得到每個節點時間窗口內聚類后的錯誤日志、告警的事件In項在時間窗口內每個節點發生的頻次Jn。
以根節點開始,在路徑節點集合[r1,r2,r3,...,rn]當中,計算從根節點開始發生的報警事件In 項發生的事務數|Dn|為|Dn|=Jn/Kn*ω。
按照路徑上的節點集合依次計算,可得到一個ID 為n 的事務Tn={I1,I2,...,In}發生的事務數{|D1|,|D2|,...,|Dn|},遍歷集合O上所有的路徑,可得到事務集合T={T1,T2,…,Tn},最終得到事務數據庫D。
相關度因子corr 表示項集之間的正關聯和負關聯,當corr>1 時,挖掘項集之間的正關聯規則A?B,當corr<1 時,挖掘項集之間的負關聯規則A??B,當corr=1時,不進行規則挖掘,并根據最小支持度和最小置信度的區間閾值進行相關度計算和判斷規則是否保留。
根據原理,在負關聯規則當中有以下公式:

所以只需進行一次正關聯規則挖掘,即可推導得到負關聯規則的結果:支持度supp(A??B)、置信度conf(A??B),減少重復計算負關聯規則的結果。
為測試算法的運行結果,在操作系統為CentOS 7 的虛擬機上進行相關實驗,告警數據來自某網管日志系統。使用Python 對告警數據進行告警關聯規則的挖掘,將原始告警數據錄入到數據庫中。
通過對錯誤日志數據進行聚類操作,獲取了日志數據的模板日志,以及相關的發生頻數,結果見表1。

表1 日志聚類結果
在獲取了相關的模板數據后,通過相關算法的訓練得到獲取IP 之間的拓撲關系。故障告警的相關性分析只針對已經經過底層過濾的有效告警數據,即告警數據庫經過過濾后的有效告警數據和系統告警處理期間所產生的中間結果。上一步中,數據已濾掉了重復告警、普通告警等無用的告警數據。告警正負關聯分析將告警數據與拓撲關系相匹配,用于判斷在相關拓撲關系下的告警數據是否存在關聯,見表2。

表2 日志IP 所屬的拓撲關系
分析結果得出,在相關拓撲規則下的部分告警數據存在有關聯規則,部分結果如下所示:
{Started Session <*> of user <*> <*>}→{(root)CMD <*>}(conf:0.953,group:1)
{sd <*> <*> <*> CDB:<*>} →{(root)CMD <*>}(conf:0.932,group:2)
{Started Session <*> of user }→{(root)CMD <*>}(conf:0.891,group:1)
從結果可以看出,在群組1 中,存在兩組有關聯規則的告警,其中Started Session 與root CMD 告警之間存在著較高的關聯規則,通過其告警對應的主機進行查看,可以發現Started Session 告警的產生,導致root CMD 的告警發生。該關聯規則改進算法提高告警處理效率。
根因分析是IT 系統故障管理的重要手段,其作用在于消除冗余告警,將多個告警合并成一條具有更多信息量的告警,從而找到故障根源,快速定位和消除故障。本文研究的告警根因計算方法是基于正負關聯規則挖掘,挖掘告警中IT 系統之間的拓撲關系,利用這些拓撲關系與關聯規則進行告警分析,能較好地適應IT 系統架構的動態變化,為運維人員提供更高效、更便捷的根因分析。