摘要:日志異常檢測的核心是借助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] https://github.com/logpai/loghub
[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.