Logreduce:用 Python 和機器學習去除日誌噪音 | Linux 中國

2021-12-09 Linux中國

持續集成(CI)作業會生成大量數據。當一個作業失敗時,弄清楚出了什麼問題可能是一個繁瑣的過程,它涉及到調查日誌以發現根本原因 —— 這通常只能在全部的作業輸出的一小部分中找到。為了更容易地將最相關的數據與其餘數據分開,可以使用先前成功運行的作業結果來訓練 Logreduce 機器學習模型,以從失敗的運行日誌中提取異常。

此方法也可以應用於其他用例,例如,從 Journald 或其他系統級的常規日誌文件中提取異常。

使用機器學習來降低噪音

典型的日誌文件包含許多標稱事件(「基線」)以及與開發人員相關的一些例外事件。基線可能包含隨機元素,例如難以檢測和刪除的時間戳或唯一標識符。要刪除基線事件,我們可以使用 k-最近鄰模式識別算法(k-NN)。

日誌事件必須轉換為可用於 k-NN 回歸的數值。使用通用特徵提取工具 HashingVectorizer 可以將該過程應用於任何類型的日誌。它散列每個單詞並在稀疏矩陣中對每個事件進行編碼。為了進一步減少搜索空間,這個標記化過程刪除了已知的隨機單詞,例如日期或 IP 地址。

訓練模型後,k-NN 搜索可以告訴我們每個新事件與基線的距離。

這個 Jupyter 筆記本 演示了該稀疏矩陣向量的處理和圖形。

Logreduce 介紹

Logreduce Python 軟體透明地實現了這個過程。Logreduce 的最初目標是使用構建資料庫來協助分析 Zuul CI 作業的失敗問題,現在它已集成到 Software Factory 開發車間的作業日誌處理中。

最簡單的是,Logreduce 會比較文件或目錄並刪除相似的行。Logreduce 為每個源文件構建模型,並使用以下語法輸出距離高於定義閾值的任何目標行: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 用法可以離線訓練模型以便重複使用。可以使用基線的許多變體來擬合 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 還實現了接口,以發現 Journald 時間範圍(天/周/月)和 Zuul CI 作業構建歷史的基線。它還可以生成 HTML 報告,該報告在一個簡單的界面中將在多個文件中發現的異常進行分組。

管理基線

使用 k-NN 回歸進行異常檢測的關鍵是擁有一個已知良好基線的資料庫,該模型使用資料庫來檢測偏離太遠的日誌行。此方法依賴於包含所有標稱事件的基線,因為基線中未找到的任何內容都將報告為異常。

CI 作業是 k-NN 回歸的重要目標,因為作業的輸出通常是確定性的,之前的運行結果可以自動用作基線。Logreduce 具有 Zuul 作業角色,可以將其用作失敗的作業發布任務的一部分,以便發布簡明報告(而不是完整作業的日誌)。只要可以提前構建基線,該原則就可以應用於其他情況。例如,標稱系統的 SoS 報告 可用於查找缺陷部署中的問題。

異常分類服務

下一版本的 Logreduce 引入了一種伺服器模式,可以將日誌處理卸載到外部服務,在外部服務中可以進一步分析該報告。它還支持導入現有報告和請求以分析 Zuul 構建。這些服務以異步方式運行分析,並具有 Web 界面以調整分數並消除誤報。

已審核的報告可以作為獨立數據集存檔,其中包含目標日誌文件和記錄在一個普通的 JSON 文件中的異常行的分數。

項目路線圖

Logreduce 已經能有效使用,但是有很多機會來改進該工具。未來的計劃包括:

◈ 策劃在日誌文件中發現的許多帶注釋的異常,並生成一個公共域數據集以進行進一步研究。日誌文件中的異常檢測是一個具有挑戰性的主題,並且有一個用於測試新模型的通用數據集將有助於識別新的解決方案。◈ 重複使用帶注釋的異常模型來優化所報告的距離。例如,當用戶通過將距離設置為零來將日誌行標記為誤報時,模型可能會降低未來報告中這些日誌行的得分。◈ 對存檔異常取指紋特徵以檢測新報告何時包含已知的異常。因此,該服務可以通知用戶該作業遇到已知問題,而不是報告異常的內容。解決問題後,該服務可以自動重新啟動該作業。◈ 支持更多基準發現接口,用於 SOS 報告、Jenkins 構建、Travis CI 等目標。

如果你有興趣參與此項目,請通過 #log-classify Freenode IRC 頻道與我們聯繫。歡迎反饋!

via: https://opensource.com/article/18/9/quiet-log-noise-python-and-machine-learning

作者:Tristan de Cacqueray 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關焦點

  • Logreduce:用 Python 和機器學習去除日誌噪音
    linux 中國- Xingyu.Wang,作者:Tristan De Cacqueray持續集成(CI)作業會生成大量數據。當一個作業失敗時,弄清楚出了什麼問題可能是一個繁瑣的過程,它涉及到調查日誌以發現根本原因 —— 這通常只能在全部的作業輸出的一小部分中找到。為了更容易地將最相關的數據與其餘數據分開,可以使用先前成功運行的作業結果來訓練 Logreduce 機器學習模型,以從失敗的運行日誌中提取異常。此方法也可以應用於其他用例,例如,從 Journald 或其他系統級的常規日誌文件中提取異常。
  • 使用 logzero 在 Python 中進行簡單日誌記錄 | Linux 中國
    logzero 庫使日誌記錄就像列印語句一樣容易,是簡單性的傑出代表。我不確定 logzero 的名稱是否要與 pygame-zero、GPIO Zero 和 guizero 這樣的 「zero 樣板庫」契合,但是肯定屬於該類別。它是一個 Python 庫,可以使日誌記錄變得簡單明了。
  • Linux 自帶神器 logrotate 詳解
    //指定新建的日誌文件權限以及所屬用戶和組rotate 1                    //只保留一個日誌.,把當前日誌備份並截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日誌數據。
  • 用系統日誌了解你的 Linux 系統
    這條獨立的日誌記錄以此包含了記錄的日期和時間、計算機名、記錄日誌的進程名、記錄日誌的進程 PID,以及日誌內容本身。若系統中某個程序運行出問題了,則可以查看日誌文件並搜索(使用 / 加上要搜索的關鍵字)程序名稱。有可能導致該程序出問題的錯誤會記錄到系統日誌中。 有時,錯誤信息會足夠詳細到讓你能夠修復該問題。其他時候,你需要在 Web 上搜索解決方案。
  • python:logging日誌操作
    ,控制臺輸出是error級別以後的日誌...removeHandle():是解除日誌處理器和日誌記錄器的關係import logginglogging.basicConfig( filename='example.log', filemode='w', format='%(asctime)s:%(levelname)s:%(message
  • 一行代碼搞定 Python 日誌!
    寫了這麼多年的 Python ,我一直都是使用 Python 自帶的 logging 模塊來記錄日誌,每次需要寫一些配置將日誌輸出到不同的位置,設置不同日誌輸出格式,或者將日誌進行分文件和壓縮等。這個日誌模塊沒什麼問題,直到我無意中發現了一個神器,我才發覺原來記日誌可以這麼簡單的!這個神器就是 loguru 。
  • seci-log 1.01 發布,日誌分析軟體
    這篇文章是 seci-log 開源日誌分析軟體發布了 http://www.oschina.net/news/61996/seci-log
  • 在Linux系統中如何用logrotate實現系統日誌自動分割
    最近在用Ruby On Rails 寫一個培訓學校運營管理用的CRM客戶關係管理系統,生產環境伺服器是Nginx/Thin,開發環境用自帶的WEBrick,兩個伺服器統一有個問題就是所有的日誌都存在一個文件中,排錯時查找起來很麻煩,而且單個文件也會隨著伺服器的運行越來越大,查了查資料
  • linux系統下各種日誌文件的介紹,查看,及日誌服務配置
    linux系統日誌文件的詳細介紹日誌文件的作用日誌文件用於記錄linux系統的各種運行信息的文件,相當於
  • Linux下統計Nginx的log日誌常用命令
    工作中可能需要通過nginx日誌來分析網站的訪問情況,此時就需要對nginx日誌進行分析,以下是常用的分析命令:一、IP相關統計
  • MySQL 日誌(redo log 和 undo log) 都是什麼鬼?
    出處:https://www.cnblogs.com/f-ck-need-u/innodb事務日誌包括redo log和undo log。redo log是重做日誌,提供前滾操作,undo log是回滾日誌,提供回滾操作。
  • 如何優雅收集和管理應用的多行日誌
    如果直接收集上面的日誌會識別為多行日誌,如果我們用 JSON 格式來記錄這些日誌,然後介紹 JSON 的數據就簡單多了,比如使用 Log4J2 來記錄,變成下面的格式:{"@timestamp":"2019-08-14T18:46:04.449+00:00","@version
  • 性能工具之linux常見日誌統計分析命令
    引言在上文中性能工具之linux三劍客awk、grep、sed詳解,我們已經詳細介紹 linux
  • 機器學習進階筆記| 利用TensorFlow實現智能數字識別
    其命名來源於本身的運行原理:Tensor(張量)意味著N維數組,Flow(流)意味著基於數據流圖的計算,TensorFlow代表著張量從圖象的一端流動到另一端,是將複雜的數據結構傳輸至人工智慧神經網中進行分析和處理的過程。TensorFlow完全開源,任何人都可以使用,可以在小到一部智慧型手機、大到數千臺數據中心伺服器的各種設備上運行。目錄1.
  • python學習之日誌輸出格式logging.basicConfig函數的使用
    python的logging.basicConfig函數 ,使用時粘貼到用例前,就可以打log了。logging模塊是python內置的標準模塊,主要用於輸出運行日誌,可以設置輸出日誌的等級,日誌保存路徑,日誌文件回滾等日誌等級:(從低到高)debug:調試代碼用的,信息比較詳細info:輸出正確的信息,按照正常的代碼運行
  • 必須了解的mysql三大日誌-binlog、redo log和undo log
    日誌是 mysql 資料庫的重要組成部分,記錄著資料庫運行期間各種狀態信息。mysql日誌主要包括錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進位日誌幾大類。作為開發,我們重點需要關注的是二進位日誌( binlog )和事務日誌(包括redo log 和 undo log ),本文接下來會詳細介紹這三種日誌。
  • All in Linux:一個算法工程師的IDE斷奶之路
    >別再無腦vim了linux新手在去查看一個(文本)數據集或日誌文件時,基本就是直接用vim打開後開始上下左右的看。/*/*就把所有子目錄也一起遍歷了),在你批量管理、分析實驗日誌時,用熟之後堪稱神器。當然了,進階一點,用好awk或sed後,能擺脫vim和python的情況就更多了,尤其是在快速編輯方面。
  • 必須了解的MySQL三大日誌:binlog、redo log和undo log
    日誌是mysql資料庫的重要組成部分,記錄著資料庫運行期間各種狀態信息。mysql日誌主要包括錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進位日誌幾大類。作為開發,我們重點需要關注的是二進位日誌(binlog)和事務日誌(包括redo log和undo log),本文接下來會詳細介紹這三種日誌。
  • 面試題:MySQL三大日誌(binlog、redo log和undo log)的作用了解嗎?
    前言MySQL 日誌 主要包括錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進位日誌幾大類。其中,比較重要的還要屬二進位日誌 binlog(歸檔日誌)和事務日誌 redo log(重做日誌)和 undo log(回滾日誌)。
  • B站一面:MySQL三大日誌(binlog、redo log和undo log)的作用了解嗎?
    前言MySQL 日誌 主要包括錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進位日誌幾大類。其中,比較重要的還要屬二進位日誌 binlog(歸檔日誌)和事務日誌 redo log(重做日誌)和 undo log(回滾日誌)。