劉春波,梁孟孟,侯晶雯,顧兆軍,王志
(1.中國民航大學(xué)信息安全測評中心,天津 300300;2.中國民航大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,天津 300300;3.南開大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,天津 300350)
日志數(shù)據(jù)詳細(xì)記錄了系統(tǒng)的所有狀態(tài)和行為,特別是在大規(guī)模分布式系統(tǒng)和工業(yè)物聯(lián)網(wǎng)(IIoT)中.管理員可以從大規(guī)模日志數(shù)據(jù)中發(fā)現(xiàn)和識別系統(tǒng)異常[1],跟蹤系統(tǒng)行為[2],防御惡意攻擊[3].基于日志的異常檢測[4-6]將幫助管理員快速定位和解決事故問題,構(gòu)建安全可信的系統(tǒng).但傳統(tǒng)方法往往使用關(guān)鍵字搜索或正則表達(dá)式匹配,這往往需要領(lǐng)域知識,人工檢查效率低.因此,高效、實時的基于日志的異常檢測算法具有一定的理論和實際應(yīng)用價值.
但是,概念漂移或模型老化[7]往往會出現(xiàn)在動態(tài)變化和不穩(wěn)定的環(huán)境中.有些系統(tǒng)需要7×24 小時運行來支持廣泛的智能應(yīng)用程序和在線服務(wù).各種各樣的運行程序?qū)⑸杀纫郧案鼜?fù)雜和可變的日志.如果以往日志訓(xùn)練的模型、超平面或分類器等概念不隨日志數(shù)據(jù)的分布而變化,這些算法就不能正確識別異常事件.因此,基于日志的異常檢測算法面臨著不穩(wěn)定問題,表現(xiàn)為在系統(tǒng)劇烈變化環(huán)境下的精度降低現(xiàn)象.根據(jù)Zhang 等人[8]的分析結(jié)果,日志數(shù)據(jù)不穩(wěn)定的原因主要來自兩個方面:1)日志語句受軟件升級和外部環(huán)境影響而自然發(fā)生的變化,即概念漂移;2)日志數(shù)據(jù)在采集和解析過程中所引入的噪聲.
盡管許多算法在實際環(huán)境中取得了良好的性能,如支持向量機(jī)[9](Support Vector Machine,SVM)、樸素貝葉斯[10](NaiveBayes,NB)、決策樹[11](Deci?sion Tree,DT)、隨機(jī)森林[12](Random Forest,RF)等.但在處理不穩(wěn)定日志時仍面臨許多挑戰(zhàn),為應(yīng)對不穩(wěn)定問題,它們經(jīng)常使用周期性的再訓(xùn)練,但這往往需要領(lǐng)域知識且效率低下,并不能解決問題.這些算法以粗粒度檢測異常,而不考慮同類型日志數(shù)據(jù)的差異或日志數(shù)據(jù)之間的不一致性;另外日志訓(xùn)練出來的模型、超平面、分類器等概念不隨日志數(shù)據(jù)的分布而變化,缺乏動態(tài)更新以前經(jīng)驗的機(jī)制.
為減少日志不穩(wěn)定問題對基于日志的異常檢測算法的干擾,本文設(shè)計了一個基于置信度的動態(tài)日志多算法協(xié)同異常檢測模型EBCAD(Ensemble-Based Conformal Anomaly Detection).它使用多種學(xué)習(xí)算法進(jìn)行協(xié)同檢測.首先,設(shè)計了集成多種算法的不一致性度量模塊,計算統(tǒng)計值p值;其次,構(gòu)建了基于置信水平的預(yù)測集,通過動態(tài)調(diào)整置信水平來標(biāo)記一個可信標(biāo)簽;然后,將包含標(biāo)簽、不一致性得分和待檢測日志置信度的結(jié)果反饋到包含相應(yīng)標(biāo)簽的得分集中,作為已有的經(jīng)驗來計算后續(xù)檢測中的p值;最后,根據(jù)協(xié)同檢測得到的置信度與預(yù)設(shè)顯著性水平大小來判斷不穩(wěn)定日志的新樣本是否異常.
本文的結(jié)構(gòu)如下:首先介紹了日志中的不穩(wěn)定問題,其次對模型EBCAD 進(jìn)行了詳細(xì)介紹,然后展示了實驗結(jié)果并對其進(jìn)行了分析,最后對論文進(jìn)行了總結(jié).
1.1.1 日志的概念漂移
隨著軟件升級和外部環(huán)境變化,一些舊的日志事件將會發(fā)生部分變化或者不復(fù)存在.圖1 給出了微軟在線服務(wù)系統(tǒng)日志事件的變化[8].

圖1 微軟在線服務(wù)系統(tǒng)日志事件的變化[8]Fig.1 Evolving log events in Microsoft online service system[8]
場景1:原始日志事件后面增加“for bindingId”作為補(bǔ)充說明.
場景2:原始日志事件前面添加關(guān)鍵字“Mini-Merge”,說明程序執(zhí)行階段.
1.1.2 日志處理過程中產(chǎn)生的噪聲
在日志數(shù)據(jù)的采集過程中,不可避免地會引入一定程度的噪聲,例如由于網(wǎng)絡(luò)錯誤、系統(tǒng)吞吐量有限、存儲不足等問題導(dǎo)致日志丟失、重復(fù)或混亂現(xiàn)象發(fā)生而引入噪聲.另一種重要的噪聲來源是日志解析.不準(zhǔn)確的日志解析會影響異常檢測模型[13]的性能.He 等 人[14]、Zhu 等 人[15]對SLCT[16]、IPLoM[17]、LKE[18]、LogSig[19]等常用的日志解析器進(jìn)行了評估,指出現(xiàn)有的日志解析器如LogSig 存在處理某些數(shù)據(jù)集時不夠準(zhǔn)確的問題.He 等人[14]還指出解析過程中4%的錯誤甚至?xí)?dǎo)致異常檢測的性能下降一個數(shù)量級,這是因為異常檢測分類器對一些關(guān)鍵事件較為敏感,但日志解析器對這些關(guān)鍵事件進(jìn)行了錯誤解析.圖2 顯示了微軟在線服務(wù)系統(tǒng)日志解析過程中出現(xiàn)錯誤的案例[8].

圖2 微軟在線服務(wù)器X 解析錯誤日志[8]Fig.2 Mis-parsing logs in Microsoft online server X
場景1:與真實日志事件相比,日志解析器遺漏了關(guān)鍵字“resize”.
場景2:日志解析器錯誤地將參數(shù)“rtc”作為日志事件的關(guān)鍵字.
動態(tài)日志隨著時間的推移而變化,僅僅基于以前的檢測模型很難做出準(zhǔn)確的決策.這就要求檢測模型可以根據(jù)動態(tài)日志進(jìn)行動態(tài)調(diào)整.然而,以往基于日志的異常檢測算法(SVM、LR、DT 等)的決策往往僅分析新日志是正常的還是異常的,而不考慮算法是如何確定選擇的,忽略了新日志和已有日志的不一致性.例如支持向量機(jī)通常忽略了測試對象距離超平面的距離,僅僅根據(jù)在超平面的哪一側(cè)做決策.統(tǒng)計評估則利用這個距離檢測待測對象的不一致性并用來判斷是否屬于別的類.此外,統(tǒng)計評估還告訴我們,與同一類中的舊日志相比,已提交的新日志是如何屬于某個類的,以及與同一事件中的其他日志相比,新日志是屬于正常事件還是異常事件.然而,基于概率的傳統(tǒng)度量,如準(zhǔn)確率、召回率和F1不能評估分類器的決策,只能表明一個新日志屬于正常事件或異常事件的可能性有多大.
幸運的是,Vovk 等人[20]基于統(tǒng)計評估的一致性預(yù)測(Conformal Predictor,CP)理論,可以利用以前的經(jīng)驗來確定新的預(yù)測的精確置信水平.因此,我們將使用這種方法將新日志和歷史日志聯(lián)系起來,并根據(jù)數(shù)據(jù)分布的變化更新以前的經(jīng)驗.在一致性預(yù)測[21]中,我們可以得到一個統(tǒng)計量p值,它可以用來計算置信度,并指導(dǎo)算法進(jìn)行決策或評估.它還可以輸出具有可信度和置信度的二分類預(yù)測,或給出固定置信度下的預(yù)測集.通過將之前的數(shù)據(jù)引入決策中,可以有效減少數(shù)據(jù)分布變化引起的數(shù)據(jù)集不穩(wěn)定問題.
在本節(jié)中,我們將詳細(xì)描述EBCAD 的每個步驟.如圖3 所示,EBCAD 主要包括三個步驟:數(shù)據(jù)預(yù)處理、不一致性度量、異常檢測.我們首先將非結(jié)構(gòu)化原始日志預(yù)處理為結(jié)構(gòu)化特征矩陣.在置信度的指導(dǎo)下,我們選擇多個集成算法來組成不一致性度量模塊,這里選擇的集成算法分別是AdaBoost 和RF,分別記為CP-AB 和CP-RF.最后,我們調(diào)整顯著性水平,將檢測到的日志序列標(biāo)記為一個標(biāo)簽同時附加置信度,并反饋給相應(yīng)的類作為后續(xù)檢測的經(jīng)驗.

圖3 EBCAD模型組成Fig.3 Composition of EBCAD model
日志數(shù)據(jù)預(yù)處理的詳細(xì)過程見圖4.
2.1.1 日志數(shù)據(jù)
現(xiàn)代大型系統(tǒng)通過日志來記錄系統(tǒng)的運行情況,每條日志包含無結(jié)構(gòu)化的數(shù)據(jù),例如時間戳、日志優(yōu)先級、系統(tǒng)組件和日志序列.通常,日志消息用一組字段記錄特定的系統(tǒng)事件.從Amazon EC2 平臺的日志中提取了8 行日志(圖4),為了便于表示,這里省略了一些字段.
2.1.2 日志解析
日志是無結(jié)構(gòu)的,包含自由文本.日志解析的目的就是提取一組事件模板,從而可以結(jié)構(gòu)化原始日志.每一條日志消息被解析為一個事件模板(常量部分)和一些具體的參數(shù)(變量部分),正如圖4 所展示的那樣,第一條日志消息被解析為事件模板“Event 1”:PacketResponder*for blocking*terminating.對于自動化日志解析器的有效性,可以用解析準(zhǔn)確率[22]來評估,即成功解析的日志事件在全部日志消息中所占比例.解析后,每個日志消息都有一個事件模板,該事件模板對應(yīng)于同一模板的一組消息.當(dāng)且僅當(dāng)日志消息的事件模板與真實數(shù)據(jù)對應(yīng)的日志消息組相同時,日志消息被認(rèn)為正確解析.例如,一個日志序列是[E1,E2,E3],如果經(jīng)過日志解析后變?yōu)椋跡1,E3,E2],那么解析正確率即為1/3.經(jīng)過比較,本文采用Drain 作為日志解析器,因為在13 種常見的日志解析器中,Drain 的解析準(zhǔn)確率最高[15].盡管Drain 也會引入不同程度的噪聲,但是本文提出的EBCAD 模型可以緩解因解析器不夠準(zhǔn)確帶來的日志不穩(wěn)定問題.

圖4 日志數(shù)據(jù)預(yù)處理Fig.4 Log data preprocessing
2.1.3 特征向量提取
這個步驟的主要目的是從日志事件中提取有價值的特征,這些特征可以提供給異常檢測模型.特征提取的輸入為日志解析步驟中生成的日志事件,輸出為事件計數(shù)矩陣.在每個日志序列中,將每個日志事件的發(fā)生次數(shù)計數(shù)到日志解析器中,以形成事件計數(shù)向量.例如,如果事件計數(shù)向量為[0,0,2,3,0,0,0],則意味著在這個日志序列中,事件3 發(fā)生了兩次,事件4 發(fā)生了三次.最后,構(gòu)造全部的事件計數(shù)向量構(gòu)成事件計數(shù)矩陣A,其中序列Aij記錄了事件j在第i個日志序列中發(fā)生的次數(shù).
2.2.1 不一致性度量
不一致性度量模塊是一個接口和算法獨立的模塊,在顯著性水平的指導(dǎo)下,使用適當(dāng)?shù)乃惴ㄗ鳛椴灰恢滦远攘浚嬎悴灰恢滦苑謹(jǐn)?shù).通過一致性預(yù)測,我們將得到一個統(tǒng)計量p值.與概率不同的是,p值是基于具有相同標(biāo)簽的所有分?jǐn)?shù)計算的.p值越大,則新日志與具有相同標(biāo)簽的舊日志的一致性越高.許多先前得分較低的日志將證明新的日志更接近這個類.因此,我們可以檢測新的日志消息是否異常,并獲得一個有置信度的標(biāo)簽.
不一致性度量模塊作為EBCAD 的核心,可以利用以往的經(jīng)驗來確定新的預(yù)測的精確置信水平,并考慮以往數(shù)據(jù)與檢測數(shù)據(jù)之間的關(guān)系,而不考慮算法的內(nèi)部細(xì)節(jié)和實現(xiàn).我們首先選擇多種算法的評分函數(shù)作為不一致性度量來計算不一致性得分.評分函數(shù)記為:

式中:l*代表新的日志消息,D代表數(shù)據(jù)集中的訓(xùn)練集,L代表具有相同標(biāo)簽的一組日志.
我們使用公式(1)來計算所有日志的不一致性得分.對于日志訓(xùn)練數(shù)據(jù)集,每種算法將得到兩個不一致性得分集:正常得分集和異常得分集.對于日志檢測序列,也將通過每種算法獲得一個檢測日志得分.然后,根據(jù)公式(2)和公式(3)計算p值.將訓(xùn)練序列集合記為K,日志解析算法產(chǎn)生的日志事件模板集合記為T,新日志的p值是K中至少與T中其他日志不相同的日志的比例.新日志的p值的計算公式記為:

為了減少算法的分類錯誤,選擇多個合適的算法組成這個模塊,根據(jù)真實的標(biāo)簽將訓(xùn)練日志事件分為正常日志事件和異常日志事件,然后我們得到兩個得分集和兩個p值.最后,為緩解日志中出現(xiàn)的不穩(wěn)定問題,我們將檢測錯誤的測試日志序列的p值對應(yīng)的得分作為后續(xù)檢驗的已有經(jīng)驗,將其添加到對應(yīng)的正常得分集或異常得分集中去,作為反饋機(jī)制.這將避免算法在不穩(wěn)定環(huán)境中持續(xù)造成錯誤決策.
2.2.2 點預(yù)測的置信度和可信度
一致性預(yù)測框架提供了兩個關(guān)鍵的指標(biāo):置信度和可信度.如上所述,測試對象xn嘗試每個可能的標(biāo)簽yc∈y(y={正常,異常})作為xn的標(biāo)簽,然后計算p值.最后選擇具有最大的p值對應(yīng)標(biāo)簽作為檢測對象xn的標(biāo)簽.
檢測標(biāo)簽將由置信度(confidence)和可信度(credibility)來衡量.置信度定義為1 減去第二大的p值,而可信度定義為最大的p值.直觀地說,高置信度表明,檢測標(biāo)簽的所有其他候選者都是不可能的.低可信度意味著最大的p值很小,所以測試實例不是訓(xùn)練集產(chǎn)生的分布.注意,如果數(shù)據(jù)集是獨立同分布的,可信度不會很低.
四種可能的結(jié)果如下:1)高可信度-高置信度.這是最好的情況,該算法能夠正確識別一個樣本對應(yīng)一個類,并且只對應(yīng)一個類.2)高可信度-低置信度.測試樣本很相似,屬于兩個或兩個以上的類.3)低可信度-高置信度.算法不能準(zhǔn)確將測試樣本與數(shù)據(jù)集現(xiàn)存類別的任何一個類別聯(lián)系起來.4)低可信度-低置信度.算法給測試樣本檢測一個標(biāo)簽,但它似乎與另一個標(biāo)簽更相似.
我們將使用p值來計算可信度,即對應(yīng)標(biāo)簽的p值,置信度就是1減去第二大的p值,偽代碼如算法1所示.
算法1
輸入:訓(xùn)練集{(x1,y1),…,(xn-1,yn-1)},測試實例xn和一個給定的顯著性水平ε.
輸出:測試實例xn的標(biāo)簽以及置信度.
1)用訓(xùn)練集{(x1,y1),…,(xn-1,yn-1)}訓(xùn)練集成分類器AdaBoost和隨機(jī)森林.
2)分別計算訓(xùn)練集中正常樣本與異常樣本的{(x1,y1),…,(xl,yl)}中的不一致性得分α1,α2,…,αn-1.注意:αi,i=1,…,n-1 是步驟1)中集成學(xué)習(xí)后分類器的不一致性度量函數(shù)結(jié)果.
3)初始化檢測集合Γε為空.
4)對每一個測試日志序列X,分別計算正常和異常的p值,即pN和pA.
5)比較pN和pA的大小,可信度取二者中較大的,置信度為1 減去二者中較小的.如果置信度大于給定置信水平,待測樣本的標(biāo)簽即為p值較大值對應(yīng)的標(biāo)簽,否則,待測樣本的標(biāo)簽即為p值較小值對應(yīng)的標(biāo)簽.
6)將待測樣本的標(biāo)簽以及置信度添加到檢測集合Γε中.
7)根據(jù)真實標(biāo)簽將檢測錯誤樣本對應(yīng)的不一致性得分添加到對應(yīng)的不一致性得分集合中,作為后續(xù)檢測經(jīng)驗.
8)判斷待測樣本序列是否檢測完畢,如果沒有,轉(zhuǎn)到步驟4);如果完畢,則輸出檢測集合Γε.
3.1.1 數(shù)據(jù)集
HDFS 數(shù)據(jù)集:HDFS 數(shù)據(jù)集是一種常用的基于日志的異常檢測基準(zhǔn)[23-24].它是通過在超過200 個Amazon 的EC2 節(jié)點上運行基于Hadoop 的MapRe?duce作業(yè)生成的,并由Hadoop領(lǐng)域?qū)<疫M(jìn)行標(biāo)記.29個日志事件共產(chǎn)生24 396 061 條日志消息.這些日志消息根據(jù)其block_id形成不同的日志序列,其中約2.9%表示系統(tǒng)異常.我們從原始HDFS 數(shù)據(jù)集隨機(jī)收集6 000個正常日志序列和6 000個異常日志序列作為訓(xùn)練集.
BGL_100K 數(shù)據(jù)集:BGL 數(shù)據(jù)包含100 000 條日志信息,由勞倫斯利弗莫爾國家實驗室(LLNL)[25]的BlueGene/L 超級計算機(jī)系統(tǒng)記錄.與HDFS 數(shù)據(jù)不同,BGL 日志沒有記錄每個作業(yè)執(zhí)行的標(biāo)識符.因此,我們必須使用固定窗口或滑動窗口將日志切片為日志序列,然后提取相應(yīng)的事件計數(shù)向量.但是窗口的數(shù)量取決于所選的窗口大小和步長.在BGL_100K 數(shù)據(jù)中,有2 613 條日志消息被標(biāo)記為失敗,如果一個日志序列中存在任何失敗日志,則該日志序列被標(biāo)記為異常.
合成日志數(shù)據(jù)集:為了顯示EBCAD 處理不穩(wěn)定日志數(shù)據(jù)方法的有效性,我們基于原始HDFS 和BGL_100K數(shù)據(jù)集創(chuàng)建了不穩(wěn)定的測試數(shù)據(jù)集.我們主要模擬一種日志不穩(wěn)定性,如圖5 所示,根據(jù)Zhang 等人[8]在實證研究中獲得的經(jīng)驗,合成不穩(wěn)定的日志數(shù)據(jù).合成日志數(shù)據(jù)可以反映真實日志的不穩(wěn)定特征.

圖5 合成日志序列Fig.5 Synthetic log sequences
不穩(wěn)定日志序列:在日志演變或收集過程中,日志序列可能會發(fā)生變化.為了模擬不穩(wěn)定的日志序列,從原始日志序列中隨機(jī)移除一些不重要的日志事件(它們不影響相應(yīng)的異常狀態(tài)標(biāo)簽).隨機(jī)選擇一個不重要的日志事件,并在一個日志序列中重復(fù)幾次,將這些合成的不穩(wěn)定日志序列按一定比例注入原始日志數(shù)據(jù)中.
為合成具有不穩(wěn)定性的數(shù)據(jù)集,隨機(jī)從原始HDFS 數(shù)據(jù)集中收集51 000 個日志序列,其中包含50 000 條正常和1 000 條異常,異常百分比是2%,接近原始HDFS 數(shù)據(jù)集的異常比例.隨機(jī)從原始BGL數(shù)據(jù)集中收集100 000 個日志序列,其中包含97 387條正常和2 613條異常,異常百分比也是2%左右.將不穩(wěn)定的日志序列注入其中,并創(chuàng)建一個測試集,表1 和表2 分別總結(jié)了合成的不穩(wěn)定HDFS 和BGL_100K數(shù)據(jù)集情況.

表1 合成不穩(wěn)定HDFS數(shù)據(jù)集Tab.1 Synthetic unstable HDFS dataset

表2 合成不穩(wěn)定BGL_100K數(shù)據(jù)集Tab.2 Synthetic unstable BGL_100K dataset
實驗在下列平臺進(jìn)行:Intel(R)Core(TM)i7-6700 CPU @3.40GHz 3.41 GHz,16.0 GB RAM,Win?dows操作系統(tǒng).
3.1.2 評估指標(biāo)
實驗評價采用基于混淆矩陣的二級評價指標(biāo):準(zhǔn)確率(Accuracy)、精度(Precision)、召回率(Recall)和調(diào)和平均數(shù)(F1)值.這些指標(biāo)被用來評價算法異常檢測的有效性.

如上所示,Precision 表示所報告的異常中正確的百分比,Recall 表示所檢測到的真實異常的百分比,F(xiàn)1表示Precision和Recall的調(diào)和平均值.
為了評估混淆矩陣中的真陽性(TP)、真陰性(TN)、假陽性(FP)和假陰性(FN)指標(biāo),采用馬修斯相關(guān)系數(shù)(MCC).

本節(jié)我們探究不同置信水平下,EBCAD 各指標(biāo)的性能(圖6、圖7),從而確定最優(yōu)的置信水平來繼續(xù)接下來的實驗.在圖6(a)中,F(xiàn)1、MCC 等隨著置信水平的增加而緩慢提高,在置信水平為0.995~1之間取得最大值,圖6(b)詳細(xì)描述了置信水平在0.995~1之間時,F(xiàn)1、MCC 等指標(biāo)在HDFS 數(shù)據(jù)集上的變化過程.可以觀察到,當(dāng)置信水平為0.997 的時候,F(xiàn)1、MCC 等指標(biāo)的值達(dá)到最大.所以,對HDFS 日志數(shù)據(jù)集我們將置信水平設(shè)置為0.997.

圖6 HDFS數(shù)據(jù)集上EBCAD指標(biāo)性能隨置信水平變化Fig.6 EBCAD’s performance on HDFS dataset varies with confidence level

圖7 BGL數(shù)據(jù)集上EBCAD指標(biāo)性能隨置信水平變化Fig.7 EBCAD’s performance on BGL dataset varies with confidence level
在圖7(a)中,當(dāng)置信水平在0.5~0.9 之間時,F(xiàn)1、MCC等指標(biāo)值隨著置信水平的增加而增加;當(dāng)置信水平在0.85~1 之間時,F(xiàn)1、MCC 等的指標(biāo)值達(dá)到最大.圖7(b)詳細(xì)描述了置信水平在0.85~1 之間時,F(xiàn)1、MCC 等指標(biāo)在BGL_100K 數(shù)據(jù)集上的變化過程.可以觀察到,當(dāng)置信水平為0.92 時,F(xiàn)1、MCC 等指標(biāo)的值達(dá)到最大,所以,在BGL_100K 數(shù)據(jù)集上,我們將置信水平設(shè)置為0.92.
3.3.1 EBCAD的有效性
我們分別在原始HDFS 和BGL_100K 上訓(xùn)練EBCAD,然后把訓(xùn)練好的模型在合成的測試集(注入率,即不穩(wěn)定日志序列注入的比例,分別為5%、10%、15%、20%)上測試.我們將EBCAD 與傳統(tǒng)的單一決策分類器(LR、SVM、NB、CP)以及Zhang 等人[8]提出的LogRobust(簡寫為LogR)進(jìn)行了對比,實驗結(jié)果如表3和表4所示.在這里CP的底層算法有四種,分別對應(yīng)LR、DT、SVM、NB,我們只取達(dá)到最好效果的一種,具體達(dá)到的效果在3.3.2 節(jié)中有所體現(xiàn).在表3 和表4 中,可以看到EBCAD 表現(xiàn)最好.即使在較高的不穩(wěn)定比例20%的情況下,EBCAD 依然能保持比較高的準(zhǔn)確率.例如,當(dāng)注入率為20%時,即20%的原始日志序列被替換為人工合成的日志序列,EBCAD 依然能保持穩(wěn)健性.原因在于,一方面,在HDFS 日志數(shù)據(jù)集上,EBCAD 是在置信水平為0.997下(即預(yù)測錯誤的概率不超過0.3%)的多模型協(xié)同檢測;在BGL_100K 數(shù)據(jù)集上,EBCAD 是在置信水平為0.92下的多模型協(xié)同檢測.一方面,相比于傳統(tǒng)的單一決策,EBCAD 的決策過程是采用多個單一決策分類器數(shù)次迭代后產(chǎn)生的不一致性得分,這使得度量日志不一致性的統(tǒng)計量p值更精確,從而使異常檢測結(jié)果更準(zhǔn)確,也因此緩解了單一決策分類器容易出現(xiàn)各種錯誤的問題.另一方面,EBCAD 能夠?qū)z測錯誤的不穩(wěn)定日志得分添加到之前的得分集合中,更新日志異常檢測的經(jīng)驗,從而更好地適應(yīng)不穩(wěn)定環(huán)境.然而,傳統(tǒng)的單一分類器對以前未見過的日志序列無法重新學(xué)習(xí),不能適應(yīng)日志動態(tài)變化的環(huán)境,因此難以得到滿意的結(jié)果.

表3 HDFS不穩(wěn)定日志序列實驗結(jié)果Tab.3 Experimental results on HDFS unstable log sequences

表4 BGL_100K不穩(wěn)定日志序列實驗結(jié)果Tab.4 Experimental results on BGL_100K unstable log sequences
3.3.2 集成學(xué)習(xí)的有效性
為探究集成學(xué)習(xí)對一致性異常檢測的影響,圖8詳細(xì)記錄了在不穩(wěn)定比例不同的數(shù)據(jù)集中,無集成學(xué)習(xí)與有集成學(xué)習(xí)條件下一致性異常檢測的結(jié)果.

圖8 不穩(wěn)定比例不同的數(shù)據(jù)集中F1的變化Fig.8 Varing values of F1 on datasets with different instability ratios
從圖8(a)中我們看到,在不穩(wěn)定比例分別為5%、10%、15%、20%的情況下,無集成學(xué)習(xí)的一致性預(yù)測中,CP-LR 的F1值最高,但EBCAD 的F1值高于CP-LR.從圖8(b)中看到,所有分類器的F1值隨著不穩(wěn)定比例數(shù)據(jù)的提高而呈下降趨勢.在無集成學(xué)習(xí)的一致性預(yù)測中,CP-NB 的F1值最高,但EBCAD 的F1值平均高出CP-NB 10%左右,達(dá)到了比較好的效果.
HDFS 數(shù)據(jù)集是在從未修改的Hadoop 系統(tǒng)[26]中收集的,BGL 數(shù)據(jù)來自勞倫斯利弗莫爾國家實驗室(LLNL)[25]BlueGene/L 超級計算機(jī)系統(tǒng)記錄,所以它們在源代碼中沒有日志序列的變化.另外,HDFS 數(shù)據(jù)集和BGL_100K 數(shù)據(jù)集的所有日志事件都是直接從源代碼中識別出來的,可以排除解析錯誤等處理噪聲的影響,原始的HDFS 日志和BGL_100K 都是穩(wěn)定的數(shù)據(jù)集.我們應(yīng)用EBCAD 在原始的HDFS 數(shù)據(jù)集和BGL_100K 上,依然采用表1 所示的訓(xùn)練集.將原始HDFS數(shù)據(jù)集中剩余的日志序列作為測試集,測試集共包含51 000條日志消息,其中1 000條表示異常行為.將原始BGL_100K 數(shù)據(jù)集中剩余的日志序列作為測試集,測試集共包含40 000條日志消息,其中1 045條表示異常行為.
在HDFS 數(shù)據(jù)集上的實驗結(jié)果如圖9 所示,可以看到相比傳統(tǒng)分類器LR、DT、SVM、NB,EBCAD 的F1和MCC 值都更高.傳統(tǒng)分類器的Recall雖然都很高,但是它們的F1和MCC值沒有EBCAD高.

圖9 HDFS穩(wěn)定數(shù)據(jù)集上的結(jié)果Fig.9 Results on stable HDFS dataset
在BGL_100K 數(shù)據(jù)集上的實驗結(jié)果如圖10 所示,可以看到在傳統(tǒng)分類器中表現(xiàn)最好的是NB.與NB相比,EBCAD的F1和MCC值明顯要高.

圖10 BGL穩(wěn)定數(shù)據(jù)集上的結(jié)果Fig.10 Results on stable BGL dataset
實驗結(jié)果表明,EBCAD 不僅可以有效地應(yīng)用于不穩(wěn)定的日志數(shù)據(jù)集,而且可以有效地應(yīng)用于穩(wěn)定的日志數(shù)據(jù)集.
多年來,人們提出了許多基于日志數(shù)據(jù)的異常檢測方法來自動識別大規(guī)模軟件系統(tǒng)中的異常[26-28].然而,現(xiàn)有的方法無法處理日志數(shù)據(jù)的不穩(wěn)定性.為應(yīng)對不穩(wěn)定問題,傳統(tǒng)方法經(jīng)常使用周期性的再訓(xùn)練方法,但這往往需要領(lǐng)域知識且效率低下,并不能真正解決問題.傳統(tǒng)算法以粗粒度檢測異常,而不考慮同類型日志數(shù)據(jù)的差異或日志數(shù)據(jù)之間的不一致性.為此,本文提出了一種新的應(yīng)對不穩(wěn)定日志的異常檢測方法——EBCAD.它將新的日志和訓(xùn)練日志數(shù)據(jù)集聯(lián)系起來,并將其作為以前的經(jīng)驗用于不穩(wěn)定日志中的決策.EBCAD 選擇多個合適的算法,根據(jù)可信度共同做出決策,而不是僅依賴于單個算法做出決策.該方法在HDFS 和BGL_100K 兩個日志數(shù)據(jù)集上得到了良好的結(jié)果,并且在準(zhǔn)確率、召回率、F1和MCC 等指標(biāo)上都取得了更好的性能,驗證了EBCAD算法的有效性.