天天看點

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

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

1. 背景目标

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

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

2. 開發設計

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

圖1:流程圖

2.1 日志配置

如圖2所示,可通過運維大腦前端頁面配置需要監控的日志,可單獨新增也可批量導入。配置資訊包括産品、服務、服務角色、日志類型(DOCKER 實體機 VM)、日志路徑、監控周期、算法(ML-TOP ML-CP ML-KEY)、狀态(開啟\關閉)。

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

圖2:日志配置

2.2 日志訓練

前端配置日志資訊存儲到背景資料庫,背景程式通過産品、服務、服務角色等條件查詢相應的主機名。

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

圖3:資料庫

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

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

圖4:pssh

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

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

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

圖5:檔案命名

2.3 日志分析

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

分析腳本開始工作:首先讀取日志,差別于日志訓練,分析腳本會根據前端配置的監控周期進行選取(比如監控周期為30分鐘,則分析腳本會選取目前時間至30分鐘之前的日志進行分析)。同訓練腳本一樣,讀取日志後,進行文本分詞,計算詞數,統計詞頻。讀取模型檔案,根據不同的算法(算法這塊在文章第三部分會單獨進行講述),計算算法權重值。對算法權重值進行門檻值判斷,超過門檻值,會判斷日志異常資訊并從日志檔案擷取。分析結束,最後把産品、服務、服務角色、日志檔案、日志級别(ERROR\INFO)、算法值、日志錯誤詳情、監控時間等監控資料進行入庫,并在前端頁面進行展示,如圖6所示。

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

圖6:日志分析

2.4 模型優化

訓練模型初始化的弊端在于無法手動去打标簽(正常\異常),是以對于初始化後的模型檔案肯定不能是一個完全正常的模型,需要後續不斷的去優化。

定時任務啟動:還是一樣的流程,完成讀取檔案、分詞等工作後,生成的模型檔案與源模型檔案對比,對比方法與算法相同,門檻值比分析門檻值更低,低于門檻值後,單詞詞頻字典進行合并,按次序排序後分别寫入源模型檔案。至此,整個日志過程完成閉環操作。

2.5 日志巡檢

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

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

圖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 * w

    x : 驗證集top10新出現個數

    w : 單個詞權重值 0.1

  2. ML-CP

    weight = x / w

    x : 詞頻變化超過0.02數

    w : 詞頻變化總數

  3. ML-KEY

    x:關鍵詞日志行數

    w:日志總行數

  4. ML-NUM

    weight = x * w

    x:異常日志行數

    w:0.1

    開發思路:

    ①擷取日志k:v求v平均值報錯num模型。

    ②對比新日志v值。

4. 總結

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

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

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

參考文章

[1] python文本相似度計算:

https://www.jianshu.com/p/edf666d3995f

我們是阿裡雲智能全球技術服務-SRE團隊,我們緻力成為一個以技術為基礎、面向服務、保障業務系統高可用的工程師團隊;提供專業、體系化的SRE服務,幫助廣大客戶更好地使用雲、基于雲建構更加穩定可靠的業務系統,提升業務穩定性。我們期望能夠分享更多幫助企業客戶上雲、用好雲,讓客戶雲上業務運作更加穩定可靠的技術,您可用釘釘掃描下方二維碼,加入阿裡雲SRE技術學院釘釘圈子,和更多雲上人交流關于雲平台的那些事。

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