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

騰訊雲+社群發表於2018-09-13

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

本文由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),是最直觀的權重計算方法。**單詞在文字中出現的次數即為頻度權重。這種方法的思想是,出現次數越多的特徵單詞,其重要性越大。

img

3)Tf-idf(Term Frequency-Inverse Document Frequency, 詞頻-逆檔案頻率),是應用最廣泛的權值計算方法。單詞在一條工單的日誌中出現次數越多, 同時在所有工單中出現次數越少, 越能夠代表該故障工單。

相比於頻度權值,引入了IDF。IDF的主要思想是:如果包含詞條t的文件越少, IDF越大,則說明詞條具有很好的類別區分能力。計算公式如下,分母之所以要加1,是為了避免分母為0

img

img

參考示例: www.ruanyifeng.com/blog/2013/0…

模型構建

在已有資料(標記)的基礎上構造出一個分類函式/分類模型, 即為一個決策面。

img

1)**資料劃分:**隨機分層抽樣,劃分訓練集(70%)用於構建模型,測試集(30%)用於驗證模型效果;

2)**資料預處理:**資料整合、資料清洗、文字分詞等過程在訓練集和測試集上是同樣的處理方式,以確保最後的乾淨的訓練集和測試資料的格式是統一的;

3)**文字向量化:**採用tf-idf將文字向量化,選擇l2正則化,結合文件頻率df和最大詞頻tf進行特徵選擇,選出若干個關鍵詞;設定停用詞['is', 'not', 'this', 'the', 'do', 'in']等;

4)**模型構建:**選取分類問題常用的演算法構建模型,構建模型過程中不斷引數調優,構建最佳的模型。

img

注:對於數量特別少的故障型別,如果依靠專家知識分析已有的工單日誌能夠一一正確區分的話,那麼可以人為地抽象出獨一無二的故障特徵,並編寫模組實現自動化分類。

結果分析

故障診斷階段,將構建好的模型運用到測試集上,對故障診斷結果分析。以決策樹建立故障診斷模型,可見在訓練集上的效果可達98.94%,測試集上可達90.24%。

img

**為進一步提高模型效能,**一方面應具體分析訓練集和測試集上被錯誤分類的故障工單,檢視三種日誌的內容並查詢問題;另一方面,可增加更多的資料用於構建模型,一般而言,資料量越大,模型越接近。

**不同演算法:**嘗試採用不同的文字分類演算法用於故障分類,測試效果能反映出該演算法對當前問題的適用性。如下,筆者採用了8種演算法進行對比,並對結果進行總結分析。

img

img

**關聯規則:左鍵 ->右鍵,**左鍵的組合導致右鍵的發生。引入關聯規則挖掘,可進一步分析日誌中關鍵詞的出現,可以如何判定某一類故障的發生。譬如當{'TSC', 'CPU', 'Hardware', 'Error'}等詞同時出現時,可理解為當這些關鍵詞出現時,有89.1%的置信度人為發生了硬體故障-記憶體故障。

解決方案補充

從工程實踐的角度出發,筆者提出以下幾種可能的解決方案,以作為對上面方法步驟的補充:

1.故障分級:將故障劃分等級,如一級故障(硬體故障-軟體故障),二級故障為硬體故障下更具體的故障型別。當直接對所有二級故障做分類效果不理想時,可先考慮對一級故障做分類,再對二級故障做分類,實現故障分級的效果。

2.**資料不平衡:**即不同類別的故障工單在數量級上不一致,資料量上相差較大,使得分類模型偏向於數量多的故障。考慮到故障工單資料不平衡的問題,可考慮將數目少的歸總為一類——其他類。示例如下,九分類問題可被轉化為四分類問題。但是,在工單數量嚴重不平衡而且故障類別多的情況下,這種歸總少類樣本為其他類的方法,使得模型分類效果具有較大的隨機性。

img

3.**多字特徵詞:**原理即將文字內容按位元組流進行大小為N的滑動視窗操作,形成長度為N的位元組片段序列,以自動產生多字特徵詞。相比於分開存在,幾個單詞的連續出現可能會有產生不一樣的意義,對分類產生影響。

4.布林權重:CPU發生故障時,CPU多核故障和單核故障屬於同一類,但多核故障會記錄每一個核的情況,導致某些關鍵詞或者格式重複出現,使得模型對於兩者的相似性降低。此時,可考慮使用布林權重代替tf-idf進行文字向量化

後續

由於文字分類涵蓋的內容較多,本文儘可能從簡出發,闡述母機日誌分析的大體流程,以及工程實踐上的解決方案,以供交流。對於文字分類特徵選擇,模型引數調優和資料不平衡的更為詳細的解決方法,筆者將在後續跟進。

以上內容基於roganhuang(黃榮庚) 在實習期間工作的總結。感謝運營開發組的小夥伴們的幫助,感謝學長@simbazhou,導師@lelandwu和學姐@mengnizhang給予的指導和幫助。

筆者不才。如有錯誤,歡迎指正!

參考連結

1.blog.csdn.net/zrc199021/a…

2.blog.csdn.net/sangyongjia…

3.www.ruanyifeng.com/blog/2013/0…

4.blog.csdn.net/lxg0807/art…

5.blog.csdn.net/wangongxi/a…

6.blog.csdn.net/wangongxi/a…

問答

機器學習入門需要哪些數學基礎?

相關閱讀

基於多維資料頻繁項挖掘的母機隱患排查

再也不用擔心網咖開黑隊友聽不清了!

自己動手打造前端效能監控系統

【每日課程推薦】機器學習實戰!快速入門線上廣告業務及CTR相應知識

此文已由作者授權騰訊雲+社群釋出,更多原文請點選

搜尋關注公眾號「雲加社群」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!

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

相關文章