王曉東,趙一寧,肖海力,王小寧,遲學(xué)斌
1.中國(guó)科學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)信息中心,北京 100190
2.中國(guó)科學(xué)院大學(xué),北京 100049
中國(guó)國(guó)家高性能計(jì)算環(huán)境是由國(guó)內(nèi)眾多超算中心和高校的計(jì)算集群組成的國(guó)家級(jí)大型高性能計(jì)算環(huán)境,采用中國(guó)科學(xué)院計(jì)算機(jī)網(wǎng)絡(luò)信息中心自主研發(fā)的網(wǎng)格環(huán)境中間件SCE[1]聚合了大量的通用計(jì)算資源,為全國(guó)眾多高校和研究機(jī)構(gòu)的用戶提供了優(yōu)質(zhì)的計(jì)算服務(wù)。環(huán)境中Linux 系統(tǒng)的syslog 服務(wù)會(huì)產(chǎn)生大量日志,用于記錄系統(tǒng)中發(fā)生的各類事件信息,這些信息包含各種潛在的異常情況,對(duì)其進(jìn)行分析具有重要意義。由于環(huán)境中的每個(gè)節(jié)點(diǎn)都會(huì)產(chǎn)生大量的系統(tǒng)日志,這使得最終的日志文件變得極為龐大,直接采用人工觀察的方法處理這些日志顯然是一項(xiàng)不可能完成的任務(wù),因此需要使用一些機(jī)器學(xué)習(xí)方法對(duì)環(huán)境中的日志進(jìn)行檢測(cè)分析。
基于機(jī)器學(xué)習(xí)的檢測(cè)分析技術(shù)主要分為兩大類:誤用檢測(cè)和異常檢測(cè)[2]。誤用檢測(cè)屬于機(jī)器學(xué)習(xí)中的有監(jiān)督算法,建模時(shí)需要人工將所有訓(xùn)練樣本標(biāo)記為“正?!焙汀爱惓!焙蟛拍苓M(jìn)行學(xué)習(xí)訓(xùn)練并更新模型參數(shù)。異常檢測(cè)屬于無(wú)監(jiān)督學(xué)習(xí)算法。其主要思想是根據(jù)已知的大量數(shù)據(jù)建立模型基線,然后找到偏離模型基線的少量數(shù)據(jù)作為異常。大規(guī)模分布式環(huán)境中多節(jié)點(diǎn)產(chǎn)生的日志比較復(fù)雜,因?yàn)檫@些日志通常是開(kāi)發(fā)人員為了開(kāi)發(fā)方便而打印的一些原始想法,其中包括錯(cuò)誤、跟蹤和程序內(nèi)部狀態(tài)等信息,因此利用這些信息是非常困難的。同時(shí)這些信息都是非結(jié)構(gòu)化的,不利于機(jī)器識(shí)別。此外,日志的數(shù)據(jù)量非常龐大,人工標(biāo)注后再使用機(jī)器學(xué)習(xí)方法進(jìn)行分析顯然是難以完成的任務(wù),因此使用無(wú)監(jiān)督的異常檢測(cè)方法較為合適。在先前的工作中已經(jīng)初步實(shí)現(xiàn)了使用機(jī)器學(xué)習(xí)算法對(duì)環(huán)境中的日志流量進(jìn)行檢測(cè),然后針對(duì)異常日志流量進(jìn)行聚類。然而該方法屬于離線算法,并且在異常結(jié)果分析時(shí)使用的聚類算法需要人工參與并設(shè)定聚類參數(shù),而本文方法在建模時(shí)可以更加精細(xì)地自動(dòng)化確定模型參數(shù),并更進(jìn)一步探索如何進(jìn)行模型持久化以及如何進(jìn)行線上檢測(cè)。
系統(tǒng)的整體流程除了設(shè)定少量閾值以及流量模式的定義需要人工參與外,得到異常日志流量模式的過(guò)程全自動(dòng)化進(jìn)行,并且在線上檢測(cè)時(shí)也能自動(dòng)化得到異常結(jié)果并將其進(jìn)行分類歸納,這樣使得系統(tǒng)管理員對(duì)系統(tǒng)日志流量的監(jiān)控變得簡(jiǎn)單。具體來(lái)說(shuō),本文有兩個(gè)貢獻(xiàn)點(diǎn):
第一,實(shí)現(xiàn)了兩階段異常檢測(cè)的方法,包括線下模型自動(dòng)化建立和線上實(shí)時(shí)結(jié)果分析。在線下模型建立的過(guò)程中無(wú)須人工參與即可找到流量異常情景。在線上分析時(shí),可將結(jié)果實(shí)時(shí)自動(dòng)化展示。整個(gè)處理過(guò)程對(duì)操作者的要求不高,進(jìn)行檢測(cè)時(shí)不需要有機(jī)器學(xué)習(xí)的專業(yè)知識(shí)。
第二,在線下建模和線上預(yù)測(cè)時(shí)使用了國(guó)家高性能計(jì)算環(huán)境中產(chǎn)生的真實(shí)日志進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果證明了該方法顯著降低了人工分析的工作量。
本章簡(jiǎn)單討論一下日志模式分類、數(shù)據(jù)挖掘相關(guān)的日志分析以及在線日志分析的相關(guān)研究。
Vaarandi[3]在對(duì)日志文件數(shù)據(jù)進(jìn)行模式分類時(shí)使用了一個(gè)名叫SLCT(simple logfile clustering tool)的聚類算法,該聚類算法是基于Apriori 頻繁項(xiàng)集的算法,因此需要使用者手動(dòng)輸入調(diào)整支持閾值。之后,他又在文獻(xiàn)[4]中改進(jìn)了日志的聚類算法,并取名為L(zhǎng)ogHound,該算法是一種基于廣度優(yōu)先搜索的頻繁項(xiàng)集挖掘算法,可以從日志中挖掘頻繁模式。該算法結(jié)合了廣度優(yōu)先和深度優(yōu)先算法的特點(diǎn),同時(shí)考慮了事件日志數(shù)據(jù)的特殊屬性,因此比SLCT 更接近地反映Apriori 算法。在此基礎(chǔ)上,Makanju 等人[5]引入了IPLoM(iterative partitioning log mining)算法,該算法是一種用于挖掘事件日志簇的新算法。與SLCT 不同,IPLoM 是一個(gè)層次聚類算法,它以整個(gè)事件日志作為分析起點(diǎn),并在三個(gè)步驟中迭代分區(qū)。與SLCT 類似,IPLoM 將單行日志中的位置視為單詞匹配點(diǎn),因此對(duì)單詞位置的移位操作敏感?;趯哟尉垲惖奶攸c(diǎn),IPLoM 算法不需要提供支持閾值,而是需要其他一些參數(shù)(如分區(qū)值和簇優(yōu)度值),這些參數(shù)對(duì)分區(qū)的劃分進(jìn)行細(xì)粒度的控制。IPLoM相對(duì)于SLCT 的一個(gè)優(yōu)點(diǎn)是能夠使用尾部通配符(例如Interface**)來(lái)檢測(cè)日志的行模式。而本文在處理日志模式分類時(shí),考慮線上分析的實(shí)時(shí)性,匹配時(shí)需要快速得出結(jié)果,因此這里采用基于字符匹配的分類算法,之后針對(duì)國(guó)家高性能計(jì)算環(huán)境的系統(tǒng)日志進(jìn)行分類,代碼壓縮率和后續(xù)特征創(chuàng)建都顯示出了不錯(cuò)的效果。
一些學(xué)者在分析日志并尋找異常消息的領(lǐng)域進(jìn)行了研究,比如Xu 等人[6]通過(guò)源代碼匹配日志的模式,找出相關(guān)變量,然后通過(guò)匹配日志模式,找到其中變量并使其作為主成分分析方法的輸入數(shù)據(jù),最后根據(jù)主成分分析的最大可分性檢測(cè)異常的日志文件。Fronza 等人[7]使用隨機(jī)索引為代表的日志序列,根據(jù)每條日志中的操作提取特征,然后使用支持向量機(jī)關(guān)聯(lián)序列到故障或無(wú)故障的類別上,以此來(lái)預(yù)測(cè)系統(tǒng)故障。Weiss 等人[8]研究了從有標(biāo)簽特征的事件序列中預(yù)測(cè)稀少事件的問(wèn)題,他們使用了基于遺傳算法的機(jī)器學(xué)習(xí)系統(tǒng),能夠在預(yù)測(cè)稀有任務(wù)上達(dá)到比較好的結(jié)果。Yamanishi 和Maruyama[9]提出了一種新的動(dòng)態(tài)系統(tǒng)日志挖掘方法,以更高的置信度檢測(cè)系統(tǒng)故障,并發(fā)現(xiàn)計(jì)算機(jī)設(shè)備間的連續(xù)報(bào)警模式。Yuan 等人[10]提出了一個(gè)名為Sher-Log 的工具,它利用運(yùn)行時(shí)日志提供的信息來(lái)分析源代碼,以推斷在失敗的生產(chǎn)運(yùn)行期間必須或可能發(fā)生的事情,它不需要重新執(zhí)行程序,也不需要知道日志的語(yǔ)義即可推斷關(guān)于執(zhí)行失敗的控制和數(shù)據(jù)值信息。Peng等人[11]應(yīng)用文本挖掘技術(shù)將日志文件中的消息分類為常見(jiàn)情況,通過(guò)考慮日志消息的時(shí)間特性來(lái)提高分類準(zhǔn)確性,并利用可視化工具來(lái)評(píng)估和驗(yàn)證用于系統(tǒng)管理有趣的時(shí)間模式。本文中使用Xu 等人[6]描述的異常檢測(cè)方法,但是輸入的日志類別是通過(guò)字符匹配得到的,同時(shí)研究對(duì)象為日志類型的有序排列,在得到未知的異常日志流量模式上更有優(yōu)勢(shì)。
典型的在線日志分析程序通?;诳刂婆_(tái)日志或者安全審計(jì)日志等進(jìn)行分析。比如文獻(xiàn)[12-13]中進(jìn)行的在線日志分析研究程序,它們通過(guò)手動(dòng)輸入如正則表達(dá)式這樣的規(guī)則來(lái)匹配待分析日志中的對(duì)應(yīng)字符串,通過(guò)這種方式就可以找到需要關(guān)注的日志條目。然而這種手動(dòng)輸入規(guī)則的方式,處于線上運(yùn)行時(shí),可能會(huì)經(jīng)常更新軟件或者模型基線,這樣會(huì)使得每當(dāng)需要更新的時(shí)候,都需要人工重新編輯規(guī)則匹配新出現(xiàn)的日志條目。而本文在日志分析處理的整個(gè)流程中,完全使用無(wú)監(jiān)督的方法建立日志模式庫(kù)和異常模式庫(kù),線上分析時(shí)采用間隔一段時(shí)間就自動(dòng)更新模型的方式進(jìn)行診斷,這樣可以保證模型具有時(shí)效性。同樣的,日志模式匹配時(shí)也不需要人工參與編寫(xiě)任何規(guī)則。
本節(jié)回顧了日志預(yù)處理的步驟并重點(diǎn)分析模型建立時(shí)需要持久化的數(shù)據(jù),這些數(shù)據(jù)是線上分析時(shí)的基礎(chǔ)。整個(gè)線下數(shù)據(jù)處理過(guò)程分為:預(yù)處理、異常檢測(cè)模型的建立與異常流量序列聚類、日志流量模型的建立三部分,下面分別詳細(xì)介紹。
3.1.1 日志數(shù)據(jù)預(yù)處理
Syslog 系統(tǒng)日志屬于非結(jié)構(gòu)化數(shù)據(jù),為了后續(xù)使用各種機(jī)器學(xué)習(xí)方法進(jìn)行分析,必須要將這些數(shù)據(jù)轉(zhuǎn)換成可以進(jìn)行處理的結(jié)構(gòu)化數(shù)據(jù),在實(shí)踐中,需要將日志進(jìn)行分類,即每一條日志都可以確定成唯一的一種類型,這就要求能得到一個(gè)日志倉(cāng)庫(kù),里面存儲(chǔ)所有已知的日志類型。生成日志倉(cāng)庫(kù)的核心是如何判定兩條日志是否屬于同一類型。判定日志類型時(shí),為了使判定過(guò)程實(shí)時(shí)快速,Zhao 等人[14]提出了字符匹配法來(lái)確定兩條日志的相似度,并且在文獻(xiàn)[15]中改進(jìn)了該算法。算法將日志中的每一個(gè)單詞作為一個(gè)基本單元,然后對(duì)其進(jìn)行匹配,并基于最長(zhǎng)公共子序列得到匹配的單詞數(shù)目,最后與兩條日志的總單詞數(shù)進(jìn)行比較來(lái)計(jì)算相似度。具體來(lái)說(shuō),假設(shè)待匹配的兩條日志分別為l′和l,其包含的單詞數(shù)量分別為m和n,則兩條日志的相似度的計(jì)算公式如下:
其中,|LCS(l,l′)|代表兩條日志最長(zhǎng)公共子序列匹配的單詞數(shù)。比如以下三條日志:
l1:Received disconnect from IP1
l2:Received disconnect from IP2
l3:Accepted publickey for User1 from IP3
設(shè)閾值為0.5,其中l(wèi)1 和l2 這兩條日志的前三個(gè)字符相匹配,后一個(gè)字符不匹配,因此根據(jù)式(1),可以計(jì)算得到S()l1,l2=3×2/(4+4)=0.8 >0.5,說(shuō)明l1、l2 為同一種類型的日志,同理可以計(jì)算出l1 和l3 這兩條日志的相似度S(l1,l3)=0 <0.5,說(shuō)明l1、l3 為不同類型的日志。
在實(shí)踐中,遍歷所有線下日志,然后和日志倉(cāng)庫(kù)中的每條日志進(jìn)行相似度計(jì)算,如果得到的相似度大于給定閾值,則認(rèn)為日志倉(cāng)庫(kù)中已存在該類型的日志并進(jìn)行下一條日志的比較,否則將這條日志加入到日志類型倉(cāng)庫(kù)。為了進(jìn)行線上模型預(yù)測(cè),將這一步算法完成后得到的日志類型倉(cāng)庫(kù)保存下來(lái),并記作Pattern。
得到日志類型倉(cāng)庫(kù)后,即可進(jìn)行日志數(shù)據(jù)的預(yù)處理工作。實(shí)際操作時(shí),將日志流量的監(jiān)控確定在一個(gè)固定的時(shí)段內(nèi),因此輸入到異常檢測(cè)模型中的基本數(shù)據(jù)單元是以時(shí)間片進(jìn)行切分的,將單個(gè)時(shí)間片內(nèi)順序出現(xiàn)的所有日志稱作“日志流量序列”。將流量序列中的每條日志和日志倉(cāng)庫(kù)中的日志類型進(jìn)行匹配,可以得到一條以日志類型為屬性的向量,向量的每一個(gè)位置的數(shù)值代表該條流量序列中對(duì)應(yīng)類型日志出現(xiàn)的次數(shù)。該日志流量序列向量組生成后即完成了預(yù)處理步驟。整個(gè)日志預(yù)處理流程如圖1所示,圖中右下角的表格即預(yù)處理步驟完成后輸出的數(shù)據(jù)表。
3.1.2 線下異常檢測(cè)模型的建立與異常流量序列聚類
主成分分析(principal component analysis,PCA)是一種常用的機(jī)器學(xué)習(xí)算法,該算法可以自動(dòng)找到數(shù)據(jù)的比例中心,該中心代表數(shù)據(jù)的正??臻g。在建模階段,首先將3.1.1 小節(jié)得到的日志流量序列向量組作為輸入數(shù)據(jù),設(shè)輸入數(shù)據(jù)組成的矩陣為P,則使用PCA 異常檢測(cè)模型的目的是捕捉到轉(zhuǎn)換矩陣PPT中的主導(dǎo)模式,該模式可以計(jì)算出所有流量數(shù)據(jù)中的異常流量序列,具體比較方式是計(jì)算出每一個(gè)流量序列到正??臻g的距離,該距離越大,則代表這條流量序列更可能是一個(gè)異常。該距離的閾值使用文獻(xiàn)[6]中提出的Qα,該閾值即表示1-Qα置信水平下的SPE殘差函數(shù)公式。在建模階段,需要得出線下數(shù)據(jù)的異常流量序列向量,因此需要計(jì)算每條日志流量序列到正常子空間Sd的距離,該距離通過(guò)ya=(1-PPT)y計(jì)算,如果SPE=|ya|2>Qα,則標(biāo)記該條流量向量是異常的。為了進(jìn)行線上模型預(yù)測(cè),在這一步計(jì)算完成后將建立好的模型矩陣P以及異常判定分位點(diǎn)Qα保存下來(lái)。
根據(jù)歷史數(shù)據(jù)建立完成異常檢測(cè)模型后,可以初步篩選出異常的流量序列,但是這些序列直接進(jìn)行人工識(shí)別仍然會(huì)存在問(wèn)題,因?yàn)槊織l流量序列都包含多條日志以及各個(gè)節(jié)點(diǎn)的信息,這些日志流量代表的異常應(yīng)該進(jìn)一步聚類,以便人工分析。日志的流量實(shí)際上代表不同日志事件按順序出現(xiàn),因此繼續(xù)使用最長(zhǎng)公共子序列進(jìn)行兩條流量信息的相似度判定,只不過(guò)這次對(duì)比的最小單元是一種日志類型。這也符合實(shí)際的問(wèn)題設(shè)置,因?yàn)椴煌罩景凑枕樞虺霈F(xiàn)恰好是一種異常流量模式的體現(xiàn)。比如單獨(dú)出現(xiàn)一次T4(認(rèn)證失敗)類型的日志,可能是由于用戶不小心密碼輸入錯(cuò)誤引起的。但是如果在一定的時(shí)間片內(nèi),同一個(gè)主機(jī)頻繁出現(xiàn)T4(認(rèn)證失敗)類型日志、T10(密碼錯(cuò)誤)類型日志、T0(連接斷開(kāi))類型日志,則說(shuō)明該類型序列可能是一種暴力破解密碼進(jìn)行登錄的嘗試。
Fig.1 Flow chart of log preprocessing step圖1 日志預(yù)處理流程圖
基于以上考量,最終確定兩條日志流量序列的相似度計(jì)算公式如下所示:
其中,|*|代表類型序列* 的長(zhǎng)度,S1和S2分別代表兩個(gè)待比較流量序列,S代表這兩條流量序列的最長(zhǎng)公共子序列,比如圖2 所示的兩個(gè)日志流量序列S1=[T7,T11,T3,T2],S2=[T7,T11,T5,T6,T2]。則可得|S1|=4,|S2|=5,|S|=3,最后根據(jù)式(2)可計(jì)算出兩條日志流量序列的距離是d=3。
根據(jù)以上的距離計(jì)算公式,可以使用聚類算法對(duì)異常流量數(shù)據(jù)進(jìn)行聚類,最終可以將所有異常序列分成幾個(gè)小類,以便后續(xù)分析。
3.1.3 線下日志流量模型的建立
第3.1.2 小節(jié)介紹了如何將日志流量信息通過(guò)無(wú)監(jiān)督機(jī)器學(xué)習(xí)方法進(jìn)行異常篩選和聚類分析,最后將所有異常流量序列分成幾個(gè)小類。然而在實(shí)踐中,不可能將所有異常流量序列都保存下來(lái),因此本小節(jié)需要對(duì)每一類異常流量序列進(jìn)一步分析,并為其找到一個(gè)代表性流量序列,以便對(duì)該數(shù)據(jù)進(jìn)行持久化從而可以在后續(xù)線上運(yùn)行時(shí)進(jìn)行異常流量序列的匹配。
在對(duì)每一類異常流量進(jìn)行分析時(shí),考慮到流量本身是一個(gè)序列性數(shù)據(jù),為了能將單條流量數(shù)據(jù)映射到向量空間,需要將序列數(shù)據(jù)轉(zhuǎn)換為數(shù)量數(shù)據(jù)。在實(shí)際操作中,直接使用每條流量數(shù)據(jù)中每種類型日志出現(xiàn)的次數(shù)作為其數(shù)量化的結(jié)果,然后將所有流量數(shù)據(jù)都抽象成其數(shù)量化的結(jié)果并做成表格,如圖3 左上角所示,其中每一行代表一條流量數(shù)據(jù),每一列代表該類型日志出現(xiàn)的數(shù)目,該表格整體代表上一小節(jié)中分好類的其中一類異常流量數(shù)據(jù)的總體。下一步首先計(jì)算出表格中各個(gè)日志類型的平均值,然后遍歷該類型流量序列的所有數(shù)據(jù),計(jì)算每一個(gè)流量序列與平均值序列的距離,此時(shí)的距離公式可以直接使用歐幾里德距離。最后找到該距離最小的那條流量序列作為該類流量序列總體的代表。通過(guò)以上步驟得到的流量序列代表既滿足數(shù)量上靠近平均流量值,又滿足序列上的順序?qū)?yīng),因此結(jié)果滿足了問(wèn)題設(shè)定,總體流程如圖3 的上半部分所示。
在得到一類異常流量序列的代表后,按照上一小段介紹的方法循環(huán)所有異常流量序列類,最終就能為每一種異常流量序列類都對(duì)應(yīng)地找到一條流量序列代表,整個(gè)流程圖見(jiàn)圖3 的下半部分。之后即可將這些代表作為待匹配流量序列模式并保存,為后續(xù)線上異常檢測(cè)提供基礎(chǔ)。最終,為了進(jìn)行線上模型預(yù)測(cè),這一步計(jì)算完成后需要保存的數(shù)據(jù)是所有異常流量的序列代表集合Moed。
Fig.2 Flow chart of log flow anonymous detection and classification圖2 日志流量異常檢測(cè)與分類流程圖
Fig.3 Flow chart of selecting logs for flow exceptions圖3 流量異常代表日志挑選流程圖
第3.1節(jié)詳細(xì)介紹了如何進(jìn)行線下模型建模,表1展示了線下模型建立時(shí)得到的持久化數(shù)據(jù)。本節(jié)重點(diǎn)介紹如何進(jìn)行線上實(shí)時(shí)預(yù)測(cè)并顯示結(jié)果。在線上預(yù)測(cè)時(shí)可以分為兩個(gè)階段,預(yù)處理階段和異常匹配階段。
Table 1 Persistent data symbol,interpretation and corresponding sections表1 持久化數(shù)據(jù)符號(hào)、解釋以及對(duì)應(yīng)章節(jié)
3.2.1 預(yù)處理階段
線上的流量檢測(cè)是實(shí)時(shí)的,而在線下建立流量檢測(cè)模型時(shí)用已經(jīng)確定的時(shí)間片對(duì)日志進(jìn)行分割,因此在線上流量檢測(cè)時(shí)需要使用相同的時(shí)間間隔進(jìn)行處理,這樣才能保證線上檢測(cè)時(shí)流量數(shù)據(jù)適合線下建立的模型。在這種情況下,按照3.1 節(jié)中建模時(shí)的時(shí)間間隔搜集日志數(shù)據(jù)并得到單個(gè)時(shí)間片內(nèi)的所有日志后,還需要將其處理成適合模型的輸入向量,該向量的每一個(gè)位置代表不同日志類型在該時(shí)間片內(nèi)出現(xiàn)的次數(shù),為了保證向量數(shù)據(jù)的一致性,日志類型的位置要與模型建立時(shí)日志類型的順序一致。這里匹配單條日志的方法是將該單條日志與Pattern文件中的所有日志模式遍歷并分別進(jìn)行相似度的計(jì)算,計(jì)算公式見(jiàn)3.1.1 小節(jié)中的式(1),計(jì)算時(shí)如果相似度的結(jié)果大于閾值0.5,即將該日志作為此類型,并在向量的對(duì)應(yīng)類型數(shù)據(jù)上加1,如果所有計(jì)算結(jié)果都不到0.5,則將計(jì)算得到的相似度最高結(jié)果對(duì)應(yīng)的日志類型作為該條日志的實(shí)際類型。按照這樣的處理方式,即可得到該時(shí)間片的日志流量向量,最后將預(yù)處理得到的向量設(shè)為V。
3.2.2 異常匹配階段
在異常匹配階段,首先讀取線下建模時(shí)保存的矩陣P和閾值Qα,然后將3.2.1 小節(jié)得到的向量V與矩陣P進(jìn)行異常分?jǐn)?shù)的計(jì)算,即Score=(1-PPT)V。該異常分?jǐn)?shù)和閾值進(jìn)行比較即可得出此流量是否異常,即如果Score>Qα,則認(rèn)為該流量時(shí)間片為異常。
另外,每一個(gè)流量序列還需要和實(shí)際的異常模式進(jìn)行對(duì)比,來(lái)確定異常的種類。在實(shí)踐中,先將該條流量序列的所有數(shù)據(jù)按照節(jié)點(diǎn)分開(kāi),然后將得到的每一個(gè)節(jié)點(diǎn)的流量序列數(shù)據(jù)分別和流量模式文件Moed中的每個(gè)流量序列模式進(jìn)行匹配,匹配時(shí)使用式(1)進(jìn)行計(jì)算并得到單個(gè)節(jié)點(diǎn)在該時(shí)間片的流量和每種異常流量的相似度,然后將結(jié)果保存。在進(jìn)行異常評(píng)價(jià)時(shí),使用其中相似度最大的結(jié)果并記作Score。
目前已經(jīng)得到了線上診斷時(shí)一個(gè)流量時(shí)間片所需的所有數(shù)據(jù):?jiǎn)蝹€(gè)流量時(shí)間片的異常分?jǐn)?shù)Score和閾值Qα,該流量時(shí)間片內(nèi)所有主機(jī)對(duì)應(yīng)的異常相似度列表以及其中最大的相似度Sim。最后需要將這些結(jié)果進(jìn)行疊加并能夠清晰地展示給相關(guān)運(yùn)維人員,具體細(xì)節(jié)將在下一章的實(shí)驗(yàn)部分介紹。
本章將第3 章介紹的方法用于國(guó)家高性能計(jì)算環(huán)境系統(tǒng)在實(shí)際工作中產(chǎn)生的系統(tǒng)日志中。選取系統(tǒng)日志的secure 類別日志作為實(shí)驗(yàn)數(shù)據(jù)。在第一階段使用了2018 年9 月的日志數(shù)據(jù)進(jìn)行線下模型的建立,并得出異?;€以及異常流量模式數(shù)據(jù),在第二階段將2018 年10 月的日志作為線上測(cè)試數(shù)據(jù),進(jìn)行實(shí)際的流量分析診斷,下面詳細(xì)介紹實(shí)驗(yàn)結(jié)果。
在使用日志數(shù)據(jù)進(jìn)行線下模型建立時(shí)按照3.1節(jié)所描述的方法進(jìn)行,首先計(jì)算出各個(gè)時(shí)間片的Q值,然后和模型的閾值Qα比較,如果大于閾值則認(rèn)為該時(shí)間片是異常時(shí)間片。各個(gè)時(shí)間片的Q值和閾值Qα如圖4 所示。
Fig.4 Q-value and threshold Qα of secure logs圖4 secure類型日志的Q 值和閾值Qα
從圖4 可以看出,異常類型時(shí)間片均勻地分布在整個(gè)日志周期的時(shí)間片內(nèi)。得到所有正異常流量時(shí)間片后,還需要進(jìn)一步過(guò)濾,具體的做法是首先統(tǒng)計(jì)出正常、異常時(shí)間片中不同類型日志出現(xiàn)數(shù)量的分布,計(jì)算出其對(duì)應(yīng)正常、異常日志和出現(xiàn)數(shù)量的中位數(shù)來(lái)進(jìn)行后續(xù)比較。根據(jù)比較的差值來(lái)得出正常、異常時(shí)間片主要差異的日志類型。通過(guò)該差異進(jìn)行了過(guò)濾。最終統(tǒng)計(jì)得出了一共有8 134 個(gè)時(shí)間片段,挑出了908 個(gè)異常時(shí)間片段,時(shí)間片按照節(jié)點(diǎn)拆分后得到了16 240 條異常節(jié)點(diǎn)的類型序列,過(guò)濾后有676條異常節(jié)點(diǎn)的類型序列。
在本節(jié)中,將4.1 節(jié)得到的大量異常日志流量序列按照3.1.2 小節(jié)的方法進(jìn)行層次聚類的相關(guān)實(shí)驗(yàn)。在進(jìn)行層次聚類時(shí),需要根據(jù)聚類結(jié)果的好壞來(lái)調(diào)整聚類參數(shù),因此這里首先要選擇一種判別聚類方法性能的評(píng)價(jià)指標(biāo),由于應(yīng)用的場(chǎng)景是高性能計(jì)算環(huán)境中的日志,數(shù)據(jù)量大并且模型每隔一段時(shí)間都需要更新重建,因此無(wú)法事先人工打好聚類標(biāo)簽,整個(gè)過(guò)程需要使用完全無(wú)監(jiān)督的方式進(jìn)行??紤]到上述因素,這里選擇使用適合于無(wú)監(jiān)督的聚類評(píng)價(jià)方式,輪廓系數(shù)(silhouette coefficient)法[16]。該方法結(jié)合內(nèi)聚度和分離度兩種因素,其中輪廓系數(shù)得分較高的模型具有較好的聚類性能。單個(gè)樣本的輪廓系數(shù)計(jì)算公式如下:
其中,a代表樣本與同類數(shù)據(jù)中所有其他點(diǎn)之間的平均距離。b代表樣本與下一個(gè)最近聚類簇中所有其他點(diǎn)之間的平均距離。最終整體的輪廓系數(shù)是計(jì)算出所有樣本的輪廓系數(shù)后取平均值得到的,因此輪廓系數(shù)得分越高,說(shuō)明此時(shí)的聚類結(jié)果使得同一種類之間聚集得比較緊密,同時(shí)不同的類之間聚集得比較遠(yuǎn),因此可以判定此時(shí)的聚類效果較好。
在使用層次聚類時(shí)有三個(gè)關(guān)鍵參數(shù)需要定義:(1)不同數(shù)據(jù)之間的距離度量方法;(2)不同簇之間的距離度量方法;(3)最終的聚類數(shù)目。不同數(shù)據(jù)之間距離定義按照3.1.2 小節(jié)的式(2)進(jìn)行計(jì)算。不同簇間距離度量方法具有三種不同的選擇,分別為:平均距離標(biāo)準(zhǔn)方法(average)、最小距離標(biāo)準(zhǔn)方法(single)和最大距離標(biāo)準(zhǔn)方法(complete)。在對(duì)聚類數(shù)目進(jìn)行選擇時(shí),考慮到聚類的數(shù)目不能太多,因此就將實(shí)驗(yàn)區(qū)間定義為3 到30種聚類數(shù)目。按照上述描述的結(jié)果,分別對(duì)不同的情況進(jìn)行聚類實(shí)驗(yàn),并計(jì)算出對(duì)應(yīng)聚類結(jié)果的輪廓系數(shù)。最終實(shí)驗(yàn)結(jié)果圖如圖5 所示。
如圖5 所示,橫坐標(biāo)代表不同聚類數(shù)目,縱坐標(biāo)代表輪廓系數(shù)值,3 條折線代表不同的簇間距離度量方法。根據(jù)實(shí)驗(yàn)結(jié)果,程序可以自動(dòng)選擇對(duì)應(yīng)最佳的參數(shù)。例如實(shí)驗(yàn)中使用的線下數(shù)據(jù)最終的最佳參數(shù)是:聚類的簇間度量方法是最大距離標(biāo)準(zhǔn)方法(complete),聚類數(shù)目是3。根據(jù)上述參數(shù),程序最終進(jìn)行聚類后顯示出3種異常情景:
Fig.5 Silhouette coefficient for different parameters圖5 不同參數(shù)對(duì)應(yīng)的輪廓系數(shù)值
情景1 該情景下出現(xiàn)最多的日志類型是T10(failed password for invalid user User0 from X.X.X.X port XX ssh2)和T4(pam_unix(sshd:auth):authentication failure; logname=uid=0 euid=0 tty=ssh ruser=rhost=X.X.X.X)。該種異常日志流量模式表明此時(shí)間段內(nèi)可能有人進(jìn)行暴力入侵系統(tǒng)的行為。
情景2 該情景下出現(xiàn)最多的日志類型是T14(sshd*pam_unix(sshd:session):session opened for user User1 by (uid=0))和T13(sshd*Accepted publickey for User1 from X.X.X.X port XX ssh2)。該種異常日志流量模式表明此時(shí)間段內(nèi)出現(xiàn)大量登錄的行為,說(shuō)明該段時(shí)間為用戶訪問(wèn)高峰。
情景3 該情景下出現(xiàn)最多的日志類型是T39(sshd*error:no more sessions)和T0(sshd*Connection closed by::1)。該種異常日志流量模式表明該時(shí)間段內(nèi)建立用戶會(huì)話數(shù)量超過(guò)限制,可能需要人工干預(yù)。
分別將這些情景定義為非法用戶攻擊、用戶訪問(wèn)高峰、會(huì)話數(shù)超限,并將這些模式結(jié)果保存。
在實(shí)踐中已經(jīng)完成了線上異常檢測(cè)程序的整體搭建與運(yùn)行,整個(gè)流程分為兩個(gè)階段。
第一階段目標(biāo)是完成線上日志的類型解析,該階段需要在程序中輸入線下模型日志的路徑和線上待分析日志的路徑,然后才能進(jìn)行解析,已經(jīng)完成了該階段的界面輸入以及正確的日志解析結(jié)果,如圖6所示。解析完成后就得到了待分析日志按時(shí)間片拆分后的日志類型序列。
第二階段需要完成的工作是待分析日志的實(shí)時(shí)預(yù)警以及分析結(jié)果的可視化展示。在3.2.2 小節(jié)中,已經(jīng)構(gòu)建好了異常實(shí)時(shí)監(jiān)測(cè)模型并計(jì)算出異常結(jié)果Score、Qα以及Sim,為了將這些異常結(jié)果利于可視化展示,需要將結(jié)果進(jìn)行合并,其中異常流量的結(jié)果可能會(huì)超過(guò)異常值比較多的比率,因此在計(jì)算時(shí)使用比值的方式,即Score/Qα,而異常相似度的Sim本身的值在0 到1 之間,因此可以直接乘以流量的異常來(lái)表示在該流量異常的情況下節(jié)點(diǎn)的流量為對(duì)應(yīng)異常模式的可能性。最終,確定的異常分?jǐn)?shù)計(jì)算公式如下:
通過(guò)式(4)進(jìn)行流量分?jǐn)?shù)的計(jì)算并將該值的大小進(jìn)行可視化展示,其中顏色越深代表該值越大。其中一個(gè)時(shí)間片內(nèi)異常的分?jǐn)?shù)如圖7 所示。
Fig.6 Parsing of online code圖6 線上代碼解析
Fig.7 Anonymous score圖7 異常分?jǐn)?shù)
圖7 的橫坐標(biāo)代表不同的時(shí)間片,縱坐標(biāo)代表不同的節(jié)點(diǎn)。該圖在實(shí)際運(yùn)行時(shí)會(huì)根據(jù)時(shí)間流逝動(dòng)態(tài)地向左運(yùn)動(dòng),這里僅截取一小部分作為代表。如圖7所示,線上檢測(cè)時(shí)根據(jù)式(4)計(jì)算出的各個(gè)時(shí)間片的異常分?jǐn)?shù)值可以明顯地展示出來(lái):如果該時(shí)間片的流量有異常,則整體都會(huì)顯示出深色,其中和異常流量模式匹配的相似度最高的節(jié)點(diǎn)顏色最深。此時(shí)如果點(diǎn)擊該節(jié)點(diǎn)的時(shí)間片,則可以顯示出各種異常流量相似度的具體信息,如圖7 中左上角的黑色框所示。然后系統(tǒng)運(yùn)維人員還可以進(jìn)一步調(diào)出該節(jié)點(diǎn)在該時(shí)間片內(nèi)的所有日志,通過(guò)真實(shí)日志的跟蹤顯示給出進(jìn)一步分析。該可視化的結(jié)果以及異常情景的自動(dòng)化匹配大大減少了人工工作量。在實(shí)際工作中,由于模型是根據(jù)歷史數(shù)據(jù)訓(xùn)練并構(gòu)建的,在進(jìn)行檢測(cè)時(shí)可能出現(xiàn)新的異常流量模式,因此采用的策略是間隔一段時(shí)間使用新搜集的數(shù)據(jù)進(jìn)行模型的迭代更新。
該系統(tǒng)已全部搭建完成,并已在網(wǎng)上(http://114.115.172.217/online)公布了示例程序。
本文介紹了一個(gè)無(wú)監(jiān)督異常檢測(cè)系統(tǒng),該系統(tǒng)自動(dòng)挖掘系統(tǒng)日志的異常日志流量模式。系統(tǒng)的整個(gè)流程可以自動(dòng)找到系統(tǒng)日志的異常時(shí)間段,并得到時(shí)間段內(nèi)不同節(jié)點(diǎn)的日志序列。該序列通過(guò)進(jìn)一步聚類可以自動(dòng)得到異常情景模式序列并保存,之后還可以在線上實(shí)時(shí)進(jìn)行檢測(cè),最終檢測(cè)的結(jié)果可以實(shí)時(shí)顯示,使得系統(tǒng)運(yùn)維人員可以方便地進(jìn)行分析。
本文只是針對(duì)單一日志異常流量進(jìn)行了一些前期探索工作,未來(lái)還有很多值得關(guān)注的研究點(diǎn)。今后的工作主要針對(duì)以下幾個(gè)方面:不同種類的日志,通過(guò)不同種類日志的關(guān)聯(lián)關(guān)系進(jìn)行分析,以找到更全面的異常日志流量模式;基于日志類型序列的角度進(jìn)行更多不同維度的日志分析方法研究,例如日志類型序列的關(guān)聯(lián)性分析等。