深度模型的日誌異常檢測,還有誰不會?
摘要:日誌異常檢測的核心是藉助AI演算法自動分析網路裝置日誌來發現並定位故障,根據送入檢測模型的資料格式,日誌異常檢測演算法模型分為序列模型和頻率模型,其中序列模型又可以分為深度模型和聚類模型。
AIOps(Artificial Intelligence for IT Operations)即智慧運維,將AI應用於運維領域,基於已有的運維資料(日誌、監控資訊、應用資訊等),透過機器學習的方式來進一步解決自動化運維沒辦法解決的問題。華為AIOps使能服務沉澱了10+開箱即用的智慧APP,覆蓋網路維護、網路體驗、網路規劃、裝置故障預測等應用領域,包含KPI異常檢測、硬碟異常檢測、故障識別及根因定位、日誌異常檢測等。其中
日誌異常檢測(Log Anomaly Detection,LAD)實時監控日誌,識別並推薦根因異常,輔助運維人員定位故障根因,提升運維效率。
為什麼需要日誌異常檢測?
通訊網路中部署的大規模裝置在執行過程中產生海量日誌。如圖1所示,日誌是一種時序文字資料,由時間戳和文字訊息組成,實時記錄了業務的執行狀態。透過收集並分析日誌,可以發現或預知網路中已發生或潛在的故障。
圖1 windows公開資料集中的部分日誌樣例[1]
目前日誌規範不統一。如圖2所示,不同型別的裝置列印出的日誌格式也不同,且日誌資料呈現出非結構化的特點。主要體現在日誌時間格式不統一,日誌記錄的級別不統一,不同廠家自定義的專業詞彙或縮略語不統一。這些問題增加了日誌分析的難度。
圖2 四種不同規範的日誌樣例資料[1]
此外,現代網路系統規模龐大,每小時列印日誌約50Gb(約1.2億~ 2億行)的量級[2],若依靠人工分析日誌資料來識別網路中是否發生了故障則效率低下,因此有必要引入AI演算法進行日誌異常檢測,以達到降低運維成本,顯著提升業務體驗的目的。
自2017年Min Du等人提出DeepLog以來[3],基於序列的深度學習建模逐漸成為近年來研究的熱點。原始的DeepLog主要包括兩個部分:模板序列異常檢測模型(Log key anomaly detection model)和引數值異常檢測模型(Parameter value anomaly detection model)。模板序列異常檢測模型透過學習正常日誌列印對應的工作流,然後對測試資料進行推理,以檢測出是否存在違背工作流的異常日誌。引數值異常檢測模型則是對每一個模板(Log key或Template)構建一個模型,用推理出的引數值與實際引數值作對比,對比結果在置信區間內則認為是正常,否則為異常。模板序列異常檢測模型的缺點在於對模板使用one-hot向量編碼,無法學習出不同模板之間的語義相似性。引數值異常檢測模型的缺點在於建模的數量太多,有多少個模板就要建立多少個模型,實現起來工作量較大。針對上述問題,2019年與2020年Weibin Meng等人先後提出Template2Vec和Log2Vec方法[4,5],可以學習出模板之間的語義相似性,並且能夠解決新模板的線上學習問題。
2. 日誌異常檢測是如何實現的?
日誌異常檢測的核心是藉助AI演算法自動分析網路裝置日誌來發現並定位故障,根據送入檢測模型的資料格式,日誌異常檢測演算法模型分為序列模型和頻率模型,其中序列模型又可以分為深度模型和聚類模型。本期主要分享近年來研究的熱點:深度模型。
2.1 日誌解析
非結構化的日誌資料直接處理非常困難。通常的做法是透過日誌解析得到日誌的模板,然後再對模板進行異常檢測。模板相當於日誌的“摘要”,日誌可以視作模板加引數得到。例如,模板Send * Bytes to *,加上引數size=120, block=blk_4612,使用列印函式print()可以得到一條具體的日誌Send 120 Bytes to blk_4612。改變引數值size=256, block=blk_3768,可以得到另一條日誌Send 256 Bytes to blk_3768。日誌解析相當於日誌列印的逆過程,由日誌反向處理得到模板。以Pinjia He等人提出的Drain方法為例[6],簡單說明日誌解析的過程。Drain認為具有相同長度的(即模板中token個數)日誌,其業務含義具有相似性,因此長度是模板提取的一個重要判據。此外,特定的關鍵字也代表了特定的業務含義。變數一般認為是純數字或者數字與字母等其他符號的組合。日誌解析如圖3所示,首先將變數token轉換為*,然後根據長度區分類別,最後根據關鍵字區分類別,最終得到一個模板。例如Receive from node blk_3587經過處理後得到模板Receive from node *。提取完模板內容後,會分配一個唯一的ID。
圖3 模板與日誌的關係以及日誌解析原理圖
2.2 異常檢測
2.2.1 DeepLog模型
以DeepLog的Log key anomaly detection model為例,網路結構如圖3所示,其中LSTM原理可以參看文獻[3]。輸入為one-hot編碼形式(備註:此處不用one-hot編碼也是可以的,直接輸入從0開始編碼的模板ID即可),h為視窗長度,即x為t時刻之前的h個模板組成的序列。表示第t個時刻出現的模板,假設模板ID的集合為{0,1, …,M},則,DeepLog採用兩層LSTM,之後接全連線網路(FC),經過softmax函式處理後,輸出各個模板的機率分佈,其中n為模板的個數。
圖4 DeepLog網路結構圖
在訓練態,收集裝置正常執行時產生的日誌獲取訓練集,具體步驟如下:
Step1: 取裝置正常執行時列印的日誌,透過日誌解析得到模板序列;
Step2: 按task_id(或執行緒號、任務號)提取模板序列;
Step4: 使用訓練資料和梯度下降法等演算法訓練神經網路。
從上述收集訓練資料的過程中可以發現,整個過程只要求訓練資料來自於系統正常執行或故障佔比很小的日誌。資料標籤不需要人工標註,因此該模型可以認為是一個無監督的深度學習模型。
圖5 訓練態收集訓練資料
圖6 推理態示意圖
推理態步驟如下:
Step1: 取待檢測的推理日誌,透過日誌解析得到模板序列;
Step2: 按task_id(或執行緒號、任務號)提取模板序列;
Step3: 載入訓練後的模型,對各個task_id對應的序列滑動視窗依次檢測;
DeepLog輸入資料的編碼方式為one-hot,所以無法學習出兩個模板之間的語義相似度,例如,假如模板資料庫的表中共有3個模板,如表1所示。從模板ID或者one-hot編碼無法學習出1號模板與2號模板業務意義相反,也學不到1號模板與3號模板業務意義相近。因此,原始的DeepLog的學習能力是有侷限性的。
表1 模板的one-hot編碼示例
2.2.2 Template2Vec模型
為了學習出模板的業務含義或語義,Weibin Meng等人在使用DeepLog之前,設計了一個Template2Vec向量編碼。核心思想是參照Word2Vec[7]的設計思路,提出了模板向量Template2Vec。Template2Vec將模板編碼成語義向量,以代替原始DeepLog中的模板索引或one-hot編碼。
對於新出現的模板,則將其轉換為一個最接近的已有模板。Template2Vec原理如圖7所示:
圖7 Template2Vec原理
具體步驟如下:
Step 1 : 在WordNet[8]中對模板內容中的自然語言單詞進行同義詞和反義詞搜尋(如圖7中的down和up),之後,運維人員再對具有業務知識的詞彙識別同義詞和反義詞(如圖中的Interface和Vlan-Interface),並將其轉化為正常的自然語言詞彙。
Step 2: 應用dLCE [9]生成模板中單詞的詞向量,如圖7中的Word vectors。
Step 3: 模板向量是模板中單詞的詞向量的加權平均值。如圖中的Templates vectors
Template2Vec結合了運維人員的專業領域知識和自然語言處理中的dLCE模型,以便準確生成模板向量。例如對模板Receiving blk * src * dest的Template2Vec求解過程如下。
圖8 Template2Vec計算過程示意圖
藉助Template2Vec將模板序列轉換為語義向量序列,之後送入DeepLog即可進行日誌異常檢測。
2.2.3 Log2Vec模型
Template2Vec存在一個較大的問題:不能在執行態或推理態處理日誌中詞彙表外(OOV)的新詞彙。為了解決這一問題,提出了Log2Vec方法。Log2Vec主要包含兩部分:日誌專用的詞嵌入(log-specific word embedding, LSWE)和新詞處理器(OOV Word processor).
LSWE可以看作在Template2Vec的基礎上,加入了關係三元組,即增加了關聯資訊。具體做法是:(1) 對於通用的關係三元組採用Dependence Trees[10]方法進行語義向量轉化,(2) 對於業務領域範圍內的三元組,加入專家經驗來識別處理。
新詞處理器則採用MIMICK [11] 來處理執行中出現的OOV單詞。使用方法如圖9所示。首先,在已有的詞彙資料集上訓練出可用的MIMICK模型。然後,使用該模型在OOV單詞上將其轉換為一個唯一的向量。
圖9 新詞處理器原理圖
3. AIops中的日誌異常檢測效果展示
NAIE的AIOps中的日子異常檢測模型服務,能夠實時監控日誌,識別並推薦根因異常。內建多種型別演算法,無需定製即可支援不同網元日誌的異常檢測;具備線上學習能力,持續提升檢測精度,輔助運維人員定位故障根因,提升運維效率。
例如,對某個網元的某個計算節點的日誌監控過程中,如圖10所示,實時統計出現的異常量,給出各個異常對應的關鍵日誌。若演算法報出的結果存在誤報,如圖11所示,使用者可以加入業務反饋,反饋的誤報異常點將會被在以後的檢測中被過濾掉。由於日誌包含了豐富的領域業務知識,如圖12所示,每條關鍵日誌都會給出上下文,輔助運維人員定位具體的異常內容。
圖10 異常檢測與關鍵日誌推薦
圖11 可以加入使用者反饋
圖12 異常日誌上下文
本文作者在1月22日20:00在DevRun開發者沙龍直播詳細介紹日誌異常檢測,直播間有眾多互動獎品等候大家,點選直播:https://bbs.huaweicloud.com/forum/thread-100052-1-1.html
參考文獻
[1]
[2] Shilin He, Jieming Zhu, Pinjia He, Michael R. Lyu. Experience Report: System Log Analysis for Anomaly Detection, IEEE International Symposium on Software Reliability Engineering (ISSRE), 2016. (ISSRE Most Influential Paper).
[3] Min Du, Feifei Li, Guineng Zheng, Vivek Srikumar. DeepLog: Anomaly Detection and Diagnosis from System Logs through Deep Learning. CCS-2017
[4] Meng W, Liu Y, Zhu Y, et al. LogAnomaly: Unsupervised Detection of Sequential and Quantitative Anomalies in Unstructured Logs[C]//IJCAI. 2019: 4739-4745.
[5] Meng W, Liu Y, Huang Y, et al. A semantic-aware representation framework for online log analysis[C]//2020 29th International Conference on Computer Communications and Networks (ICCCN). IEEE, 2020: 1-7.
[6] Pinjia He, Jieming Zhu, Zibin Zheng, and Michael R. Lyu. Drain: An Online Log Parsing Approach with Fixed Depth Tree. ICWS'2017
[7] Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781, 2013.
[8] George A Miller. Wordnet: a lexical database for english. Communications of the ACM, 38(11):39–41, 1995.
[9] Kim Anh Nguyen, Sabine Schulte im Walde, and Ngoc Thang Vu. Integrating distributional lexical contrast into word embeddings for antonym-synonym distinction. arXiv preprint arXiv:1605.07766, 2016.
[10] Katrin Fundel, Robert K¨uffner, and Ralf Zimmer. Relex—relation extraction using dependency parse trees. Bioinformatics, 23(3):365–371, 2007.
[11] Yuval Pinter, Robert Guthrie, and Jacob Eisenstein. Mimicking word embeddings using subword rnns. In Proceedings of the 2017 Conference on Empirical Methods in Natural Language Processing (EMNLP), pages 102–112, 2017.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2508/viewspace-2796229/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 異常檢測
- JAVA異常和日誌Java
- 序列異常檢測
- python自動化測試之異常及日誌Python
- 在Linux中,如何檢視和審計系統日誌檔案以檢測異常活動?Linux
- Java-異常、斷言和日誌Java
- SQL 最佳化極簡法則,還有誰不會?SQL
- win10 異常關機檢視方法 win10 異常關機日誌怎麼看Win10
- 體面編碼之異常日誌和測試處理
- 前端異常日誌監控 – 使用Sentry前端
- Logback配置檔案這麼寫,還愁不會整理日誌?
- 使用深度學習的交通標誌檢測深度學習
- 華為AGC提包檢測報告:檢測異常GC
- EGADS介紹(二)--時序模型和異常檢測模型演算法的核心思想模型演算法
- [BUG反饋]新建模型竟然不會檢測資料庫是否有該表存在!!!!模型資料庫
- 準實時異常檢測系統
- linux 檢視日誌的命令引數有哪些?Linux
- AI賦能一鍵自動檢測:頁面異常、控制元件異常、文字異常AI控制元件
- Java核心技術筆記 異常、斷言和日誌Java筆記
- Flutter異常捕獲和Crash崩潰日誌收集Flutter
- [譯] 時間順序的價格異常檢測
- 異常點檢測演算法小結演算法
- 獲取異常資訊裡再出異常就找不到日誌了,我TM人傻了
- 52 個深度學習目標檢測模型深度學習模型
- Apiclude中Talkingdata模組異常日誌不能收集問題API
- 程式碼中如果遇到未定義的變數,會丟擲異常嗎?程式還會不會繼續往下走?變數
- [譯] 時間序列異常檢測演算法演算法
- 白話異常檢測演算法Isolation Forest演算法REST
- 異常檢測(Anomaly Detection)方法與Python實現Python
- 在日誌中記錄Java異常資訊的正確姿勢Java
- 5個專注於檢測和預測異常的Java工具分享Java
- go fiber: 把異常資訊寫到錯誤日誌中Go
- OneAPM大講堂 | Java 異常日誌記錄最佳實踐Java
- 檢視系統的日誌
- 異常-自定義異常的實現和測試
- 防火牆入侵於檢測————7、日誌服務防火牆
- Jmeter使用Websocket外掛測試SingalR,外加還有阿里雲PTS的Jmeter原生測試爬坑日誌。JMeterWeb阿里
- Linux 檢視日誌Linux