歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~html
本文由roganhuang 發表於雲+社區專欄前端
導語算法
隨着騰訊雲業務的擴大,母機數量愈來愈多。爲減小人力並實現母機故障的自動化定位,本文嘗試利用機器學習算法,經過對歷史故障母機的日誌數據學習,訓練模型實現自動化分析定位母機故障緣由。服務器
對於每一單母機故障咱們都須要定位出背後真實的故障緣由,以便對相應的部件進行更換以及統計各類部件故障率的狀況,所以故障定位和分析消耗的人力也愈來愈多。但願能藉助機器學習的方法對歷史故障母機的日誌數據進行學習,沉澱出一些模型出來實現自動化的分析新的母機故障的緣由,進而提升母機工單的處理效率解放人力,同時也能分析出故障的一些規律,進而實現對故障的預測等。機器學習
一、對母機宕機故障進行自動化的分析,準肯定位故障緣由;前端性能
二、當故障分類準確率達到足夠準確以後,可以不須要人工參與,實現自動化結單;函數
三、實時流式處理母機的各類數據,實現部分故障的預測。性能
一、dmesg :機器宕機前的最後一屏,含有netconsole數據;學習
二、mcelog :系統檢查到硬件錯誤產生的日誌;測試
三、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
參考示例: www.ruanyifeng.com/blog/2013/0…
在已有數據(標記)的基礎上構造出一個分類函數/分類模型, 即爲一個決策面。
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給予的指導和幫助。
筆者不才。若有錯誤,歡迎指正!
3.www.ruanyifeng.com/blog/2013/0…
問答
相關閱讀
此文已由做者受權騰訊雲+社區發佈,更多原文請點擊
搜索關注公衆號「雲加社區」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!
海量技術實踐經驗,盡在雲加社區!