任 明,宋云奎
(1.中國(guó)銀聯(lián)股份有限公司,上海 201201;2.中國(guó)科學(xué)院軟件研究所,北京 100190)
隨著計(jì)算技術(shù)的發(fā)展,大量在線服務(wù)和關(guān)鍵任務(wù)依賴于異構(gòu)的云計(jì)算系統(tǒng)來(lái)完成,最小化這些系統(tǒng)的停機(jī)時(shí)間非常重要[1]。控制臺(tái)日志記錄了云計(jì)算系統(tǒng)的操作狀態(tài)和事件,并且具有豐富的描述性信息。當(dāng)前,日志分析的相關(guān)研究主要集中在系統(tǒng)異常檢測(cè)與診斷領(lǐng)域,目的是快速檢測(cè)出異常發(fā)生時(shí)的信號(hào),并確定異常的根本原因[2]。云計(jì)算環(huán)境下,基于日志的異常檢測(cè)的挑戰(zhàn)是實(shí)現(xiàn)在可接受的性能條件下,處理分析大量系統(tǒng)特征[3]。另一個(gè)挑戰(zhàn)是,需要面對(duì)異構(gòu)計(jì)算系統(tǒng)以處理大量異構(gòu)日志信息[4]。
為了解決以上兩個(gè)問(wèn)題,提出一種基于文本挖掘和深度學(xué)習(xí)的異構(gòu)日志分析方法,從控制臺(tái)日志中提取通用特征,建模為時(shí)序深度神經(jīng)網(wǎng)絡(luò),以執(zhí)行異常檢測(cè)。首先從異構(gòu)日志中學(xué)習(xí)日志格式,將相似的日志聚在一起,并提取日志集合的模式。然后,基于這些模式提取隨時(shí)間推移的順序特征,以縮減特征維度。最后,將異常檢測(cè)抽象化為序列分類問(wèn)題,編碼日志特征并映射到低維向量空間中,通過(guò)LSTM(long short-term memory)[5]進(jìn)行異常檢測(cè)。
控制臺(tái)日志通常是由不同的應(yīng)用程序或服務(wù)生成,因此日志具有異構(gòu)性,表現(xiàn)為多樣化和不均衡的單詞分布。這就使得傳統(tǒng)的文本挖掘方法(如主題建模)從云計(jì)算系統(tǒng)的控制臺(tái)日志中提取有意義的特征面臨挑戰(zhàn)[6]。雖然控制臺(tái)日志記錄了云計(jì)算系統(tǒng)的健康狀態(tài)信息,但現(xiàn)有的系統(tǒng)管理技術(shù)主要在出現(xiàn)問(wèn)題后分析錯(cuò)誤[7]??刂婆_(tái)日志通常是由應(yīng)用程序源代碼中定義的模板生成,因此具有預(yù)定義的格式[8]。此外,在應(yīng)用程序運(yùn)行過(guò)程中,日志常常是多余的。找到規(guī)則的格式來(lái)表示一組類似的日志有助于減少冗余,不丟失重要信息,并總結(jié)日志數(shù)據(jù)的含義?,F(xiàn)有工作分析源代碼以建立日志的常規(guī)格式,但該類方法只能在源代碼應(yīng)用,不能將不同編程語(yǔ)言和日志樣式的應(yīng)用程序的異構(gòu)日志進(jìn)行混合。文中提出了一種通用的日志模式學(xué)習(xí)方法,以捕獲日志結(jié)構(gòu)和每個(gè)日志字段的語(yǔ)義。模式定義為日志的語(yǔ)法結(jié)構(gòu),即具有相似格式和內(nèi)容的日志可以歸為一種模式。自動(dòng)識(shí)別控制臺(tái)日志語(yǔ)法結(jié)構(gòu)的步驟包括:
(1)日志信息和時(shí)間戳標(biāo)準(zhǔn)化。
對(duì)日志數(shù)據(jù)進(jìn)行標(biāo)記以識(shí)別和檢索每個(gè)日志記錄的單詞或短語(yǔ)的基本信息。但是,來(lái)自不同應(yīng)用程序和系統(tǒng)的異構(gòu)日志有不同的格式以及分隔符。如果沒(méi)有特定的知識(shí)或人工檢查,為所有異構(gòu)日志數(shù)據(jù)集預(yù)先定義相同的分隔符會(huì)很不公平,因此,應(yīng)該使用通用的分隔符,以避免符號(hào)間的干擾。文中將空格作為分隔符,用來(lái)分開(kāi)除了數(shù)字之外的所有單詞和特殊符號(hào)。異構(gòu)日志可以有許多不同類型的時(shí)間戳格式,文中在日志中檢測(cè)所有的時(shí)間戳并將其轉(zhuǎn)換為標(biāo)準(zhǔn)格式(yyyyy/MM/DD HH:MM:SS)。
(2)日志聚類。
由于沒(méi)有日志格式、用法和來(lái)源等方面的領(lǐng)域知識(shí),理解和分析異構(gòu)日志首先需要理解日志數(shù)據(jù)的語(yǔ)法結(jié)構(gòu)。聚類算法基于數(shù)據(jù)內(nèi)在屬性和關(guān)系,對(duì)數(shù)據(jù)實(shí)例進(jìn)行分類。因此,文中將聚類算法應(yīng)用于異構(gòu)日志,以獲得數(shù)據(jù)的初始化“視圖”。采用分層聚類生成異構(gòu)日志的層次結(jié)構(gòu),提供了多粒度的數(shù)據(jù)視圖,根據(jù)位置將日志從粗到細(xì)粒度組織成樹(shù)結(jié)構(gòu)。同時(shí),數(shù)據(jù)索引和搜索是建立在分層樹(shù)結(jié)構(gòu)基礎(chǔ)上,以達(dá)到提高效率的目的。文中使用的分層樹(shù)結(jié)構(gòu)利用OPTIC[9]聚類方法。OPTIC通過(guò)從一個(gè)特定的數(shù)據(jù)點(diǎn)向所有鄰近的數(shù)據(jù)點(diǎn)擴(kuò)展,從而搜索密集的數(shù)據(jù)區(qū)域,這些數(shù)據(jù)點(diǎn)在一個(gè)預(yù)定義的閾值下足夠接近。聚類算法根據(jù)數(shù)據(jù)點(diǎn)排序生成層次化的聚類結(jié)構(gòu),將較為稀疏的數(shù)據(jù)區(qū)域內(nèi)的密集數(shù)據(jù)區(qū)域作為聚類,形成較稀疏區(qū)域的子聚類。OPTIC具有兩個(gè)參數(shù)eps和min-points,其中eps指定聚類的最大寬度,min-points控制有效聚類需要包含的最小樣本數(shù)量。
(3)模式識(shí)別與匹配。
在對(duì)日志數(shù)據(jù)進(jìn)行聚類之后,生成異構(gòu)日志的整體語(yǔ)法結(jié)構(gòu),但仍然需要在每個(gè)聚類中獲得具體模式。由于在每個(gè)聚類中,日志記錄具有相似的格式,在聚類中使用序列比對(duì)進(jìn)行模式識(shí)別。模式識(shí)別首先在葉節(jié)點(diǎn)中完成,然后從葉子向后傳播到根節(jié)點(diǎn)。在生成日志模式后,需要對(duì)輸入的異構(gòu)日志進(jìn)行解析,文中將這些模式表示為正則表達(dá)式。任何輸入日志都將與提取的日志模式,即正則表達(dá)式匹配,如果不能匹配,則生成異常值。
(4)特征表示。
使用提取的模式解析輸入日志,將日志映射到一個(gè)模式。文中提取模式的集合,計(jì)算每個(gè)模式的頻率,而不是簡(jiǎn)單搜集時(shí)間間隔(t,t+Δt)的日志數(shù)據(jù)。選擇合適的時(shí)間間隔Δt,首先需要降級(jí)特征表示的稀疏性,同時(shí)使用較小的時(shí)間粒度來(lái)進(jìn)行更精細(xì)的檢測(cè)。借鑒TF-IDF思想,從日志中提取合適的特征。TF-IDF在信息檢索和文本挖掘中表示文檔的特征。文中將每種模式作為一個(gè)詞,而發(fā)生在時(shí)間階段(t,t+Δt)之間的眾多模式作為一個(gè)文檔。
TFIDF(pi,et,E)=TF(pi,et)×IDF(pi,E)
(1)
(2)
IDF(pi,E)=log(|E|/(1+|pi∈
E,f(pi,et)≠0|))
(3)
其中,pi為模式;et為時(shí)間周期模式集合;E為全部時(shí)間監(jiān)測(cè)集合;f(pi,et)為模式pi在時(shí)間周期et中出現(xiàn)的頻率;|E|為時(shí)間周期的數(shù)量;|pi∈E,f(pi,et)≠0|為出現(xiàn)模式pi的時(shí)間周期的數(shù)量。
云計(jì)算系統(tǒng)異常檢測(cè)問(wèn)題定義為:給定云計(jì)算系統(tǒng)組件為K,控制臺(tái)日志集合為L(zhǎng)(K),推斷在時(shí)間窗口W內(nèi)發(fā)生異常的概率為P(W)。輸入是長(zhǎng)度為L(zhǎng)的歷史特征序列:(xt-L+1,…,xt-1,xt);目標(biāo)是二元向量dt:在t時(shí)刻的檢測(cè)期內(nèi)發(fā)出報(bào)警以及不在檢測(cè)期內(nèi)未發(fā)出警報(bào)取值為“P”,否則取值為“N”。學(xué)習(xí)模型輸出報(bào)警概率,如果這種概率超過(guò)預(yù)先定義的閾值,就會(huì)發(fā)出報(bào)警。文中將該問(wèn)題抽象為基于監(jiān)督學(xué)習(xí)的二元分類問(wèn)題,其中監(jiān)督學(xué)習(xí)模型的訓(xùn)練數(shù)據(jù)包括從各種云計(jì)算系統(tǒng)的控制臺(tái)日志中提取的特征和系統(tǒng)管理員提供的異常標(biāo)簽,檢測(cè)任務(wù)的主要目標(biāo)是在異常發(fā)生之前發(fā)出警報(bào)。將異常檢測(cè)過(guò)程分為預(yù)測(cè)期和感染期兩個(gè)階段。預(yù)測(cè)期是在異常發(fā)生之前預(yù)定義的時(shí)間段,從報(bào)警時(shí)間到異常開(kāi)始時(shí)間,即定義的時(shí)間窗口W,在此期間給管理員發(fā)出警報(bào),以提供足夠的時(shí)間來(lái)采取行動(dòng)。感染期是在異常發(fā)生之后預(yù)先定義的時(shí)間,從組件發(fā)生異常時(shí)會(huì)持續(xù)到問(wèn)題被修復(fù),恢復(fù)到正常狀態(tài)。
將歷史特征向量序列作為輸入,使用檢測(cè)模型對(duì)當(dāng)前特征向量進(jìn)行分析,輸出即將發(fā)生異常的概率。如果概率超過(guò)了預(yù)先定義的閾值,那么在不久之后就會(huì)發(fā)出預(yù)警信號(hào)。早期的警報(bào)信號(hào)通常很弱,因此很難使用簡(jiǎn)單的模型來(lái)捕獲。計(jì)算機(jī)系統(tǒng)具有時(shí)序動(dòng)態(tài)性,隨后的狀態(tài)取決于長(zhǎng)期的歷史趨勢(shì)。傳統(tǒng)的監(jiān)督學(xué)習(xí)方法,如邏輯回歸、SVM和基于樹(shù)的分類器,僅僅將輸入序列視為獨(dú)立的特性,不能捕獲輸入之間的時(shí)間依賴關(guān)系。文中應(yīng)用遞歸神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)以生成和標(biāo)記序列。網(wǎng)絡(luò)的內(nèi)部狀態(tài)不僅依賴于當(dāng)前的輸入,而且還依賴于以前的系統(tǒng)狀態(tài)。然而,傳統(tǒng)的RNN不能存儲(chǔ)很長(zhǎng)時(shí)間以前的輸入信息,削弱了其建模輸入序列長(zhǎng)期結(jié)構(gòu)的能力。LSTM使用RNN架構(gòu),并改進(jìn)存儲(chǔ)和訪問(wèn)信息,通過(guò)引入內(nèi)存單元[10]來(lái)存儲(chǔ)以前的時(shí)間步驟的信息,以解決長(zhǎng)期依賴關(guān)系的問(wèn)題。由于計(jì)算系統(tǒng)異常檢測(cè)存在很強(qiáng)的時(shí)間依賴性,文中基于LSTM網(wǎng)絡(luò)以建模計(jì)算機(jī)系統(tǒng)的動(dòng)態(tài)性。
在遞歸神經(jīng)網(wǎng)絡(luò)的檢測(cè)架構(gòu)中,輸入特征向量序列x=(xt-L+1,…,xt-1,xt)的序列長(zhǎng)度為L(zhǎng)2,傳遞給由多個(gè)循環(huán)加權(quán)連接構(gòu)成的隱藏層,以計(jì)算隱藏向量序列h=(ht-L+1,…,ht),輸出向量序列y=(yt-L+1,…,yt)。輸出向量yt可以用來(lái)參數(shù)化目標(biāo)dt的概率分布Pr(dt|yt)。在LSTM內(nèi)存單元的結(jié)構(gòu)中,內(nèi)存單元的訪問(wèn)由“輸入”、“輸出”和“遺忘”門組成。存儲(chǔ)在內(nèi)存單元中的信息可以在LSTM中獲得比傳統(tǒng)RNN更長(zhǎng)的時(shí)間,這使得模型更加關(guān)注于上下文。問(wèn)題形式化為二分類問(wèn)題,即目標(biāo)dt是二元向量以表示兩類數(shù)據(jù)。檢測(cè)網(wǎng)絡(luò)的輸出yt是一個(gè)二進(jìn)制向量,以表示系統(tǒng)狀態(tài),文中使用其估計(jì)二項(xiàng)分布Pr(dt|yt),可以通過(guò)輸出層的Softmax函數(shù)來(lái)參數(shù)化:
(4)
對(duì)于目標(biāo)函數(shù),文中使用二進(jìn)制的交叉熵代價(jià)函數(shù)訓(xùn)練:
(5)
實(shí)驗(yàn)數(shù)據(jù)集來(lái)自某在線交易系統(tǒng)中Web服務(wù)器集群的日志記錄。每個(gè)集群由多個(gè)組件組成,包含各種類型的應(yīng)用程序。當(dāng)系統(tǒng)管理員發(fā)現(xiàn)問(wèn)題時(shí),會(huì)記錄該系統(tǒng)異常,分散在整個(gè)監(jiān)測(cè)期間。首先將歷史日志的時(shí)間序列離散化,其中每個(gè)時(shí)間段(Δt=10分鐘)的日志作為一個(gè)文檔。將數(shù)據(jù)集劃分為時(shí)間順序的訓(xùn)練集和測(cè)試集,其中訓(xùn)練集包括前3/5時(shí)間,其余2/5時(shí)間用于測(cè)試。設(shè)置參數(shù)eps=0.14和min_points=8,設(shè)定提取模式的正則表達(dá)式模式,然后對(duì)每個(gè)日志匹配模式。構(gòu)建基于模式的TF-IDF特征向量,利用特征向量來(lái)檢測(cè)系統(tǒng)異常。在訓(xùn)練階段,所有檢測(cè)期的實(shí)例都被認(rèn)為是正常的,而丟棄出現(xiàn)異常的實(shí)例。
文中將深度學(xué)習(xí)方法(即LSTM)與監(jiān)督學(xué)習(xí)方法,包括邏輯回歸、支持向量機(jī)和隨機(jī)森林進(jìn)行實(shí)驗(yàn)對(duì)比。邏輯回歸線性搜索懲罰參數(shù),并報(bào)告最佳性能;SVM使用線性內(nèi)核的LIBSVM包[11];隨機(jī)森林設(shè)置樹(shù)的數(shù)目和隨機(jī)抽取變量的數(shù)量來(lái)構(gòu)建樹(shù)[12]。文中使用LSTM,首先建立相對(duì)較小的LSTM網(wǎng)絡(luò),每個(gè)層有2個(gè)隱藏層和24個(gè)隱藏單元[13]。將所有的權(quán)重參數(shù)均勻初始化在范圍[-0.1,0.1],同時(shí)初始化LSTM遺忘門,設(shè)置偏差值為1.2。然后,用批量大小為3的預(yù)參數(shù)自適應(yīng)更新,使用小批量隨機(jī)梯度下降對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,基礎(chǔ)學(xué)習(xí)速率為10,衰變因子0.9。對(duì)每個(gè)模型進(jìn)行15個(gè)周期的訓(xùn)練,并將其與衰減因子0.9相乘,每增加一個(gè)新時(shí)期,將基礎(chǔ)學(xué)習(xí)速率乘以8。由于數(shù)據(jù)集高度不平衡,損失函數(shù)設(shè)為0.95。考慮以下三個(gè)性能評(píng)價(jià)指標(biāo):
(1)AUC:等于精確率和召回率乘積,計(jì)算(精確率,召回率)對(duì),可以得到AUC曲線,曲線下方的面積越大,表明準(zhǔn)確率和召回率越高,方法效果越好。
(2)檢測(cè)間隔:在檢測(cè)期間,模型最早能夠正確報(bào)警的時(shí)間,警報(bào)和異常的起始時(shí)間之間的時(shí)間差越大,系統(tǒng)管理員能夠診斷和防止即將出現(xiàn)的異常的可能性就越大。
(3)檢測(cè)頻率:在檢測(cè)期間,所檢測(cè)并報(bào)告為警報(bào)的時(shí)間比例,更高頻率報(bào)警,確定檢測(cè)為異常的概率越高。
圖1給出了不同序列長(zhǎng)度下精確率和召回率曲線下的面積。實(shí)驗(yàn)結(jié)果表明,LSTM優(yōu)于傳統(tǒng)的logistic回歸、SVM和隨機(jī)森林。同時(shí),序列長(zhǎng)度從1增加到2對(duì)異常檢測(cè)效果有很大提高,但更長(zhǎng)的序列長(zhǎng)度并不能大幅度提升模型。因?yàn)閭鹘y(tǒng)模型假定輸入特性序列之間是獨(dú)立的,不考慮序列中各點(diǎn)之間的依賴關(guān)系,而LSTM能夠捕獲特征時(shí)間序列之間的時(shí)間依賴關(guān)系。
圖1 多種異常檢測(cè)方法效果比較
圖2給出了隨著序列長(zhǎng)度的增加,LSTM檢測(cè)效果的變化。實(shí)驗(yàn)結(jié)果表明,較長(zhǎng)的序列并不能提高異常檢測(cè)的性能,這是由于早期預(yù)警信號(hào)可能與之前的幾個(gè)鄰近階段相關(guān)。平均可檢測(cè)間隔的大小表明,早期的警報(bào)信號(hào)發(fā)生在異常開(kāi)始接近的時(shí)間。
圖2 不同序列長(zhǎng)度的檢測(cè)效果變化
圖3給出了隨著訓(xùn)練時(shí)間的增加,訓(xùn)練的學(xué)習(xí)曲線和檢驗(yàn)性能的變化。實(shí)驗(yàn)結(jié)果表明,測(cè)試的性能在訓(xùn)練的第20個(gè)階段達(dá)到了頂峰,因此,需要監(jiān)測(cè)訓(xùn)練性能的變化,及時(shí)停止訓(xùn)練,以避免模型過(guò)度擬合。
圖3 異常檢測(cè)性能變化
提出了一種云計(jì)算系統(tǒng)的日志驅(qū)動(dòng)的異常檢測(cè)方法,從流式日志數(shù)據(jù)中自動(dòng)提取系統(tǒng)狀態(tài)特征,發(fā)現(xiàn)歷史數(shù)據(jù)中的日志語(yǔ)法結(jié)構(gòu),并通過(guò)LSTM方法實(shí)現(xiàn)早期的異常檢測(cè)。下一步將研究在線深度學(xué)習(xí)機(jī)制,使用不斷增加的異常事件來(lái)動(dòng)態(tài)更新模型。