背景
日志數(shù)據(jù)是一種廣泛可用的數(shù)據(jù)資源钦椭,用于記錄各種軟件系統(tǒng)中運行時的系統(tǒng)狀態(tài)和關鍵事件。開發(fā)人員通常利用日志數(shù)據(jù)來獲取系統(tǒng)狀態(tài)而昨、檢測異常和定位根本原因帖旨。隱藏的豐富信息為分析系統(tǒng)問題提供了一個很好的視角。因此彬呻,通過在大量日志數(shù)據(jù)中挖掘日志信息衣陶,數(shù)據(jù)驅(qū)動的方法可以幫助增強系統(tǒng)的健康柄瑰、穩(wěn)定性和可用性。
隨著現(xiàn)代計算機系統(tǒng)規(guī)模和復雜性的增加剪况,日志數(shù)據(jù)呈爆炸式增長教沾。有大量數(shù)據(jù)驅(qū)動的方法可以自動檢測異常,例如基于主成分分析(PCA)的方法拯欧、基于不變挖掘的方法和基于工作流的方法详囤,基于深度學習的方法如:DeepLog财骨、LogAnomaly镐作、LogRobust等在異常檢測中取得了顯著的效果。
現(xiàn)有方法是基于一些在現(xiàn)實的生產(chǎn)環(huán)境中無法滿足的強假設而構(gòu)建的隆箩,在生產(chǎn)環(huán)境中應用上述方法時该贾,有兩個主要挑戰(zhàn):
不斷變化的日志:在實際開發(fā)和維護中的那些軟件系統(tǒng)中,日志格式在實踐中不斷變化捌臊。
潛在的性能問題:性能問題是部分故障的常見表現(xiàn)杨蛋,指的是部分功能被破壞。為了解決上述挑戰(zhàn)理澎,提出了基于深度學習的日志異常檢測模型- SwissLog逞力。
大型系統(tǒng)不可避免地會遇到故障,導致日志模式發(fā)生變化糠爬。主要有如下幾種故障:
故障1:序列順序變化
圖(a)中的異常序列與正常序列相反寇荧,如圖(b)所示,其中異常日志語句以黃色突出顯示执隧。在這種情況下揩抡,系統(tǒng)收到了一個冗余的addStoredBlock請求,導致序列順序發(fā)生變化镀琉。因此峦嗤,通常可以從其異常的序列順序中觀察到序列日志異常屋摔。
故障2:日志時間間隔變化
如圖1(c)所示烁设,那些有性能問題的塊通常保持與正常順序相同的順序。但是钓试,性能問題會根據(jù)特定任務的故障組件減慢其執(zhí)行時間通常將時間間隔變化稱為性能問題.
故障3:不斷變化的事件
圖1(d)顯示了一個常見的更改事件的情況装黑。字符串“from ip”被添加到日志語句中,但它保持原來的含義亚侠。
基于現(xiàn)實的生產(chǎn)環(huán)境提出了SwissLog曹体,這是一種魯棒且統(tǒng)一的基于深度學習的針對各種故障的日志異常檢測模型。它可以檢測日志數(shù)據(jù)中表現(xiàn)出的序列順序變化和日志時間間隔變化硝烂。此外箕别,它對不斷變化的事件具有魯棒性。
整體框架
SwissLog 包括兩個階段,即離線處理階段和在線處理階段串稀。每個階段包括日志解析除抛、句子嵌入、基于注意力機制的Bi-LSTM階段母截,在線階段特別包含異常檢測階段到忽。
日志解析部分對歷史日志數(shù)據(jù)進行分詞、字典化和聚類清寇,提取多個模板喘漏,這些日志語句與相同的標識符聯(lián)系起來構(gòu)建日志序列,然后將日志序列轉(zhuǎn)化為語義信息和時間信息华烟。
句子嵌入部分使用BERT模型或Word2Vec模型對句子進行編碼翩迈,轉(zhuǎn)化為詞向量,將這些語義信息和時間信息輸入到基于注意力機制的 Bi-LSTM模型中學習正常盔夜、異常和性能異常日志序列的特征负饲,在在線檢測階段,一旦檢測到異常喂链,就會發(fā)出警報返十,主要流程如下:
日志離線/在線解析階段
日志解析的主要目的是日志模板化。
中心思想:
盡可能將包含語義信息的部分視作日志語句中的常量椭微;
解決方法:
基于字典的日志模板化方法洞坑。
主要流程如下:
日志語句編碼階段
異常檢測的最終目標是檢測我們前面描述的各種故障。我們可以觀察到赏表,僅憑語義信息不足以檢測多種類型的故障检诗。因此,還引入了時間信息作為特征來補充異常檢測方法瓢剿。日志解析后逢慌,我們通過將日志與相同的標識符(如HDFS日志中的block id)或滑動窗口相關聯(lián)來構(gòu)建會話。我們將序列轉(zhuǎn)換為語義信息和時間信息间狂。然后我們用下面的方法對這兩種信息進行編碼攻泼。
中心思想:
日志序列是一組有時序特征的自然語言;
解決方法:
同時考慮日志語句的時序特征和語義特征鉴象。
日志模式學習階段
在句子嵌入之后忙菠,每條日志消息被轉(zhuǎn)換成一個語義向量和一個時間嵌入向量。將二者串聯(lián)纺弊,每個日志序列都表示為一個向量列表牛欢,SwissLog以此類向量為輸入,采用基于注意力機制的雙向LSTM神經(jīng)網(wǎng)絡模型來檢測各種異常淆游,如圖所示:
中心思想:
模糊日志序列中不重要的日志語句傍睹;
解決方法:
基于注意力機制的雙向LSTM模型隔盛,學習日志序列的模式。
異常檢測
在離線階段拾稳,我們使用歷史日志訓練獲得了一個雙向LSTM的預訓練模型吮炕,可以用此模型進行異常檢測。當一組新的日志語句到達時访得,它首先經(jīng)過日志解析和句子嵌入階段龙亲。然后將上面階段獲得的輸出向量作為輸入,輸入到預訓練模型中悍抑。最后鳄炉,通過雙向LSTM模型可以檢測是否發(fā)生異常。SwissLog根據(jù)由共同標識符(例如block ID)關聯(lián)的日志語句做出預測传趾。
總結(jié)
本文介紹了一種針對各種故障的強大且統(tǒng)一的基于深度學習的日志異常檢測方法迎膜,包括以下幾個方面:
①????基于字典解析日志消息的方法,它不需要任何參數(shù)調(diào)整過程浆兰。
②????通過引入BERT來編碼日志模板,該方法對日志格式變化具有魯棒性珊豹。
③????結(jié)合時間嵌入和語義嵌入方法簸呈,通過統(tǒng)一的深度學習模型檢測順序日志異常和性能問題,通過這種方法可以對日志進行異常檢測店茶。
該方法根據(jù)共同標識符(例如如HDFS日志中的block ID)對日志進行關聯(lián)蜕便,結(jié)合神經(jīng)網(wǎng)絡模型,綜合考慮了日志的時間信息和語義信息贩幻,構(gòu)建了一種有監(jiān)督的深度學習方法轿腺,同時解決了日志檢測中常見的一些故障問題,相比于傳統(tǒng)的日志檢測方法和深度學習檢測方法有著更好的效果丛楚。
*部分內(nèi)容參考文獻:
Li?X?,?Chen?P?,?Jing?L?,?et?al.?SwissLog:?Robust?and?Unified?Deep?Learning?Based?Log?Anomaly?Detection?for?Diverse?Faults[C]//?2020?IEEE?31st?International?Symposium?on?Software?Reliability?Engineering?(ISSRE).?IEEE,?2020.