【AIOps探索】——日誌聚類分析

背景

日誌是軟件系統中獲取系統狀態的重要來源,日誌中包含的運行時狀態報告以及錯誤信息被廣泛地用於系統運維中,同時日誌也是AIOps實踐中經常要面對的數據類型。隨着現階段企業軟件系統變得日益龐大和複雜,對於系統產生的海量異構日誌,可以通過日誌聚類的方法,將相同模式的日誌歸爲一類,以此快速的掌握日誌全貌,同時能夠方便後續的問題定位與異常檢測。

日誌聚類是藍鯨日誌平臺正在緊鑼密鼓,全力產品化的功能之一,關於藍鯨日誌平臺,可以點擊查看歷史文章詳細瞭解——數字化轉型趨勢下,如何實現日誌統一管理?

 

企業日誌管理現狀

 

規模龐大:隨業務發展的大規模系統和設備,每天都會產生海量日誌,據統計,每小時打印的日誌達到約50Gb(約1.2億~ 2億行)的量級。

格式不統一:各類系統、設備產生的日誌多樣,對於不同用戶或開發者自定義的日誌格式更加多變

綜上,日誌信息規模大、內容雜、並且格式也難以做到統一規範,這對於運維人員平時的審查和排查故障來說是一個頭疼的問題,如果能夠通過AI的聚類算法將海量日誌劃分爲固定的幾種或者幾十種模式,這樣原來的千千萬萬條日誌就會被歸類爲具有代表性的幾十條,可以方便運維人員更高效率的進行日誌查看和故障排查。

 

日誌聚類

 

What

日誌聚類,是指通過計算日誌文本間的相似度,將相似度高的日誌聚合成一類,並提取它們的共同pattern的方法,本文首先會基於自然語言處理對日誌進行特徵提取,而後利用日誌文本的相似度對日誌聚類,從而挖掘日誌模板。

Why

比如某個服務在短時間內產生了大量報警,同時產生了大量日誌,而某一類的關鍵報錯日誌可能條數較少,則很容易被其他日誌淹沒,若能在產生大量日誌的同時,使用日誌聚類對日誌進行彙總、抽象聚類,則能夠使運維人員發現異常日誌與正常日誌“類別”上的不同,從而快速定位到異常日誌,發現問題。

How

通過上面的講解,我們對什麼是日誌聚類以及日誌聚類如何應用有了大致的瞭解,下面將講述如何實現日誌聚類。

 

1.基於TF-IDF的單詞轉向量

要想實現日誌聚類,首先要將文本類型的日誌轉換成機器學習可以識別的特徵+數據的形式,目前存在多種方法可以實現,這裏我們選用的是常見且便於理解的TF-IDF方法。

TF-IDF(term frequency–inverse document frequency)是一種用於信息檢索與數據挖掘的常用加權技術,常用於挖掘文章中的關鍵詞,而且算法簡單高效。

下面用截取的一段linux日誌說明相關概念:

分詞:

首先將每行文本按照空格分開。(實際處理時還會有其他分詞符號,這裏僅是爲了便於說明)

詞頻(TF):

某個詞在其行文本中出現的次數。比如上文的combo在每行日誌的詞頻都等於1。

逆文檔頻率(IDF):

總文本行數除以包含該詞語的文本的行數,再將得到的商取對數再加1得到。比如上文的combo在第三行文本的逆文檔頻率等於log(6/6)+1即1。

詞頻-逆文檔頻率(TF-IDF):

詞頻*逆文檔頻率。則combo這個單詞的TF-IDF值即爲1 * 1爲1。

可以看到,TF-IDF與一個詞在所有文本中的出現次數成正比,與該詞在所有文本行的出現次數成反比。因此,TF-IDF可以在一定程度上表徵一個詞語在整個文本中的重要程度——一個在所有文本中都出現的詞一般沒那麼重要。

優點:簡單易懂,計算效率高

缺點:無法體現單詞的上下文結構

 

2.降維

經過上面的分詞和對每個單詞的TF-IDF值計算,我們得到了標準的機器學習矩陣輸入(以每個單詞作爲特徵,以每行文本的每個單詞在所有特徵下的TF-IDF值作爲數值),而所有不重複的單詞構成了詞向量空間。

對於海量日誌而言,所有不重複的單詞的數量是極大的,這就會導致輸入的矩陣維度極高,也極其稀疏,爲了提高運算的效率和聚類的效果,在這一步我們需要對上面的高維矩陣進行降維操作,這裏也選擇比較常用的PCA(主成分分析)降維算法。以下簡單介紹下其原理:

爲了將數據的維數從 n 維降到 k 維,我們按照散度(也就是數據的分散程度)降低的順序對軸列表進行排序,然後取出前k項。

現在開始計算原始數據 n 維的散度值和協方差。根據協方差矩陣的定義,兩個特徵列的協方差矩陣計算公式如下:

上式中的 μi 表示第 i個特徵的期望值,且協方差都是對稱的,向量與其自身的協方差就等於其散度,假定X是觀測矩陣,則協方差矩陣如下:

樣本X的最大方差位於協方差矩陣的最大特徵值對應的特徵向量上。也就是說想要保留一個矩陣的最大信息,我們只需要保留該矩陣的最大特徵值所對應的特徵向量所組成的矩陣即可,這個過程就是降維了。

因此,從數據中保留的主要成分就是與矩陣的頂部k最大特徵值對應的特徵向量。

降維一般具有以下好處:

有助於數據可視化;

緩解維度爆炸問題,改善模型訓練效果;

在壓縮數據的同時讓信息損失最小化;

可以提高模型訓練效率。

 

3.聚類

經過上面的鋪墊,日誌的詞向量矩陣變得更加好用了,接下來我們使用機器學習中的聚類算法對上面的矩陣進行聚類運算,並給每一類都打上標籤,方便後續的彙總。這裏聚類的算法我們選擇比較出名的密度聚類算法DBSCAN,其大致步驟如下:

輸入:樣本集D={x1,x2,……,xm},鄰域參數(ε, MinPts)

初始化核心對象集合Ω=∅,初始化類別k=0。

遍歷D的元素,如果是核心對象,則將其加入到核心對象集合Ω中。

如果核心對象集合Ω中元素都已經被訪問,則算法結束,否則轉入步驟4。

在覈心對象集合Ω中,隨機選擇一個未訪問的核心對象o,首先將o標記爲已訪問,然後將o標記類別k,最後將o的ε-鄰域中未訪問的數據,存放到種子集合Seeds中。

如果種子集合Seeds=∅,則當前聚類簇Ck生成完畢, 且k=k+1,跳轉到3。否則,從種子集合 Seeds中挑選一個種子點seed,首先將其標記爲已訪問、標記類別k,然後判斷seed是否爲核心對象,如果是則將seed中未訪問的種子點加入到種子集合中,跳轉到5。

優點:能夠找出不規則形狀的類簇,並且聚類時不需要事先知道類簇的個數,聚類結果沒有偏倚。

缺點:當輸入矩陣的密度不均勻、類別間距相差很大時,效果不好;另外調參相對於傳統的K-Means之類的聚類算法稍複雜。

流程圖:

效果:

日誌聚類:

對其中一類進行展開,查看原日誌:

 

總結

 

通過日誌聚類,我們可以將海量日誌數據經過AI算法分成幾類或者幾十類,運維人員也可以按照業務的實際情況調整聚類的精度,控制聚類的類別數量,加快查看日誌的效率。

而一般的日誌都會帶有時間戳,我們還可以在日誌聚類的基礎上通過分析某類日誌的數量變化情況實現異常檢測和對系統的故障做出一定程度的定位,那麼日誌異常檢測又該如何實現呢?關注嘉爲藍鯨,下期與您一同探索AIOps——基於Spell方法的日誌異常檢測

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章