背景
近年來(lái)互聯(lián)網(wǎng)技術(shù)高速發(fā)展,接入監(jiān)控告警的設(shè)備和業(yè)務(wù)也越來(lái)越多,不斷增新的設(shè)備和業(yè)務(wù)使得告警的量級(jí)也逐級(jí)遞加。各種軟硬件模塊每天會(huì)產(chǎn)生大量的告警信息,這些告警中有表象告警,有冗余告警,也有根因告警。每次故障出現(xiàn)都會(huì)引發(fā)一系列錯(cuò)綜疊加的告警,從而將根因告警淹沒在里面,導(dǎo)致故障識(shí)別異常困難。一般告警分析主要是靠運(yùn)維人員進(jìn)行處理,當(dāng)告警出現(xiàn)時(shí),常常要求運(yùn)維人員必須在最短的時(shí)間內(nèi),正確地判斷出告警中存在的關(guān)聯(lián)性,然后根據(jù)自己的經(jīng)驗(yàn)采取相應(yīng)的措施。
然而面對(duì)海量告警,靠人工從大量告警中找到故障原因,分析告警屬于哪類事件等慢慢變得不太現(xiàn)實(shí),為了將告警從散落的狀態(tài)關(guān)聯(lián)起來(lái),目前有以下兩種做法:
傳統(tǒng)的規(guī)則關(guān)聯(lián):
以網(wǎng)絡(luò)的告警關(guān)聯(lián)為例,一般是通過(guò)網(wǎng)管專家梳理告警關(guān)聯(lián)規(guī)則后,再對(duì)一系列告警進(jìn)行關(guān)聯(lián)規(guī)則匹配。但這種做法由于網(wǎng)絡(luò)的復(fù)雜性,設(shè)備變化的高頻性和網(wǎng)元連接經(jīng)常變化等特點(diǎn),人工經(jīng)驗(yàn)建立的關(guān)聯(lián)關(guān)系存在規(guī)則覆蓋不全,不能適應(yīng)網(wǎng)絡(luò)變化等問題。
基于AIOps的告警關(guān)聯(lián):
通過(guò)算法能夠從大量的、低價(jià)值密度、有噪聲的數(shù)據(jù)中提取出有價(jià)值的告警關(guān)聯(lián)信息,動(dòng)態(tài)的獲取事件的關(guān)聯(lián)關(guān)系,輔助運(yùn)維人員決策。
基于FP-growth的告警關(guān)聯(lián)分析
什么是告警關(guān)聯(lián)分析?
基于上面的敘述,我們知道,告警關(guān)聯(lián)分析就是對(duì)一次故障中產(chǎn)生的一系列告警進(jìn)行壓縮和根因識(shí)別的手段。它主要目的有兩個(gè),一個(gè)是告警的壓縮,一個(gè)是根因告警的定位。
為什么要做告警關(guān)系分析?
通過(guò)告警關(guān)系分析,我們可以對(duì)故障根因進(jìn)行準(zhǔn)確定位,提升故障處理效率,并對(duì)冗余告警進(jìn)行壓縮,減少故障工單派發(fā)量,從而減輕運(yùn)維人員的故障處理負(fù)擔(dān),簡(jiǎn)單來(lái)說(shuō),就是提效降本。
告警和故障的關(guān)系?
在進(jìn)行關(guān)聯(lián)分析之前,有兩個(gè)概念在這里需要區(qū)分一下:故障和告警。它們是運(yùn)維場(chǎng)景中兩個(gè)不同的概念。故障是網(wǎng)絡(luò)運(yùn)行中的異常狀態(tài),故障都需要維護(hù)人員進(jìn)行及時(shí)處理。告警是網(wǎng)絡(luò)設(shè)備發(fā)生特定事件后的事件通報(bào),告警只是表明可能有故障發(fā)生,但并不是一定有故障發(fā)生。故障發(fā)生后會(huì)引發(fā)一系列的告警。一個(gè)故障還可能引發(fā)其他故障,從而引起告警風(fēng)暴的出現(xiàn)。而一般告警可以分為以下幾類:
表象告警:故障造成的結(jié)果告警,往往看不出根源,需要運(yùn)維人員進(jìn)行進(jìn)一步分析。
冗余告警:同一告警在某一時(shí)間段內(nèi)的重復(fù)告警,或者一些不重要的周期性告警。
根因告警:往往是造成故障的原因的告警。
波動(dòng)告警:因指標(biāo)波動(dòng)造成的一類告警,通常不涉及到故障的發(fā)生。
如何去做基于機(jī)器學(xué)習(xí)的告警關(guān)聯(lián)分析?
一般的做法(如下圖):
針對(duì)告警事件的特點(diǎn)對(duì)歷史告警數(shù)據(jù)進(jìn)行預(yù)處理,生成告警事務(wù)數(shù)據(jù);
然后選擇合適的告警關(guān)聯(lián)分析算法,對(duì)告警事務(wù)數(shù)據(jù)進(jìn)行訓(xùn)練,通過(guò)對(duì)模型的參數(shù)調(diào)優(yōu),生成告警關(guān)聯(lián)規(guī)則并得到關(guān)聯(lián)則庫(kù);
在推理階段,將需要推理的告警通過(guò)預(yù)處理后與關(guān)聯(lián)規(guī)則庫(kù)中告警關(guān)聯(lián)規(guī)則進(jìn)行匹配,確定根因告警。
具體步驟
數(shù)據(jù)預(yù)處理:
常規(guī)處理:
提取對(duì)告警關(guān)聯(lián)分析有重要作用的關(guān)鍵字段;
剔除部分次要級(jí)別的告警以及同一時(shí)間段重復(fù)類型的告警;
去除告警時(shí)間明顯異常的告警。
告警事件提?。?/b>
告警事件,即每次故障事件所產(chǎn)生的一系列告警的集合,這是算法輸入的必要形式,一般采取滑動(dòng)時(shí)間窗的形式生成告警事件,滑動(dòng)時(shí)間窗步長(zhǎng)的取值可以根據(jù)告警的實(shí)際情況按告警事件的時(shí)間分布,取90分位數(shù)。告警事件的質(zhì)量和數(shù)量與滑動(dòng)窗口寬度和步長(zhǎng)的設(shè)置息息相關(guān),而告警事件作為算法的輸入則對(duì)算法的效果起到重要的作用。如下圖示例:ABCDE為告警數(shù)據(jù),滑動(dòng)窗口寬度為12,步長(zhǎng)為7 ,通過(guò)3個(gè)滑動(dòng)窗口分別得到了 3個(gè)告警事件[T1,T2,T3]。
告警權(quán)重評(píng)估:
一般而言,重要的告警發(fā)生的頻率較低,而不重要的告警發(fā)生頻率很高。因此在進(jìn)行告警關(guān)聯(lián)分析時(shí)不能將告警看作平等的對(duì)象,需要對(duì)重要性不同的告警設(shè)置不同的權(quán)重,這里按照告警級(jí)別、告警節(jié)點(diǎn)重要程度對(duì)告警進(jìn)行加權(quán)求和。當(dāng)然該方法具有較強(qiáng)的主觀性,需要結(jié)合人工經(jīng)驗(yàn)去設(shè)定。
告警拓?fù)浞植迹?/b>
在進(jìn)行告警事務(wù)提取時(shí)不僅需要考慮時(shí)間的因素,還需要考慮空間或者網(wǎng)絡(luò)拓?fù)涞南拗茥l件,比如根據(jù)地域或者子網(wǎng)范圍等,同一地域/范圍內(nèi)的告警才可能是一類告警事件。進(jìn)行此類過(guò)濾可以使后續(xù)的關(guān)聯(lián)分析結(jié)果更加準(zhǔn)確,但同時(shí)也會(huì)增加算法的復(fù)雜度。
告警關(guān)系挖掘:
本文采用的是主流的無(wú)序關(guān)聯(lián)分析算法:FP-Growth,該算法的作用是找到項(xiàng)集數(shù)據(jù)中的頻繁項(xiàng),并生成關(guān)聯(lián)規(guī)則,較于Apriori算法具有更高的效率。項(xiàng)集就是同時(shí)出現(xiàn)的一組項(xiàng)目的集合,在告警關(guān)聯(lián)分析中,一個(gè)告警事件就可以看作是一個(gè)項(xiàng)集,項(xiàng)集的頻率就是支持度,項(xiàng)集A的支持度與項(xiàng)集B的支持度的比值叫做置信度,它定義了關(guān)聯(lián)規(guī)則的可靠程度。提升度能夠反映關(guān)聯(lián)規(guī)則的相關(guān)性程度,提升度大于1表示正相關(guān),越大表示正相關(guān)性程度越高,提升度小于1表示負(fù)相關(guān),越小負(fù)相關(guān)度程度越高,提升度等于1表示不相關(guān)。
支持度:(X→Y) = P(X,Y) / P(I) = P(X∪Y) / P(I) = num(XUY) / num(I)
置信度:(X→Y) = P(Y|X) ?= P(X,Y) / P(X) = P(XUY) / P(X)
提升度:(X→Y) = P(Y|X) / P(Y)
離線挖掘關(guān)聯(lián)關(guān)系:
當(dāng)我們將歷史告警事件輸入算法后,按照這三個(gè)指標(biāo)進(jìn)行關(guān)聯(lián)關(guān)系的過(guò)濾,最終形成一個(gè)強(qiáng)相關(guān)的圖。再通過(guò)社區(qū)發(fā)現(xiàn)算法(如Louvain、LPA、Infomap等)將關(guān)聯(lián)圖劃分為不同社區(qū)。
在線推斷壓縮告警:
我們同樣將待推斷的告警生成告警事件,通過(guò)PR方法來(lái)計(jì)算各個(gè)告警的得分,推斷出此告警事件的根因告警。通過(guò)遍歷與每個(gè)社區(qū)告警事件的相似度,將此類告警劃入社區(qū),實(shí)現(xiàn)告警壓縮。
補(bǔ)充
對(duì)于關(guān)聯(lián)規(guī)則的生成需要對(duì)大量的歷史告警進(jìn)行預(yù)處理和算法生成的步驟,這通常會(huì)花費(fèi)不少時(shí)間,影響實(shí)際使用時(shí)對(duì)算法實(shí)時(shí)性的要求,通過(guò)藍(lán)鯨計(jì)算平臺(tái)的大數(shù)據(jù)分布式處理方法,我們可以快速處理海量告警數(shù)據(jù),滿足實(shí)際應(yīng)用的實(shí)時(shí)需求,快速生成最新最全的關(guān)聯(lián)規(guī)則。
對(duì)于設(shè)備變化沒有那么頻繁,或者每次設(shè)備變化都能及時(shí)更新到CMDB中的運(yùn)維系統(tǒng)而言,可以省略離線的關(guān)聯(lián)挖掘,直接使用最新的設(shè)備關(guān)聯(lián)拓?fù)溥M(jìn)行在線的告警壓縮和根因推斷,同樣也可以取得不錯(cuò)的效果。藍(lán)鯨統(tǒng)一告警中心實(shí)現(xiàn)了對(duì)接CMDB設(shè)備拓?fù)涞年P(guān)聯(lián)分析,告警可以在通過(guò)設(shè)備的拓?fù)鋱D進(jìn)行查看,輔助運(yùn)維人員快速找到根因告警。
總結(jié)
告警來(lái)源的設(shè)備十分復(fù)雜,每天都可能產(chǎn)生大量的告警,其中有根源告警也有表象告警。通過(guò)基于AIOps的告警關(guān)聯(lián)分析對(duì)告警進(jìn)行關(guān)系挖掘,可以幫助運(yùn)維人員對(duì)告警進(jìn)行壓縮并快速定位根因,對(duì)于故障的排查和管理具有十分重要的意義。