1. 程式人生 > >巧用機器學習定位雲服務器故障

巧用機器學習定位雲服務器故障

str tps 避免 www eve devel details 社區 異常

歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~

本文由roganhuang發表於雲+社區專欄

導語

隨著騰訊雲業務的擴大,母機數量越來越多。為減少人力並實現母機故障的自動化定位,本文嘗試利用機器學習算法,通過對歷史故障母機的日誌數據學習,訓練模型實現自動化分析定位母機故障原因。

背景

對於每一單母機故障我們都需要定位出背後真實的故障原因,以便對相應的部件進行更換以及統計各種部件故障率的情況,因此故障定位和分析消耗的人力也越來越多。希望能借助機器學習的方法對歷史故障母機的日誌數據進行學習,沈澱出一些模型出來實現自動化的分析新的母機故障的原因,進而提高母機工單的處理效率解放人力,同時也能分析出故障的一些規律,進而實現對故障的預測等。

目標

1、對母機宕機故障進行自動化的分析,準確定位故障原因;

2、當故障分類準確率達到足夠準確之後,能夠不需要人工參與,實現自動化結單;

3、實時流式處理母機的各種數據,實現部分故障的預測。

數據

1、dmesg :機器宕機前的最後一屏,含有netconsole數據;

2、mcelog :系統檢查到硬件錯誤產生的日誌;

3、sel :系統事件日誌,是服務器傳感器收集數據發現異常產生的日誌。

方法步驟

主要步驟包括數據篩選、數據清洗、文本向量化、模型構建、結果分析等。

數據篩選

1)查看三類日誌,分析是否每一種日誌對故障定位都有存價值。剔除無價值的日誌;

2)根據業務需求,選擇特定的故障類別。因為某些故障的工單數量特別少,難以建立機器學習模型做分類;

3)保留三種日誌不全為空的故障工單,完全無記錄的工單是無法利用的;

4)根據工單編號ticket_id將日誌及故障工單整合,工單和母機應該是一一對應的。

數據清洗

1)剔除特殊符號‘#‘, ‘<‘, ‘>‘, ‘&‘, ‘@‘,‘!‘, ‘(‘, ‘)‘, ‘*‘, ‘_‘等;

2)剔除日誌的無用信息,如數字格式和英文格式的;

3)日誌分開清洗,當不同日誌的格式不一致時,需要區分對待分開清洗。

文本向量化

日誌數據一般為文本數據,在構建文檔分類模型時,需要將文本型數據轉化成數值型數據。文本向量化(也叫做特征權重計算)常用以下三種方法。

1)布爾權重(Boolean vector),是最簡單的權重計算方法。

如果某特征詞在文本中出現,其權重即為1,;不出現,即為0.這一簡單粗暴的方法容易丟失文本內部具體信息,效果略差。但適用於一些采用二分類的模型,比如決策樹和概率分類器。

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 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社區!

巧用機器學習定位雲服務器故障