封神 - 運維大腦 | 日誌檢測工具

1. 背景目標

阿里雲應用業務有問題,雲平臺監控可以發現問題,但並不能定位到問題根本原因,運維大腦監控底層日誌,可快速定位問題原因,幫助現場運維同學解決問題。

運維大腦融合SRE方法,專注於深度運維的技術服務領域,幫助客戶與現場,增強租戶視角運維監控能力、提升平臺視角問題定位效率、加強雙維度容量性能運營能力。濃縮TAM現場運維經驗,多樣化地、標準化地、智能化地向客戶輸出運維能力與技術服務。

2. 開發設計

2.1 日誌配置

如圖2所示,可通過運維大腦前端頁面配置需要監控的日誌,可單獨新增也可批量導入。配置信息包括產品、服務、服務角色、日誌類型(DOCKER 物理機 VM)、日誌路徑、監控週期、算法(ML-TOP ML-CP ML-KEY)、狀態(開啓\關閉)。

2.2 日誌訓練

前端配置日誌信息存儲到後臺數據庫,後臺程序通過產品、服務、服務角色等條件查詢相應的主機名。

定時任務啓動,根據獲取到的主機名通過PSSH命令下發訓練腳本到各個機器上。下發前判斷各臺機器是否已存在訓練腳本,如果腳本已存在,則停止下發命令。

訓練腳本開始工作:首先讀取日誌,通過正則進行英文分詞(英文文本可通過NLTK庫分詞,中文文本可通過JIEBA分詞進行切分,在這裏選擇最簡單的PYTHON自帶的RE模塊根據特殊符號進行切分),統計總詞數,並計算每個單詞的詞頻。按詞頻排序將單詞以二進制形式寫入TOP模型文件,詞頻寫入CP模型文件,如圖5所示。

警告:文件命名最好以服務角色+文件路徑的方式命令,否則在後續讀取的時候可能會衝突。

2.3 日誌分析

定時任務啓動,同訓練過程初始化一樣,首先判斷各臺機器是否存在分析腳本,如若不存在,進行下發命令。

分析腳本開始工作:首先讀取日誌,區別於日誌訓練,分析腳本會根據前端配置的監控週期進行選取(比如監控週期爲30分鐘,則分析腳本會選取當前時間至30分鐘之前的日誌進行分析)。同訓練腳本一樣,讀取日誌後,進行文本分詞,計算詞數,統計詞頻。讀取模型文件,根據不同的算法(算法這塊在文章第三部分會單獨進行講述),計算算法權重值。對算法權重值進行閾值判斷,超過閾值,會判斷日誌異常信息並從日誌文件獲取。分析結束,最後把產品、服務、服務角色、日誌文件、日誌級別(ERROR\INFO)、算法值、日誌錯誤詳情、監控時間等監控數據進行入庫,並在前端頁面進行展示,如圖6所示。

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);"></figcaption>

2.4 模型優化

訓練模型初始化的弊端在於無法手動去打標籤(正常\異常),所以對於初始化後的模型文件肯定不能是一個完全正常的模型,需要後續不斷的去優化。

定時任務啓動:還是一樣的流程,完成讀取文件、分詞等工作後,生成的模型文件與源模型文件對比,對比方法與算法相同,閾值比分析閾值更低,低於閾值後,單詞詞頻字典進行合併,按次序排序後分別寫入源模型文件。至此,整個日誌過程完成閉環操作。

2.5 日誌巡檢

日誌巡檢是對自身系統運行狀況的監控,環繞整個閉環操作。日誌訓練、分析、模型優化通過定時任務去驅動,日誌巡檢對每一步操作過程進行成功判斷,並對異常的操作進行原因分析,相關數據存儲入庫,並在前端進行展示,如圖7所示。

3. 算法邏輯

運維大腦所開發的算法借鑑了貝葉斯和文本相似度兩大算法,以傳統的自然語言處理方式對文本進行分析。

3.1 分詞方式兩種常用方式:結巴分詞 和 nltk庫分詞

結巴分詞適用於中文分詞,分詞原理爲:

①基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG)。
②採用動態規劃查找最大概率路徑, 找出基於詞頻的最大切分組合。
③對於未登錄詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi算法

nltk庫只能用於英文分詞,除此以外還可用於詞性標註和文本分析。
個人認爲英文分詞以空格或部分特殊符號進行切分即可:re.split()。

3.2 TF-IDF

TF-IDF是Term Frequency-Inverse Document Frequency的縮寫,即詞頻-逆文檔頻率,用來刻畫一個詞語在某篇文檔中重要程度,也就是說是否可以用該詞語來代表某篇文檔的主要內容。

  • TF表示詞頻。給定幾個關鍵詞,在某篇文檔中出現的次數最高者,則說明該文檔與出現次數最高的詞語關係最密切。用詞語出現的次數除以文檔的總詞彙數,就是TF,當然此處在統計文檔總詞彙時,把類似於“了”、“的”、“地”、“即”等詞語排除在外不予考慮。引入詞頻後,則某個詞的詞頻越高,該文檔與其關係也就越大。
  • TF計算公式爲: TF = 詞語在文檔中出現的次數 / 文檔詞語次數
  • IDF表示逆文檔頻率。如果一個詞語在某篇文檔中出現的TF高,但是在語料庫的其它文檔中出現的次數少,則說明該詞語對於文檔分類具有重要作用,因此引入IDF來刻畫此項數據,其值越大,說明該詞語對於語料庫來說具有越好的區分能力。如果某個詞語在每篇文檔裏均出現,且出現的次數很接近,則該詞語用來區分文檔時效果便不好。
  • IDF計算公式爲: IDF = log(語料庫文檔總數/包含某詞語的文檔數+1)
  • TF-IDF 值越大說明某個詞語用類識別文檔的區分度便越大。
  • TF-IDF計算公式爲: TF * IDF

3.3 文本相似度

Latent Semantic Indexing(LSI)從文本潛在的主題進行分析。LSI是概率主題模型的一種,另一種常見的是LDA,核心思想是:每篇文本中有多個概率分佈不同的主題;每個主題中都包含所有已知詞,但是這些詞在不同主題中的概率分佈不同。LSI通過奇異值分解的方法計算出文本中各個主題的概率分佈,嚴格的數學證明需要看相關論文。假設有5個主題,那麼通過LSI模型,文本向量就可以降到5維,每個分量表示對應主題的權重。

可參考文後資料[1]瞭解詳情。

總結下文本相似度和貝葉斯算法的處理過程:

  1. ML-LSI
    ①使用nltk庫分詞將日誌文本切割。②建立詞袋模型。③建立TF-IDF模型。④構建一個query文本,確認主題,利用詞袋模型的字典將其映射到向量空間。⑤構建LSI模型,設置主題數爲2(ERROR、INFO)。⑥計算文本相似度。
  2. ML-BAYES
    ①使用nltk庫分詞將日誌文本切割。②對處理之後的文本開始用TF-IDF算法進行單詞權值的計算。③去掉停用詞。④貝葉斯預測種類。

運維大腦日誌分析算法包括:

  1. ML-TOP
    weight = x * wx : 驗證集top10新出現個數w : 單個詞權重值 0.1
  2. ML-CP
    weight = x / wx : 詞頻變化超過0.02數w : 詞頻變化總數
  3. ML-KEY
    weight = x / wx:關鍵詞日誌行數w:日誌總行數
  4. ML-NUM
    weight = x * wx:異常日誌行數w:0.1開發思路:①獲取日誌k:v 求v平均值 報錯num模型。②對比新日誌v值。

4. 總結

本期給大家介紹了封神系統運維大腦模塊的相關知識,分享了機器學習中兩個常用的文本分析算法。目前運維大腦所能達到的效果是可以把日誌中報錯進行識別並展示,但是我們的最終目標是可以識別出故障,雖然普通的報錯可能對平臺並沒有太大的影響,但是頻繁的報警並不利於運維工作的開展。

關於運維大腦暫時就介紹這麼多,當前也確實存在一定問題,待後續完善後會再跟大家介紹,然後如果同學有更好的算法或者思路,歡迎討論!

接下來的文章會陸續給大家介紹封神的其他模塊,包括實時告警、運維大盤、報表分析、數據網關、妲己紂王、時序數據庫等相關知識,敬請期待!

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

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