馮士龍,臺(tái)憲青,馬治杰
(1.中國(guó)科學(xué)院 物聯(lián)網(wǎng)研究發(fā)展中心 數(shù)據(jù)與服務(wù)研發(fā)中心,江蘇 無(wú)錫 214135;2.中國(guó)科學(xué)院大學(xué) 微電子學(xué)院,北京 101407;3.中國(guó)科學(xué)院 電子學(xué)研究所 蘇州研究院地理空間信息系統(tǒng)研究室,江蘇 蘇州 215121)
現(xiàn)如今,隨著分布式系統(tǒng)規(guī)模的不斷擴(kuò)大,其復(fù)雜性也越來(lái)越高,因此給運(yùn)維人員維護(hù)系統(tǒng)正常運(yùn)行帶來(lái)了嚴(yán)峻的挑戰(zhàn)[1]。系統(tǒng)運(yùn)維人員通常利用系統(tǒng)產(chǎn)生的運(yùn)行日志來(lái)定位異常,但由于分布式系統(tǒng)產(chǎn)生的日志量較大,并且不同的系統(tǒng)會(huì)采用不同的容錯(cuò)機(jī)制[2],人工檢索的方法耗時(shí)耗力。近些年隨著非結(jié)構(gòu)化日志解析方法[3-5]和機(jī)器學(xué)習(xí)的發(fā)展,基于機(jī)器學(xué)習(xí)的日志異常檢測(cè)方法成為了一個(gè)研究重點(diǎn)。
基于機(jī)器學(xué)習(xí)的日志異常檢測(cè)方法包括基于監(jiān)督學(xué)習(xí)和基于無(wú)監(jiān)督學(xué)習(xí)兩種?;诒O(jiān)督學(xué)習(xí)的方法[6-8]的優(yōu)點(diǎn)是檢測(cè)精確,但是需要使用提前進(jìn)行標(biāo)記的訓(xùn)練集進(jìn)行模型的訓(xùn)練,不適合實(shí)際生產(chǎn)環(huán)境。在無(wú)監(jiān)督學(xué)習(xí)的方法中,基于主成分分析(principal components analysis,PCA)[9]和Invariants Ming[10]是兩種比較典型的方法。然而,由于前者對(duì)數(shù)據(jù)非常敏感,導(dǎo)致其檢測(cè)的精度隨數(shù)據(jù)集的不同變化差異比較大;而后者是一種能夠保證異常檢測(cè)準(zhǔn)確度的方法,但是其檢測(cè)過(guò)程十分耗時(shí)。因此,這兩種方法在實(shí)際異常檢測(cè)中效果并不理想。LogCluster[2]是一種基于日志聚類的異常檢測(cè)方法。它既能快速的處理大量日志數(shù)據(jù),也能保證異常檢測(cè)的精度的檢測(cè)。但是LogCluster方法使用會(huì)話窗口的方式對(duì)日志進(jìn)行分組,使得該方法只能檢測(cè)帶標(biāo)記符的日志,限制了方法的適用性。
針對(duì)LogCluster方法的局限性,本文提出了一種改進(jìn)的基于LogCluster的異常檢測(cè)方法,通過(guò)使用滑動(dòng)窗口的方式對(duì)日志進(jìn)行劃分,擴(kuò)展了原方法的適用范圍,并且對(duì)改進(jìn)的方法進(jìn)行了相關(guān)的實(shí)驗(yàn)驗(yàn)證。
本節(jié)首先介紹LogCluster方法的整體結(jié)構(gòu)以及主要步驟,然后分析該方法的局限性。
LogCluster方法主要分為兩個(gè)階段:構(gòu)建階段和生產(chǎn)階段,總體結(jié)構(gòu)如圖1所示。構(gòu)建階段和生產(chǎn)階段均包含4個(gè)步驟:日志解析、特征提取、日志聚類和代表性日志序列提取。構(gòu)建階段通過(guò)提取代表性的日志序列來(lái)構(gòu)建知識(shí)庫(kù)。在生產(chǎn)階段將實(shí)際生產(chǎn)環(huán)境中采集的日志提取出代表性日志序列,然后檢查它是否已經(jīng)存儲(chǔ)在知識(shí)庫(kù)中,如果知識(shí)庫(kù)中已經(jīng)存在,那么將相應(yīng)解決方案反饋給工程師,否則將對(duì)知識(shí)庫(kù)進(jìn)行更新。
接下來(lái),根據(jù)圖1中的LogCluster整體結(jié)構(gòu),我們分別介紹日志解析、特征提取、日志聚類、代表性日志序列提取和重復(fù)性檢查5個(gè)步驟。
圖1 LogCluster整體結(jié)構(gòu)
1.1.1 日志解析
現(xiàn)代系統(tǒng)的運(yùn)行日志一般是指由系統(tǒng)生成的非結(jié)構(gòu)化日志文本,它包含靜態(tài)消息和動(dòng)態(tài)參數(shù)兩種字段,其中靜態(tài)消息字段也叫日志事件,表示每條日志的事件類型。日志解析的主要目的是從原始日志中提取日志事件。
LogCluster中日志解析采用基于聚類的日志關(guān)鍵字提取技術(shù)[11](log key extraction,LKE)。圖2展示了LKE方法的解析效果。圖中上方為原始日志信息,下方分別為日志事件文本和標(biāo)記符與日志事件對(duì)應(yīng)的結(jié)構(gòu)化日志文本。
1.1.2 特征提取
特征提取主要是將解析后的日志特征進(jìn)行分析提取,并進(jìn)行矢量化,以便進(jìn)行日志聚類。該步驟主要包含日志序列劃分和日志矢量化兩部分。日志序列劃分將解析后的日志劃分為多個(gè)日志序列。日志矢量化主要分為兩步,首先將日志序列轉(zhuǎn)化為日志事件計(jì)數(shù)向量,然后對(duì)向量進(jìn)行加權(quán)。日志特征提取流程如圖3所示。
日志序列劃分:為了提取特征,首先需要將日志數(shù)據(jù)分成不同的組。該方法中使用會(huì)話窗口將日志鏈接為不同的日志序列。會(huì)話窗口基于標(biāo)識(shí)符,標(biāo)識(shí)符用于標(biāo)記某些日志數(shù)據(jù)中的執(zhí)行軌跡。例如,帶有block_id的HDFS日志會(huì)記錄某些塊的讀寫等操作。依據(jù)帶有同一標(biāo)記符的日志代表同一會(huì)話的相關(guān)性,將日志根據(jù)標(biāo)記符進(jìn)行分組,其中每一個(gè)會(huì)話窗口都有唯一的標(biāo)記符。如圖3中所展示的,圖中的日志都擁有相同的block_id,所以將含有blk_904791815409399662和含有blk_904791815415648154的日志行都鏈接到一起,形成多組日志序列。
圖2 日志解析效果
圖3 日志特征提取
日志矢量化:將日志事件序列轉(zhuǎn)化為事件計(jì)數(shù)向量,即日志事件序列中的每個(gè)日志事件出現(xiàn)的次數(shù)。然后使用基于IDF[12](inverse document frequency)和基于對(duì)比的方法對(duì)事件計(jì)數(shù)向量進(jìn)行加權(quán),形成加權(quán)事件計(jì)數(shù)向量,如圖3所示。
(1)基于IDF的事件權(quán)重:如果一個(gè)日志事件頻繁的出現(xiàn)在多個(gè)日志序列中,那么它的判別能力就低于只出現(xiàn)在少數(shù)日志序列中的事件。
(2)基于對(duì)比的事件權(quán)重:在實(shí)驗(yàn)環(huán)境和生產(chǎn)環(huán)境都出現(xiàn)了的事件對(duì)異常識(shí)別的判別能力不如只出現(xiàn)在生產(chǎn)環(huán)境中的事件,僅在生產(chǎn)環(huán)境出現(xiàn)的事件更有可能反映異常,因此應(yīng)該具有更高的權(quán)值。
1.1.3 日志聚類
日志聚類主要是將特征提取步驟得到的加權(quán)事件計(jì)數(shù)向量進(jìn)行聚類。LogCluster計(jì)算日志序列之間的相似度,然后采用層次聚類對(duì)相似的日志序列進(jìn)行聚類,形成正常和異常兩種集群。
1.1.4 代表性日志序列提取
代表性日志序列提取將從正常和異常兩種集群中提取代表性日志序列,構(gòu)建知識(shí)庫(kù)。對(duì)于每個(gè)集群,通過(guò)選擇集群的質(zhì)心來(lái)作為代表性日志序列。計(jì)算每個(gè)日志序列距離集群內(nèi)其它日志序列的平均距離,選擇平均距離最小的作為每個(gè)集群的代表性日志序列。
1.1.5 重復(fù)性檢查
重復(fù)性檢查主要對(duì)生產(chǎn)階段產(chǎn)生的日志提取的代表性日志序列與知識(shí)庫(kù)中的日志序列進(jìn)行對(duì)比。采集生產(chǎn)階段產(chǎn)生的日志經(jīng)過(guò)上述4個(gè)步驟后提取代表性日志序列,計(jì)算與知識(shí)庫(kù)中存儲(chǔ)的日志序列之間的相似度,如果知識(shí)庫(kù)中已經(jīng)存在,那么將該日志序列對(duì)應(yīng)的異常解決方案進(jìn)行反饋。將知識(shí)庫(kù)中不存在的日志序列進(jìn)行人工判斷,然后對(duì)知識(shí)庫(kù)進(jìn)行更新,從而減少人工檢查的日志序列的數(shù)量。
LogCluster方法雖然能有效的進(jìn)行異常檢測(cè),并減少人工檢查的工作,但是在特征提取步驟采用了會(huì)話窗口的方式進(jìn)行日志序列的劃分,這種方法使得LogCluster方法只能處理帶有標(biāo)記符的日志。而對(duì)于日志本身不帶有標(biāo)識(shí)符或者無(wú)法后期為日志增加標(biāo)記符的日志類型,該方法無(wú)法進(jìn)行特征提取。特征提取步驟的局限性影響了LogCluster方法的適用性。
針對(duì)LogCluster異常檢測(cè)方法的局限性,本文提出了一種改進(jìn)的基于LogCluster的日志異常檢測(cè)方法,即SW(Sliding Window)-LogCluster。SW-LogCluster通過(guò)采用滑動(dòng)窗口代替LogCluster的會(huì)話窗口,可以有效擴(kuò)展LogCluster方法的適用性。圖4展示了LogCluster與SW-LogCluster方法的對(duì)比,SW-LogCluster采用與LogCluster相同的整體結(jié)構(gòu),關(guān)鍵的區(qū)別在特征提取部分。特征提取分為日志序列劃分和日志矢量化兩個(gè)步驟,LogCluster使用會(huì)話窗口的方式進(jìn)行日志序列劃分,而SW-LogCluster使用滑動(dòng)窗口的方式進(jìn)行日志序列的劃分。
圖4 SW-LogCluster與LogCluster方法對(duì)比
滑動(dòng)窗口方法是一種基于時(shí)間戳的序列劃分方法,時(shí)間戳記錄每條日志產(chǎn)生的時(shí)間。窗口由兩個(gè)屬性組成:窗口大小ΔT和步長(zhǎng)Δt,ΔT表示每個(gè)窗口包含的時(shí)間間隔,Δt表示窗口每次滑動(dòng)的時(shí)間間隔,如圖5所示。窗口以步長(zhǎng)大小的時(shí)間段向后滑動(dòng)。一般來(lái)說(shuō),我們?cè)O(shè)置步長(zhǎng)小于窗口大小,這樣每次窗口滑動(dòng)會(huì)形成不同窗口之間的重疊,可以增加劃分出的日志序列,減少窗口覆蓋不均勻產(chǎn)生的誤差。
圖5 滑動(dòng)窗口
SW-LogCluster采用合適的窗口大小以及步長(zhǎng)對(duì)日志進(jìn)行劃分,將同一個(gè)滑動(dòng)窗口時(shí)間段內(nèi)產(chǎn)生的日志劃分為一組日志序列,然后生成事件計(jì)數(shù)向量。圖6為一個(gè)使用滑動(dòng)窗口劃分日志序列并生成事件計(jì)數(shù)矩陣的實(shí)例,圖中左邊為原始日志經(jīng)過(guò)解析后生成的結(jié)構(gòu)化日志,每個(gè)日志行代表日志生成的時(shí)間和該行對(duì)應(yīng)的日志事件。假設(shè)滑動(dòng)窗口的窗口大小為6 h,步長(zhǎng)為1 h,第一個(gè)窗口產(chǎn)生的日志序列S1為第1行日志的時(shí)間到之后6 h內(nèi)的日志行代表的日志事件,即日志序列圖中的第一行(由于事件太多,沒(méi)有完全展示)。第二個(gè)窗口根據(jù)步長(zhǎng)向后滑動(dòng)1 h,產(chǎn)生的第二個(gè)日志序列S2為第4行日志的時(shí)間到之后6 h內(nèi)的日志行代表的日志事件,即日志序列圖中的第二行。然后進(jìn)行日志向量化,將日志序列轉(zhuǎn)換為事件計(jì)數(shù)矩陣。
圖6 滑動(dòng)窗口劃分日志序列實(shí)例
通過(guò)我們的方法,能夠有效的將原始日志解析后的結(jié)構(gòu)化日志進(jìn)行劃分,產(chǎn)生多組日志序列,進(jìn)而應(yīng)用到日志向量化的步驟中。由于滑動(dòng)窗口方法基于時(shí)間戳的特性,SW-LogCluster方法不僅可以應(yīng)用于LogCluster方法針對(duì)的帶標(biāo)記符的日志,還能有效的對(duì)不帶標(biāo)記符的日志進(jìn)行異常檢測(cè),在擴(kuò)展LogCluster方法適用性的基礎(chǔ)上保證異常檢測(cè)的效果。
本文主要采用Precision(精準(zhǔn)率)、Recall(召回率)和F_measure(綜合評(píng)價(jià)標(biāo)準(zhǔn))來(lái)作為評(píng)估指標(biāo)。
Precision表示檢測(cè)出來(lái)的正確異常占檢測(cè)出來(lái)的所有異常的比例,計(jì)算公式為
(1)
其中,TP為檢測(cè)出來(lái)的正確異常的數(shù)量;FP為將非異常檢測(cè)為異常的數(shù)量。Precision的值越高,說(shuō)明異常檢測(cè)方法檢測(cè)出的正確異常的準(zhǔn)確率越高。
Recall表示檢測(cè)出來(lái)的正確異常占實(shí)驗(yàn)數(shù)據(jù)中所有異常的比例,計(jì)算公式為
(2)
其中,F(xiàn)N為將異常檢測(cè)為非異常的數(shù)量。Recall的值越高,說(shuō)明異常檢測(cè)方法將異常漏掉的比例越低。
F_measure表示Precision和Recall兩項(xiàng)指標(biāo)的相對(duì)重要程度,是Precision和Recall的加權(quán)調(diào)和平均[13],是最重要的一個(gè)評(píng)估指標(biāo)。F_measure可通過(guò)如下公式計(jì)算
(3)
其中,β是參數(shù)。當(dāng)0<β<1時(shí),精準(zhǔn)率有更大的影響,當(dāng)β>1時(shí),召回率有更大的影響。在本文的異常檢測(cè)方法中,既要保證非異常不能檢測(cè)成異常(精準(zhǔn)率),又要保證異常不能檢測(cè)為非異常(召回率)。假設(shè)Precision和Recall的權(quán)重的相同的,即β=1, 式(3)可表示為
(4)
本文實(shí)驗(yàn)使用Python語(yǔ)言進(jìn)行LogCluster方法以及SW-LogCluster方法的實(shí)現(xiàn),實(shí)驗(yàn)日志數(shù)據(jù)采用了HDFS和BGL(BlueGene/L)日志集[14]。每個(gè)實(shí)驗(yàn)分別進(jìn)行20次,并對(duì)實(shí)驗(yàn)結(jié)果評(píng)估指標(biāo)取平均值。
接下來(lái),我們首先使用SW-LogCluster和LogCluster方法對(duì)帶標(biāo)記符的日志(HDFS)進(jìn)行對(duì)比實(shí)驗(yàn),然后再驗(yàn)證SW-LogCluster日志檢測(cè)方法在不帶標(biāo)記符的日志(BGL)上的檢測(cè)效果。通過(guò)兩組實(shí)驗(yàn)驗(yàn)證SW-LogCluster方法是否有效擴(kuò)展了原方法的適用性。最后驗(yàn)證了滑動(dòng)窗口屬性對(duì)SW-LogCluster方法的影響,并討論窗口大小和步長(zhǎng)對(duì)SW-LogCluster方法產(chǎn)生的影響。
實(shí)驗(yàn)采用50萬(wàn)條的HDFS日志的樣本數(shù)據(jù),分別使用LogCluster方法和SW-LogCluster方法進(jìn)行異常檢測(cè)的平均Precision、Recall和F_measure結(jié)果如圖7所示。
圖7 LogCluster和SW-LogCluster在精確率、召回率和F_measure方面的實(shí)驗(yàn)結(jié)果對(duì)比
圖7展示了各項(xiàng)指標(biāo)(Precision,Recall,F(xiàn)_measure)在使用LogCluster和SW-LogCluster方法時(shí)的平均值。由圖7我們可以看出,SW-LogCluster方法在Precision和 F_measure 兩項(xiàng)指標(biāo)上比LogCluster方法略小,但是在 Recall 指標(biāo)上稍大。SW-LogCluster方法的3項(xiàng)指標(biāo)與LogCluster方法相差不多。實(shí)驗(yàn)結(jié)果表明SW-LogCluster方法在帶有標(biāo)記的日志(HDFS)上基本能達(dá)到LogCluster方法的異常檢測(cè)效果。
本實(shí)驗(yàn)通過(guò)使用SW-LogCluster方法對(duì)不同規(guī)模BGL日志集進(jìn)行異常檢測(cè),以此來(lái)驗(yàn)證SW-LogCluster方法在Precision、Recall和F_measure這3項(xiàng)指標(biāo)上的實(shí)驗(yàn)效果。
圖8展示了各項(xiàng)指標(biāo)(Precision,Recall,F(xiàn)_measure)在不同日志樣本集規(guī)模(50萬(wàn)條,100萬(wàn)條,200萬(wàn)條和400萬(wàn)條)時(shí)的平均值。由圖8我們可以看出,隨著日志樣本集的不斷變大,3項(xiàng)指標(biāo)均有略微的提高,并且維持在一個(gè)較為穩(wěn)定的區(qū)間。3項(xiàng)指標(biāo)的值與LogCluster方法在HDFS日志上的實(shí)驗(yàn)結(jié)果基本相同。實(shí)驗(yàn)結(jié)果表明SW-LogCluster在不帶標(biāo)記符的日志(BGL)上依然能達(dá)到LogCluster的異常檢測(cè)效果。
圖8 SW-LogCluster測(cè)試結(jié)果
結(jié)合第4.1節(jié)進(jìn)行的實(shí)驗(yàn),改進(jìn)后的SW-LogCluster方法不僅能達(dá)到原方法異常檢測(cè)的效果,而且在檢測(cè)不帶標(biāo)記符的日志類型時(shí)也能達(dá)到理想的檢測(cè)結(jié)果,說(shuō)明改進(jìn)后的方法有效擴(kuò)展了原方法的適用性。
本實(shí)驗(yàn)將研究滑動(dòng)窗口中窗口大小和步長(zhǎng)對(duì)SW-LogCluster異常檢測(cè)方法精度的影響。實(shí)驗(yàn)選取50萬(wàn)條的BGL日志數(shù)據(jù)作為樣本數(shù)據(jù)。實(shí)驗(yàn)結(jié)果解釋如下。
圖9展示了不同窗口大小對(duì)F_measure值的影響。在該實(shí)驗(yàn)中,步長(zhǎng)設(shè)為1 h。由這幅圖我們可以看出,隨著窗口大小的不斷增大,異常檢測(cè)的綜合指標(biāo)F_measure的值越來(lái)越大。這是因?yàn)樵谝欢ǚ秶鷥?nèi),窗口越大就可以覆蓋越多的信息,能減少一些小窗口覆蓋信息不完全的情況,提升日志序列劃分效果,進(jìn)而發(fā)現(xiàn)更準(zhǔn)確的異常檢測(cè)模式。實(shí)驗(yàn)結(jié)果表明,當(dāng)步長(zhǎng)固定時(shí),窗口越大,異常檢測(cè)的效果越好。
圖9 窗口大小對(duì)檢測(cè)精度的影響
圖10展示了不同步長(zhǎng)對(duì)F_measure值的影響。在該實(shí)驗(yàn)中,窗口大小保持在6 h。由這幅圖我們可以看出,隨著步長(zhǎng)的變化,F(xiàn)_measure的值基本保持不變。這是因?yàn)椴介L(zhǎng)的大小對(duì)窗口覆蓋信息完不完整沒(méi)有必然的聯(lián)系。實(shí)驗(yàn)結(jié)果表明,當(dāng)窗口大小固定時(shí),步長(zhǎng)大小對(duì)異常檢測(cè)的結(jié)果沒(méi)有影響。
圖10 步長(zhǎng)對(duì)檢測(cè)精度的影響
本文針對(duì)LogCluster方法處理日志類型單一的問(wèn)題,提出了一種改進(jìn)的基于日志的異常檢測(cè)方法SW-LogCluster,SW-LogCluster方法使用滑動(dòng)窗口的方法代替會(huì)話窗口對(duì)日志進(jìn)行劃分,能夠?qū)⒏囝愋偷娜罩緞澐譃槿罩拘蛄?,方法的適用性得到擴(kuò)展。本文對(duì)SW-LogCluster方法進(jìn)行了設(shè)計(jì)實(shí)現(xiàn)和實(shí)驗(yàn)驗(yàn)證,結(jié)果表明,SW-LogCluster方法的3項(xiàng)評(píng)估指標(biāo)(Precision,Recall,F(xiàn)_measure)與LogCluster方法相差不大,說(shuō)明SW-LogCluster方法在保證異常檢測(cè)效果的基礎(chǔ)上,有效擴(kuò)展了原方法的適用性。