巧用機器學習定位雲服務器故障
歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~
本文由roganhuang發表於雲+社區專欄
導語
隨著騰訊雲業務的擴大,母機數量越來越多。為減少人力並實現母機故障的自動化定位,本文嘗試利用機器學習算法,通過對歷史故障母機的日誌數據學習,訓練模型實現自動化分析定位母機故障原因。
背景
對於每一單母機故障我們都需要定位出背後真實的故障原因,以便對相應的部件進行更換以及統計各種部件故障率的情況,因此故障定位和分析消耗的人力也越來越多。希望能借助機器學習的方法對歷史故障母機的日誌數據進行學習,沈澱出一些模型出來實現自動化的分析新的母機故障的原因,進而提高母機工單的處理效率解放人力,同時也能分析出故障的一些規律,進而實現對故障的預測等。
目標
1、對母機宕機故障進行自動化的分析,準確定位故障原因;
2、當故障分類準確率達到足夠準確之後,能夠不需要人工參與,實現自動化結單;
3、實時流式處理母機的各種數據,實現部分故障的預測。
數據
1、dmesg :機器宕機前的最後一屏,含有netconsole數據;
2、mcelog :系統檢查到硬件錯誤產生的日誌;
3、sel :系統事件日誌,是服務器傳感器收集數據發現異常產生的日誌。
方法步驟
主要步驟包括數據篩選、數據清洗、文本向量化、模型構建、結果分析等。
數據篩選
1)查看三類日誌,分析是否每一種日誌對故障定位都有存價值。剔除無價值的日誌;
2)根據業務需求,選擇特定的故障類別。因為某些故障的工單數量特別少,難以建立機器學習模型做分類;
3)保留三種日誌不全為空的故障工單,完全無記錄的工單是無法利用的;
4)根據工單編號ticket_id將日誌及故障工單整合,工單和母機應該是一一對應的。
數據清洗
1)剔除特殊符號‘#‘, ‘<‘, ‘>‘, ‘&‘, ‘@‘,‘!‘, ‘(‘, ‘)‘, ‘*‘, ‘_‘等;
2)剔除日誌的無用信息,如數字格式和英文格式的;
3)日誌分開清洗,當不同日誌的格式不一致時,需要區分對待分開清洗。
文本向量化
日誌數據一般為文本數據,在構建文檔分類模型時,需要將文本型數據轉化成數值型數據。文本向量化(也叫做特征權重計算)常用以下三種方法。
1)布爾權重(Boolean vector),是最簡單的權重計算方法。
2)頻度權值(term frequence),是最直觀的權重計算方法。單詞在文本中出現的次數即為頻度權重。這種方法的思想是,出現次數越多的特征單詞,其重要性越大。
3)Tf-idf(Term Frequency-Inverse Document Frequency, 詞頻-逆文件頻率),是應用最廣泛的權值計算方法。單詞在一條工單的日誌中出現次數越多, 同時在所有工單中出現次數越少, 越能夠代表該故障工單。
相比於頻度權值,引入了IDF。IDF的主要思想是:如果包含詞條t的文檔越少, IDF越大,則說明詞條具有很好的類別區分能力。計算公式如下,分母之所以要加1,是為了避免分母為0
參考示例: http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
模型構建
在已有數據(標記)的基礎上構造出一個分類函數/分類模型, 即為一個決策面。
1)數據劃分:隨機分層抽樣,劃分訓練集(70%)用於構建模型,測試集(30%)用於驗證模型效果;
2)數據預處理:數據整合、數據清洗、文本分詞等過程在訓練集和測試集上是同樣的處理方式,以確保最後的幹凈的訓練集和測試數據的格式是統一的;
3)文本向量化:采用tf-idf將文本向量化,選擇l2正則化,結合文檔頻率df和最大詞頻tf進行特征選擇,選出若幹個關鍵詞;設置停用詞[‘is‘, ‘not‘, ‘this‘, ‘the‘, ‘do‘, ‘in‘]等;
4)模型構建:選取分類問題常用的算法構建模型,構建模型過程中不斷參數調優,構建最佳的模型。
註:對於數量特別少的故障類型,如果依靠專家知識分析已有的工單日誌能夠一一正確區分的話,那麽可以人為地抽象出獨一無二的故障特征,並編寫模塊實現自動化分類。
結果分析
故障診斷階段,將構建好的模型運用到測試集上,對故障診斷結果分析。以決策樹建立故障診斷模型,可見在訓練集上的效果可達98.94%,測試集上可達90.24%。
為進一步提高模型性能,一方面應具體分析訓練集和測試集上被錯誤分類的故障工單,查看三種日誌的內容並查找問題;另一方面,可增加更多的數據用於構建模型,一般而言,數據量越大,模型越接近。
不同算法:嘗試采用不同的文本分類算法用於故障分類,測試效果能反映出該算法對當前問題的適用性。如下,筆者采用了8種算法進行對比,並對結果進行總結分析。
關聯規則:左鍵 ->右鍵,左鍵的組合導致右鍵的發生。引入關聯規則挖掘,可進一步分析日誌中關鍵詞的出現,可以如何判定某一類故障的發生。譬如當{‘TSC‘, ‘CPU‘, ‘Hardware‘, ‘Error‘}等詞同時出現時,可理解為當這些關鍵詞出現時,有89.1%的置信度人為發生了硬件故障-內存故障。
解決方案補充
從工程實踐的角度出發,筆者提出以下幾種可能的解決方案,以作為對上面方法步驟的補充:
1.故障分級:將故障劃分等級,如一級故障(硬件故障-軟件故障),二級故障為硬件故障下更具體的故障類型。當直接對所有二級故障做分類效果不理想時,可先考慮對一級故障做分類,再對二級故障做分類,實現故障分級的效果。
2.數據不平衡:即不同類別的故障工單在數量級上不一致,數據量上相差較大,使得分類模型偏向於數量多的故障。考慮到故障工單數據不平衡的問題,可考慮將數目少的歸總為一類——其他類。示例如下,九分類問題可被轉化為四分類問題。但是,在工單數量嚴重不平衡而且故障類別多的情況下,這種歸總少類樣本為其他類的方法,使得模型分類效果具有較大的隨機性。
3.多字特征詞:原理即將文本內容按字節流進行大小為N的滑動窗口操作,形成長度為N的字節片段序列,以自動產生多字特征詞。相比於分開存在,幾個單詞的連續出現可能會有產生不一樣的意義,對分類產生影響。
4.布爾權重:CPU發生故障時,CPU多核故障和單核故障屬於同一類,但多核故障會記錄每一個核的情況,導致某些關鍵詞或者格式重復出現,使得模型對於兩者的相似性降低。此時,可考慮使用布爾權重代替tf-idf進行文本向量化。
後續
由於文本分類涵蓋的內容較多,本文盡可能從簡出發,闡述母機日誌分析的大體流程,以及工程實踐上的解決方案,以供交流。對於文本分類特征選擇,模型參數調優和數據不平衡的更為詳細的解決方法,筆者將在後續跟進。
以上內容基於roganhuang(黃榮庚) 在實習期間工作的總結。感謝運營開發組的小夥伴們的幫助,感謝學長@simbazhou,導師@lelandwu和學姐@mengnizhang給予的指導和幫助。
筆者不才。如有錯誤,歡迎指正!
參考鏈接
1.https://blog.csdn.net/zrc199021/article/details/53728499
2.https://blog.csdn.net/sangyongjia/article/details/52440063
3.http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
4.https://blog.csdn.net/lxg0807/article/details/52776183?fps=1&locationNum=10
5.https://blog.csdn.net/wangongxi/article/details/51591031
6.https://blog.csdn.net/wangongxi/article/details/51591031
問答
機器學習入門需要哪些數學基礎?
相關閱讀
基於多維數據頻繁項挖掘的母機隱患排查
再也不用擔心網吧開黑隊友聽不清了!
自己動手打造前端性能監控系統
【每日課程推薦】機器學習實戰!快速入門在線廣告業務及CTR相應知識
此文已由作者授權騰訊雲+社區發布,更多原文請點擊
搜索關註公眾號「雲加社區」,第一時間獲取技術幹貨,關註後回復1024 送你一份技術課程大禮包!
海量技術實踐經驗,盡在雲加社區!
巧用機器學習定位雲服務器故障