新聞中心
Logreduce 可以通過從大量日志數(shù)據(jù)中挑選出異常來節(jié)省調(diào)試時(shí)間。
持續(xù)集成(CI)作業(yè)會生成大量數(shù)據(jù)。當(dāng)一個(gè)作業(yè)失敗時(shí),弄清楚出了什么問題可能是一個(gè)繁瑣的過程,它涉及到調(diào)查日志以發(fā)現(xiàn)根本原因 —— 這通常只能在全部的作業(yè)輸出的一小部分中找到。為了更容易地將最相關(guān)的數(shù)據(jù)與其余數(shù)據(jù)分開,可以使用先前成功運(yùn)行的作業(yè)結(jié)果來訓(xùn)練 Logreduce 機(jī)器學(xué)習(xí)模型,以從失敗的運(yùn)行日志中提取異常。
此方法也可以應(yīng)用于其他用例,例如,從 Journald 或其他系統(tǒng)級的常規(guī)日志文件中提取異常。
使用機(jī)器學(xué)習(xí)來降低噪音
典型的日志文件包含許多標(biāo)稱事件(“基線”)以及與開發(fā)人員相關(guān)的一些例外事件?;€可能包含隨機(jī)元素,例如難以檢測和刪除的時(shí)間戳或唯一標(biāo)識符。要刪除基線事件,我們可以使用 k-最近鄰模式識別算法(k-NN)。
日志事件必須轉(zhuǎn)換為可用于 k-NN 回歸的數(shù)值。使用通用特征提取工具 HashingVectorizer 可以將該過程應(yīng)用于任何類型的日志。它散列每個(gè)單詞并在稀疏矩陣中對每個(gè)事件進(jìn)行編碼。為了進(jìn)一步減少搜索空間,這個(gè)標(biāo)記化過程刪除了已知的隨機(jī)單詞,例如日期或 IP 地址。
訓(xùn)練模型后,k-NN 搜索可以告訴我們每個(gè)新事件與基線的距離。
這個(gè) Jupyter 筆記本 演示了該稀疏矩陣向量的處理和圖形。
Logreduce 介紹
Logreduce Python 軟件透明地實(shí)現(xiàn)了這個(gè)過程。Logreduce 的最初目標(biāo)是使用構(gòu)建數(shù)據(jù)庫來協(xié)助分析 Zuul CI 作業(yè)的失敗問題,現(xiàn)在它已集成到 Software Factory 開發(fā)車間的作業(yè)日志處理中。
最簡單的是,Logreduce 會比較文件或目錄并刪除相似的行。Logreduce 為每個(gè)源文件構(gòu)建模型,并使用以下語法輸出距離高于定義閾值的任何目標(biāo)行:distance | filename:line-number: line-content。
$ logreduce diff /var/log/audit/audit.log.1 /var/log/audit/audit.logINFO logreduce.Classifier - Training took 21.982s at 0.364MB/s (1.314kl/s) (8.000 MB - 28.884 kilo-lines)0.244 | audit.log:19963: type=USER_AUTH acct="root" exe="/usr/bin/su" hostname=managesf.sftests.comINFO logreduce.Classifier - Testing took 18.297s at 0.306MB/s (1.094kl/s) (5.607 MB - 20.015 kilo-lines)99.99% reduction (from 20015 lines to 1
更高級的 Logreduce 用法可以離線訓(xùn)練模型以便重復(fù)使用??梢允褂没€的許多變體來擬合 k-NN 搜索樹。
$ logreduce dir-train audit.clf /var/log/audit/audit.log.*INFO logreduce.Classifier - Training took 80.883s at 0.396MB/s (1.397kl/s) (32.001 MB - 112.977 kilo-lines)DEBUG logreduce.Classifier - audit.clf: written$ logreduce dir-run audit.clf /var/log/audit/audit.log
Logreduce 還實(shí)現(xiàn)了接口,以發(fā)現(xiàn) Journald 時(shí)間范圍(天/周/月)和 Zuul CI 作業(yè)構(gòu)建歷史的基線。它還可以生成 HTML 報(bào)告,該報(bào)告在一個(gè)簡單的界面中將在多個(gè)文件中發(fā)現(xiàn)的異常進(jìn)行分組。
管理基線
使用 k-NN 回歸進(jìn)行異常檢測的關(guān)鍵是擁有一個(gè)已知良好基線的數(shù)據(jù)庫,該模型使用數(shù)據(jù)庫來檢測偏離太遠(yuǎn)的日志行。此方法依賴于包含所有標(biāo)稱事件的基線,因?yàn)榛€中未找到的任何內(nèi)容都將報(bào)告為異常。
CI 作業(yè)是 k-NN 回歸的重要目標(biāo),因?yàn)樽鳂I(yè)的輸出通常是確定性的,之前的運(yùn)行結(jié)果可以自動用作基線。 Logreduce 具有 Zuul 作業(yè)角色,可以將其用作失敗的作業(yè)發(fā)布任務(wù)的一部分,以便發(fā)布簡明報(bào)告(而不是完整作業(yè)的日志)。只要可以提前構(gòu)建基線,該原則就可以應(yīng)用于其他情況。例如,標(biāo)稱系統(tǒng)的 SoS 報(bào)告 可用于查找缺陷部署中的問題。
異常分類服務(wù)
下一版本的 Logreduce 引入了一種服務(wù)器模式,可以將日志處理卸載到外部服務(wù),在外部服務(wù)中可以進(jìn)一步分析該報(bào)告。它還支持導(dǎo)入現(xiàn)有報(bào)告和請求以分析 Zuul 構(gòu)建。這些服務(wù)以異步方式運(yùn)行分析,并具有 Web 界面以調(diào)整分?jǐn)?shù)并消除誤報(bào)。
已審核的報(bào)告可以作為獨(dú)立數(shù)據(jù)集存檔,其中包含目標(biāo)日志文件和記錄在一個(gè)普通的 JSON 文件中的異常行的分?jǐn)?shù)。
項(xiàng)目路線圖
Logreduce 已經(jīng)能有效使用,但是有很多機(jī)會來改進(jìn)該工具。未來的計(jì)劃包括:
- 策劃在日志文件中發(fā)現(xiàn)的許多帶注釋的異常,并生成一個(gè)公共域數(shù)據(jù)集以進(jìn)行進(jìn)一步研究。日志文件中的異常檢測是一個(gè)具有挑戰(zhàn)性的主題,并且有一個(gè)用于測試新模型的通用數(shù)據(jù)集將有助于識別新的解決方案。
- 重復(fù)使用帶注釋的異常模型來優(yōu)化所報(bào)告的距離。例如,當(dāng)用戶通過將距離設(shè)置為零來將日志行標(biāo)記為誤報(bào)時(shí),模型可能會降低未來報(bào)告中這些日志行的得分。
- 對存檔異常取指紋特征以檢測新報(bào)告何時(shí)包含已知的異常。因此,該服務(wù)可以通知用戶該作業(yè)遇到已知問題,而不是報(bào)告異常的內(nèi)容。解決問題后,該服務(wù)可以自動重新啟動該作業(yè)。
- 支持更多基準(zhǔn)發(fā)現(xiàn)接口,用于 SOS 報(bào)告、Jenkins 構(gòu)建、Travis CI 等目標(biāo)。
如果你有興趣參與此項(xiàng)目,請通過 #log-classify Freenode IRC 頻道與我們聯(lián)系。歡迎反饋!
分享標(biāo)題:Logreduce:用Python和機(jī)器學(xué)習(xí)去除日志噪音
轉(zhuǎn)載來于:http://m.fisionsoft.com.cn/article/ccopdge.html


咨詢
建站咨詢

