基於深度學習的日誌異常檢測

語言: CN / TW / HK

雲智慧 AIOps 社群是由雲智慧發起,針對運維業務場景,提供演算法、算力、資料集整體的服務體系及智慧運維業務場景的解決方案交流社群。該社群致力於傳播 AIOps 技術,旨在與各行業客戶、使用者、研究者和開發者們共同解決智慧運維行業技術難題,推動 AIOps 技術在企業中落地,建設健康共贏的AIOps 開發者生態。

前言

學術論壇第一期,我們便有幸邀請到了北大在讀博士生, 雲智慧智慧研究院 演算法研究實習生黃同學作為主講人,為我們帶來其對深度學習在日誌異常檢測領域應用的理解,並分享了最新發表的論文, 下面讓我們一起來圍觀吧~

異常檢測

異常檢測分很多方向,包括視訊異常檢測、醫療異常檢測等。異常檢測在眾多領域都得到了的廣泛應用。比如基於CV的異常檢測,可以檢測是否是惡性腫瘤。雲智慧智慧研究院主要在時間序列異常檢測、呼叫鏈異常檢測與日誌異常檢測三個方向進行研究。

指標的異常檢測

指標的異常檢測分為業務指標異常檢測與技術指標異常檢測。任務指標就是與業務相關的指標,比如網站的瀏覽量,訪問量,商品的購買量等都屬於業務指標。技術指標主要包括電腦、伺服器等裝置的CPU使用率,記憶體的使用情況等。指標異常就是指業務指標或技術指標在短時間內發生突增的現象,比如一個網站的瀏覽量從每天大概500次訪客,突增為10000次;實體記憶體發生突增等。而對指標異常的檢測的主要就是對異常指標的檢測。

呼叫鏈異常檢測

通俗來說當登入QQ時,點選登陸按鈕以後,系統就會去前端呼叫伺服器,伺服器又會去呼叫資料庫,然後資料庫收到呼叫指令後會對密碼進行一個檢查。所以整個登陸流程就是一個採用request的一個呼叫關係,也就是呼叫鏈。而呼叫鏈的異常,可以分為兩類,一類是結構異常,一類是內容異常。當在呼叫過程中,如果通常情況下是A呼叫C,C呼叫D的呼叫關係,但是突然有一天A不去呼叫C而是直接呼叫了D,那就可能是C這個伺服器發生了異常導致A沒法呼叫,只能直接呼叫D。這種情況下我們認為是呼叫鏈的呼叫結構發生異常。

內容異常就是通常情況下A呼叫C的響應時間是5秒,比如有一天我們發現A呼叫C的響應時間花費了1min,那可能就是C的呼叫內容與往常不一樣也就是發生了呼叫內容上的異常。

日誌異常檢測

日誌資料,屬於半結構化的資料。由於日誌資料的資料量非常巨大,因此一旦發生日誌異常,運維人員在大量的日誌資料中查詢異常就是一個工作量非常巨大並且消耗成本的工作,因此將人工智慧引入到日誌異常檢測中來減少運維人員的工作量。

日誌異常檢測的特點

  • 日誌異常檢測首要的一個特點就是異常。 異常一定相對於正常來說,因此相對於正常的樣本數量而言,異常的資料樣本是非常少的。那麼在進行異常檢測的過程中,如何對這些資料進行處理就是面臨的一個比較大的挑戰。
  • 第二個特點就是對於日誌而言,不同的系統產生的日誌格式不同。比如下圖中HDFS的日誌資料的第一項不是日期,但是Hadoop的第一項就是日期。因日誌資料格式不同,在我們想用一套比較好的演算法,統一地去解決一系列的問題時,就會面臨一定的挑戰。
  • 第三個特點就是日誌其實是一個半結構化的資料,同時還包含一些引數。如下圖Apache日誌樣例資料的第三排和第四排,其實這兩條日誌資料是想表達同樣的內容,只是引數資料不一樣。雖然我們讀起來很容易,但是對於人工智慧來說,電腦沒有辦法那麼聰明地去識別,它非常可能會把這兩條日誌認為是完全不一樣的兩個日誌。所以如何處理這樣的具有半結構化特徵且引數不一樣的資料,就成了日誌異常檢測所面臨的一大問題。

日誌解析

由於日誌異常檢測具有上述特點,所以在日誌異常檢測之前我們會有一個環節叫做日誌解析。日誌解析的目的就是把半結構化的資料處理為成結構化的,同時將引數提取出來。這時即使兩條日誌的引數不同,但是當把它都用星號來代替的時候他們就是一樣的。我們把這種“event template”稱之為日誌模板,最終人工智慧就是對這個日誌模板進行處理,電腦或者演算法就可以識別出哪些資料是同一類的。幾十萬條日誌資料在通過日誌解析後,就被統一成了幾十條或者是幾百條的日誌模板,再通過識別最終的日誌模板的一個語義資訊就可以明白日誌的內容。

日誌異常檢測的方法

  1. 傳統方法:

傳統的日誌異常檢測主要有基於統計特徵、基於關鍵詞、基於聚類的方法。

  • 基於統計特徵的方法:當進行日誌異常檢測時,我們可以採用統計視窗日誌數量的方法進行異常檢測。比如可以將時間視窗設定為10s,我們如何判斷在10s有沒有發生異常呢?正常的情況下,假設我們每10秒鐘產生的日誌的數量都是五條六條的資料量。但是突然有一個10s,產生了十五條的日誌。那就跟之前的那個日誌數量相比,就是一個突增的異常現象,這時可以理解為異常導致日誌系統不斷的提示報錯。這種異常就是一種簡單的基於統計特徵的異常檢測方法。

<!---->

  • 基於關鍵詞的異常檢測:日誌資料本身包含相關的語義資訊,例如"error"和"failure"。當日志中出現了這種關鍵詞,我們就把這種詞彙提取出來,這樣就可以捕捉日誌異常的一些資訊。

<!---->

  • 基於聚類的異常檢測:日誌資料的日誌資訊都有一定的特徵,將一些相似的特徵聚集在一起,然後分為幾個類。比如說50萬條日誌資訊,根據它特徵的相似度,把它分成四個類:A類、B類、C類與D類。當出現一條新的日誌資料,我發現它不屬於ABCD四類中的任一類。此時就認為這條日誌資料為異常資料。
  1. 深度學習方法:

目前基於深度學習進行日誌異常檢測,從研究方向上主要是有三種:基於監督學習、基於半監督學習與基於無監督學習的日誌異常檢測。當然在深度學習中還有強化學習,但是在日誌異常檢測領域,強化學習的應用還沒有得到一個廣泛的認可。

人工智慧的應用面非常廣泛。深度學習只是人工智慧包含的機器學習分支下的一個小分支。除此之外人工智慧還包含很多別的分支,例如規劃安排,應用案例如滴滴打車,基於乘客和眾多司機當前的位置,給乘客匹配哪輛車是最好的?其實人工智慧在1950年左右就已經開始被研究了,但是那個時候的人工智慧還尚未被市場認可,相關研究者普遍都找不到合適工作。隨著我們的計算資源和網際網路資料呈幾何式的增長,機器學習與深度學習迎來了它的春天。近些年來深度學習深入到我們生活中的方方面面,深度學習應用的研究也是越來越火。

深度學習主要是包含三類:監督學習、半監督學習和非監督學習。其中最簡單的是監督學習。

  • 監督學習。對於每一個"log sequence"而言會有很多日誌message。為了得到一個"log sequence",通常會有很多種方法,其中一種就是按照時間視窗劃分來得到"log sequence",比如10s一個間隔就是把10s間隔內產生的所有日誌都歸於一個"log sequence"。監督學習通俗點來說訓練模型就像在做已有標準答案的試卷,日誌資料可以比做訓練時的題目,標籤就是它的參考答案。我們將通過做完題目以後不斷跟標準答案進行比對,從而不斷提高自己做題的水平和能力。而測試集就像對訓練結果的階段性成果檢測,類似於考試的方法去評判模型訓練結果的好壞。這就是監督學習的一個主要的思想。

<!---->

  • 半監督學習。指的是我們平時練習的資料中有一部分試題沒有標準答案,一部分試題是有標準答案的。而沒有參考答案的那些試卷的,也是包含知識資訊,能夠在進行真正考試的時候取得更好的成績。那麼如何充分利用這些沒有答案的練習試卷進行訓練,就是半監督學習探索的重點。

<!---->

  • 無監督學習。訓練集沒有標籤,是學習資料只提供試題但沒有標準答案的訓練方法。就像老師在期末考試前會給同學發往年的試題,但這些試題沒有答案。這個時候對於同學們而言這個試卷也不是完全沒有用,可以通過往年試卷題目捕捉試卷的一些出題特點,從而應付接下來的考試。這就是無監督學習的主要思想。

論文分享

這篇論文是基於監督學習的深度學習提出的一種異常檢測演算法,建立了基於注意力機制的端到端深度模型Translog,用自然語言語料庫對該模型進行了預訓練,使其可以獲得更好的語義嵌入向量,同時採用編解碼充分捕獲日誌模板的語義資訊。

Translog模型的框架如下圖所示,它首先通過日誌解析的方式將所有的原始日誌資料解析為相應的日誌模板,這些日誌模板再通過一個編碼器,將日誌模板中的語義資訊充分捕捉,最後通過解碼器輸出結果"0"或者是"1","0"代表是日誌資料是正常的,"1"代表是異常的,本質上是一個二分類的工作。

該模型的一個創新點是編碼器,編碼器的工作原理如下圖所示,encoder中 s1 代表一個日誌模版,每個"log key sequence"有很多日誌模板,我們以"log key sequence"為輸入單元。日誌原始資料首先會經過一個預嵌入層,提取日誌語義的順序資訊,然後通過注意力模組、Residual模組和Layer Normalization模組。注意力模組主要檢測日誌中哪個語義日誌模板對日誌異常檢測的貢獻度高。Residual模組和 Layer Normalization 模組則是進一步對日誌資料進行規範化,最後通過對這三個模組結果的多次疊加,得到日誌語義資訊。那麼日誌原始資料通過編碼器對日誌語義資訊進行編碼後,就會得到"0"或者是"1"的輸出結果。

為了驗證模型的訓練效果,分別在BGL、HDFS和 OpenStack三個真實的資料集上對模型進行實驗,實驗結果顯示Translog模型在精確度、召回率和 F1 分數三個不同的一個指標上,都達到了一個比較好的效果。

寫在最後

近年來,在AIOps領域快速發展的背景下,IT工具、平臺能力、解決方案、AI場景及可用資料集的迫切需求在各行業迸發。基於此,雲智慧在2021年8月釋出了AIOps社群, 旨在樹起一面開源旗幟,為各行業客戶、使用者、研究者和開發者們構建活躍的使用者及開發者社群,共同貢獻及解決行業難題、促進該領域技術發展。

社群先後 開源 了資料視覺化編排平臺-FlyFish、運維管理平臺 OMP 、雲服務管理平臺-摩爾平臺、 Hours 演算法等產品。

視覺化編排平臺-FlyFish:

專案介紹:https://www.cloudwise.ai/flyFish.html

Github地址: https://github.com/CloudWise-OpenSource/FlyFish

Gitee地址: https://gitee.com/CloudWise/fly-fish

行業案例:https://www.bilibili.com/video/BV1z44y1n77Y/

部分大屏案例:

請您通過上方連結瞭解我們,新增小助手(xiaoyuerwie)備註:飛魚。加入開發者交流群,可與業內大咖進行1V1交流!

也可通過小助手獲取雲智慧AIOps資訊,瞭解雲智慧FlyFish最新進展!