王 銳
(中國(guó)移動(dòng)通信集團(tuán)廣東有限公司,廣東 廣州 510623)
大型IT 系統(tǒng)中會(huì)出現(xiàn)大量的故障狀況或異常。如果網(wǎng)絡(luò)中產(chǎn)生一個(gè)故障,則在網(wǎng)管監(jiān)控系統(tǒng)中可能出現(xiàn)多個(gè)告警事件,進(jìn)而導(dǎo)致數(shù)以萬(wàn)計(jì)的告警產(chǎn)生。例如網(wǎng)絡(luò)中某一路由器出現(xiàn)了故障,網(wǎng)管監(jiān)控系統(tǒng)中不但出現(xiàn)該路由器的告警,而且所有與該路由器相連的設(shè)備均會(huì)產(chǎn)生告警[1]。因此,減少無(wú)效告警并對(duì)收集到的告警進(jìn)行根因分析[2]是非常重要的。
現(xiàn)有根因分析的基本思路:通過(guò)人工檢索相關(guān)錯(cuò)誤日志和告警數(shù)據(jù),從中定位實(shí)際產(chǎn)生的問(wèn)題以及引發(fā)告警的真正原因。當(dāng)需要檢索的告警和日志數(shù)據(jù)達(dá)到一定量級(jí)時(shí),就會(huì)出現(xiàn)效率問(wèn)題。本文基于正負(fù)關(guān)聯(lián)規(guī)則和設(shè)備拓?fù)潢P(guān)系,提出了一種大型IT 系統(tǒng)中的告警根因計(jì)算方法。
根本原因(root cause)是指影響IT 系統(tǒng)正常工作并觸發(fā)告警的最開(kāi)始或基礎(chǔ)性原因。
識(shí)別根本原因是外延推理常見(jiàn)的問(wèn)題。外延推理是從結(jié)果推論原因的過(guò)程(如告警)[3]。主要是通過(guò)建立“原因→結(jié)果”的傳播模型,然后通過(guò)科學(xué)的關(guān)聯(lián)分析,逐步找到問(wèn)題的根本原因,而不是僅僅關(guān)注問(wèn)題的表征。
關(guān)聯(lián)規(guī)則的原理:使用頻率最高的數(shù)據(jù)挖掘經(jīng)常用于發(fā)現(xiàn)不同種類(lèi)、不同項(xiàng)目之間的聯(lián)系[4],即從數(shù)據(jù)集中識(shí)別出頻繁出現(xiàn)的屬性值集(頻繁項(xiàng)集)[5],然后再利用這些頻繁項(xiàng)集描述關(guān)聯(lián)關(guān)系規(guī)則的過(guò)程。
1.2.1 關(guān)聯(lián)規(guī)則相關(guān)原理
關(guān)聯(lián)規(guī)則的經(jīng)典算法為Apriori 算法[6-8],該算法基本分2 步:
(1)挖掘頻繁項(xiàng)集,根據(jù)最小支持度閾值(min_sup)找出數(shù)據(jù)集中所有的頻繁項(xiàng)集,直到再?zèng)]有滿(mǎn)足min_ sup 條件的項(xiàng)集為止。
(2)基于頻繁項(xiàng)集生成關(guān)聯(lián)規(guī)則,對(duì)于對(duì)任意事務(wù)集X,Y,若count 為事務(wù)的支持?jǐn)?shù),則事務(wù)X 的支持度:
若X 為頻繁集,Y?X,Y≠?,且sup(X)/sup(Y)≥min_conf(最小置信度),則關(guān)聯(lián)規(guī)則X=>(X-Y)成立。
若關(guān)聯(lián)規(guī)則X=>Y 成立,則其置信度conf(X=>Y)由式(2)可以求得:
若同時(shí)滿(mǎn)足sup(X=>Y)≥min_sup 和conf(X=>Y)≥min_sup,則為強(qiáng)關(guān)聯(lián)規(guī)則,反之為弱關(guān)聯(lián)規(guī)則,需要設(shè)置最小支持度閾值和最小置信度閾值才能得到符合的關(guān)聯(lián)規(guī)則。
1.2.2 正負(fù)關(guān)聯(lián)規(guī)則的相關(guān)原理
經(jīng)典的Apriori 算法因其高度依賴(lài)候選項(xiàng)集產(chǎn)生頻繁項(xiàng)集理論,大多數(shù)關(guān)聯(lián)規(guī)則通過(guò)支持度-置信度框架得出[9],即最小支持度會(huì)過(guò)濾掉樣本出現(xiàn)次數(shù)不多的規(guī)則,但是該規(guī)則不適應(yīng)現(xiàn)有IT 系統(tǒng)的故障關(guān)聯(lián)分析當(dāng)中。
IT 系統(tǒng)整體情況是趨于穩(wěn)定的,出現(xiàn)嚴(yán)重的異常故障事件是較少的樣例,所以相關(guān)關(guān)聯(lián)分析的樣本數(shù)據(jù)會(huì)比較少,可能會(huì)被傳統(tǒng)的算法忽略。為了彌補(bǔ)單一最小支持度不足的情況,本方法將采用正負(fù)關(guān)聯(lián)規(guī)則進(jìn)行頻繁項(xiàng)的挖掘。相關(guān)原理:假設(shè)頻繁項(xiàng)集已經(jīng)求出并且已經(jīng)保存在集合Collection 中,挖掘正負(fù)關(guān)聯(lián)規(guī)則的框架如下:
在上一章節(jié)中討論了根因分析以及關(guān)聯(lián)規(guī)則的相關(guān)原理。本章將基于正負(fù)關(guān)聯(lián)規(guī)則數(shù)據(jù)挖掘進(jìn)行IT 系統(tǒng)的告警根因分析,提出了一種告警根因事務(wù)數(shù)據(jù)庫(kù)的清洗生成方法,以及相對(duì)應(yīng)的告警根因判斷方法。
步驟1:對(duì)基于IT 系統(tǒng)相關(guān)的拓?fù)溆邢蜿P(guān)聯(lián)關(guān)系、錯(cuò)誤日志、告警進(jìn)行采集和標(biāo)準(zhǔn)化處理,標(biāo)準(zhǔn)化處理包含:統(tǒng)一數(shù)據(jù)字段、時(shí)間格式和節(jié)點(diǎn)唯一標(biāo)識(shí)。
步驟2:對(duì)清洗后的錯(cuò)誤日志、告警進(jìn)行聚類(lèi)處理,將錯(cuò)誤日志和告警歸納為能夠涵蓋關(guān)鍵信息內(nèi)容的泛化模板。
步驟3:統(tǒng)計(jì)各個(gè)拓?fù)涔?jié)點(diǎn)上聚類(lèi)后的錯(cuò)誤日志、告警的總頻次K,在同一個(gè)時(shí)間窗口切片中,取拓?fù)溆邢蜿P(guān)聯(lián)關(guān)系的且有向路徑深度不超過(guò)N 的各節(jié)點(diǎn)之間的錯(cuò)誤日志、告警的頻次J,根據(jù)每個(gè)節(jié)點(diǎn)到根節(jié)點(diǎn)的有向路徑深度得到動(dòng)態(tài)加權(quán)系數(shù)ω,考慮時(shí)間窗口內(nèi)出現(xiàn)的頻次J、總頻次K、加權(quán)系數(shù)ω,得到錯(cuò)誤日志和告警之間的事務(wù)數(shù)據(jù)庫(kù)D。
步驟4:相關(guān)度因子corr 表示項(xiàng)集之間的正關(guān)聯(lián)和負(fù)關(guān)聯(lián),當(dāng)corr>1 時(shí),挖掘項(xiàng)集之間的正關(guān)聯(lián)規(guī)則A?B,當(dāng)corr<1 時(shí),挖掘項(xiàng)集之間的負(fù)關(guān)聯(lián)規(guī)則A??B,當(dāng)corr=1時(shí),不進(jìn)行規(guī)則挖掘,并根據(jù)最小支持度和最小置信度的區(qū)間閾值進(jìn)行相關(guān)度計(jì)算,判斷規(guī)則是否保留。
步驟5:根據(jù)步驟4 的正負(fù)關(guān)聯(lián)規(guī)則計(jì)算結(jié)果,如果存在有效的負(fù)關(guān)聯(lián)規(guī)則A??B,則在對(duì)應(yīng)的正關(guān)聯(lián)規(guī)則中剔除掉正規(guī)則A??B,將剔除后的正規(guī)則集合作為最終告警根因輸出。告警根因分析流程圖,如圖1 所示。
圖1 告警根因分析流程圖
在計(jì)算聚類(lèi)后的錯(cuò)誤日志、告警的事件標(biāo)記為I 項(xiàng)集,則每一個(gè)事件In項(xiàng)發(fā)生的總頻次為Kn,在拓?fù)溆邢蜿P(guān)聯(lián)關(guān)系的節(jié)點(diǎn)中,如果按時(shí)間窗口進(jìn)行切片,得到每個(gè)節(jié)點(diǎn)時(shí)間窗口內(nèi)聚類(lèi)后的錯(cuò)誤日志、告警的事件In項(xiàng)在時(shí)間窗口內(nèi)每個(gè)節(jié)點(diǎn)發(fā)生的頻次Jn。
以根節(jié)點(diǎn)開(kāi)始,在路徑節(jié)點(diǎn)集合[r1,r2,r3,...,rn]當(dāng)中,計(jì)算從根節(jié)點(diǎn)開(kāi)始發(fā)生的報(bào)警事件In 項(xiàng)發(fā)生的事務(wù)數(shù)|Dn|為|Dn|=Jn/Kn*ω。
按照路徑上的節(jié)點(diǎn)集合依次計(jì)算,可得到一個(gè)ID 為n 的事務(wù)Tn={I1,I2,...,In}發(fā)生的事務(wù)數(shù){|D1|,|D2|,...,|Dn|},遍歷集合O上所有的路徑,可得到事務(wù)集合T={T1,T2,…,Tn},最終得到事務(wù)數(shù)據(jù)庫(kù)D。
相關(guān)度因子corr 表示項(xiàng)集之間的正關(guān)聯(lián)和負(fù)關(guān)聯(lián),當(dāng)corr>1 時(shí),挖掘項(xiàng)集之間的正關(guān)聯(lián)規(guī)則A?B,當(dāng)corr<1 時(shí),挖掘項(xiàng)集之間的負(fù)關(guān)聯(lián)規(guī)則A??B,當(dāng)corr=1時(shí),不進(jìn)行規(guī)則挖掘,并根據(jù)最小支持度和最小置信度的區(qū)間閾值進(jìn)行相關(guān)度計(jì)算和判斷規(guī)則是否保留。
根據(jù)原理,在負(fù)關(guān)聯(lián)規(guī)則當(dāng)中有以下公式:
所以只需進(jìn)行一次正關(guān)聯(lián)規(guī)則挖掘,即可推導(dǎo)得到負(fù)關(guān)聯(lián)規(guī)則的結(jié)果:支持度supp(A??B)、置信度conf(A??B),減少重復(fù)計(jì)算負(fù)關(guān)聯(lián)規(guī)則的結(jié)果。
為測(cè)試算法的運(yùn)行結(jié)果,在操作系統(tǒng)為CentOS 7 的虛擬機(jī)上進(jìn)行相關(guān)實(shí)驗(yàn),告警數(shù)據(jù)來(lái)自某網(wǎng)管日志系統(tǒng)。使用Python 對(duì)告警數(shù)據(jù)進(jìn)行告警關(guān)聯(lián)規(guī)則的挖掘,將原始告警數(shù)據(jù)錄入到數(shù)據(jù)庫(kù)中。
通過(guò)對(duì)錯(cuò)誤日志數(shù)據(jù)進(jìn)行聚類(lèi)操作,獲取了日志數(shù)據(jù)的模板日志,以及相關(guān)的發(fā)生頻數(shù),結(jié)果見(jiàn)表1。
表1 日志聚類(lèi)結(jié)果
在獲取了相關(guān)的模板數(shù)據(jù)后,通過(guò)相關(guān)算法的訓(xùn)練得到獲取IP 之間的拓?fù)潢P(guān)系。故障告警的相關(guān)性分析只針對(duì)已經(jīng)經(jīng)過(guò)底層過(guò)濾的有效告警數(shù)據(jù),即告警數(shù)據(jù)庫(kù)經(jīng)過(guò)過(guò)濾后的有效告警數(shù)據(jù)和系統(tǒng)告警處理期間所產(chǎn)生的中間結(jié)果。上一步中,數(shù)據(jù)已濾掉了重復(fù)告警、普通告警等無(wú)用的告警數(shù)據(jù)。告警正負(fù)關(guān)聯(lián)分析將告警數(shù)據(jù)與拓?fù)潢P(guān)系相匹配,用于判斷在相關(guān)拓?fù)潢P(guān)系下的告警數(shù)據(jù)是否存在關(guān)聯(lián),見(jiàn)表2。
表2 日志IP 所屬的拓?fù)潢P(guān)系
分析結(jié)果得出,在相關(guān)拓?fù)湟?guī)則下的部分告警數(shù)據(jù)存在有關(guān)聯(lián)規(guī)則,部分結(jié)果如下所示:
{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)
從結(jié)果可以看出,在群組1 中,存在兩組有關(guān)聯(lián)規(guī)則的告警,其中Started Session 與root CMD 告警之間存在著較高的關(guān)聯(lián)規(guī)則,通過(guò)其告警對(duì)應(yīng)的主機(jī)進(jìn)行查看,可以發(fā)現(xiàn)Started Session 告警的產(chǎn)生,導(dǎo)致root CMD 的告警發(fā)生。該關(guān)聯(lián)規(guī)則改進(jìn)算法提高告警處理效率。
根因分析是IT 系統(tǒng)故障管理的重要手段,其作用在于消除冗余告警,將多個(gè)告警合并成一條具有更多信息量的告警,從而找到故障根源,快速定位和消除故障。本文研究的告警根因計(jì)算方法是基于正負(fù)關(guān)聯(lián)規(guī)則挖掘,挖掘告警中IT 系統(tǒng)之間的拓?fù)潢P(guān)系,利用這些拓?fù)潢P(guān)系與關(guān)聯(lián)規(guī)則進(jìn)行告警分析,能較好地適應(yīng)IT 系統(tǒng)架構(gòu)的動(dòng)態(tài)變化,為運(yùn)維人員提供更高效、更便捷的根因分析。