持續集成(CI)作業可以產生大量的數據。當作業失敗時,找出了什么問題可能是一個繁瑣的過程,需要對日志進行調查以發現根本原因-這通常是在作業總輸出的一小部分中發現的。為了更容易地將最相關的數據從其他數據中分離出來,日志還原機器學習模型使用以前成功的作業運行來訓練,以從失敗的運行日志中提取異常。
此原則也可應用于其他用例,例如,從期刊或其他系統范圍的常規日志文件。
利用機器學習降低噪聲
一個典型的日志文件包含許多名義事件(“基線”)以及一些與開發人員相關的異常。基線可能包含難以檢測和刪除的隨機元素,如時間戳或唯一標識符。要刪除基線事件,我們可以使用k最近鄰模式識別算法 (k-NN)。
的日志事件必須轉換為數值。k-NN回歸。使用通用特征提取工具HashingVectorizer允許將該進程應用于任何類型的日志。它對每個單詞進行散列,并在稀疏矩陣中對每個事件進行編碼。為了進一步減少搜索空間,令牌化將刪除已知的隨機單詞,例如日期或IP地址。
一旦模型被訓練,k-NN搜索告訴我們每個新事件與基線之間的距離。
Jupyter notebook演示了稀疏矩陣向量的過程,并繪制了稀疏矩陣向量圖。
介紹LOGPREIN
LogReallyPython軟件透明地實現了這個過程。的最初目標是協助祖爾CI使用構建數據庫進行作業失敗分析,現在將其集成到軟件廠發展鍛造的工作日志過程。
最簡單的是,LogReduce比較文件或目錄,并刪除類似的行。Log冷水為每個源文件構建一個模型,并使用以下語法輸出距離超過定義閾值的任何目標行:距離文件名:行號:行內容.
$ logreduce varlogauditaudit.log.1 varlogauditaudit.logINFO logreduce.Classifier - Training took 21.982s at 0.364MBs 1.314kls 8.000 MB - 28.884 kilo-lines0.244 audit.log:19963: =USER_AUTH ="root" ="/usr/bin/su" hostname=managesf.sftests.comINFO logreduce.Classifier - Testing took 18.297s at 0.306MBs 1.094kls 5.607 MB - 20.015 kilo-lines99.99 reduction from 20015 lines to
更高級的LogReduce使用可以將模型離線訓練成可重用的模型。基線的許多變體可以用來適應k-NN搜索樹
$ logreduce dir-train audit.clf varlogauditaudit.log.INFO logreduce.Classifier - Training took 80.883s at 0.396MBs 1.397kls 32.001 MB - 112.977 kilo-linesDEBUG logreduce.Classifier - audit.clf: written$ logreduce dir-run audit.clf varlogauditaudit.log
新聞熱點
疑難解答