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

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]瞭解詳情。

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

ML-LSI①使用nltk庫分詞將日誌文字切割。②建立詞袋模型。③建立TF-IDF模型。④構建一個query文字,確認主題,利用詞袋模型的字典將其對映到向量空間。⑤構建LSI模型,設定主題數為2(ERROR、INFO)。⑥計算文字相似度。

ML-BAYES①使用nltk庫分詞將日誌文字切割。②對處理之後的文字開始用TF-IDF演算法進行單詞權值的計算。③去掉停用詞。④貝葉斯預測種類。

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

ML-TOPweight = x * wx : 驗證集top10新出現個數w : 單個詞權重值 0。1

ML-CPweight = x / wx : 詞頻變化超過0。02數w : 詞頻變化總數

ML-KEYweight = x / wx:關鍵詞日誌行數w:日誌總行數

ML-NUMweight = x * wx:異常日誌行數w:0。1開發思路:①獲取日誌k:v 求v平均值 報錯num模型。②對比新日誌v值。

4。 總結

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

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

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

相關文章