封神系统-运维大脑的日志检测
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]了解詳情。
總結下文本相似度和貝葉斯算法的處理過程:
①使用nltk庫分詞將日志文本切割。
②建立詞袋模型。
③建立TF-IDF模型。
④構建一個query文本,確認主題,利用詞袋模型的字典將其映射到向量空間。
⑤構建LSI模型,設置主題數為2(ERROR、INFO)。
⑥計算文本相似度。
①使用nltk庫分詞將日志文本切割。
②對處理之后的文本開始用TF-IDF算法進行單詞權值的計算。
③去掉停用詞。
④貝葉斯預測種類。
運維大腦日志分析算法包括:
weight = x * w
x : 驗證集top10新出現個數
w : 單個詞權重值 0.1
weight = x / w
x : 詞頻變化超過0.02數
w : 詞頻變化總數
weight = x / w
x:關鍵詞日志行數
w:日志總行數
weight = x * w
x:異常日志行數
w:0.1
開發思路:
①獲取日志k:v 求v平均值 報錯num模型。
②對比新日志v值。
4. 總結
本期給大家介紹了封神系統運維大腦模塊的相關知識,分享了機器學習中兩個常用的文本分析算法。目前運維大腦所能達到的效果是可以把日志中報錯進行識別并展示,但是我們的最終目標是可以識別出故障,雖然普通的報錯可能對平臺并沒有太大的影響,但是頻繁的報警并不利于運維工作的開展。
關于運維大腦暫時就介紹這么多,當前也確實存在一定問題,待后續完善后會再跟大家介紹,然后如果同學有更好的算法或者思路,歡迎討論!
接下來的文章會陸續給大家介紹封神的其他模塊,包括實時告警、運維大盤、報表分析、數據網關、妲己紂王、時序數據庫等相關知識,敬請期待!
參考文章
[1] python文本相似度計算:https://www.jianshu.com/p/edf666d3995f
我們是阿里云智能全球技術服務-SRE團隊,我們致力成為一個以技術為基礎、面向服務、保障業務系統高可用的工程師團隊;提供專業、體系化的SRE服務,幫助廣大客戶更好地使用云、基于云構建更加穩定可靠的業務系統,提升業務穩定性。我們期望能夠分享更多幫助企業客戶上云、用好云,讓客戶云上業務運行更加穩定可靠的技術,您可用釘釘掃描下方二維碼,加入阿里云SRE技術學院釘釘圈子,和更多云上人交流關于云平臺的那些事。
原文鏈接:https://developer.aliyun.com/article/783233?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的封神系统-运维大脑的日志检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云原生是企业数字创新的最短路径
- 下一篇: 爱奇艺大数据生态的实时化建设