log-anomaly-detector (LAD)

log-anomaly-detector (LAD)

LAD是Red hat 開發的,一個基於機器學習的Log日誌異常檢測命令行工具

1. 安裝

環境要求:python 3.6 或以上
直接安裝會出錯,爲了避免後續的錯誤,需要預先安裝以下幾個依賴(後裝的話會出錯):

pip install git+https://github.com/compmonks/SOMPY.git
pip install ipdb
pip install tornado==5.1
pip install python-dateutil==2.8.0
pip install opentracing-instrumentation==3.2.1

然後安裝LAD:
pip install log-anomaly-detector==0.0.2
安裝需要幾個小時,之前的版本使用UI Command時會有bug,作者在0.0.2版本中修復了

查看是否安裝成功:
log-anomaly-detector --help

報錯解決

  • 報錯1:
    在這裏插入圖片描述
    issue裏提了這個錯誤,作者表示這是因爲他們採用了某個git commit當做依賴,這是個bug,需要該項目的作者解決。
    暫時只能採用這個解決辦法
pip install git+https://github.com/compmonks/SOMPY.git
pip install ipdb
  • 報錯2:
    在這裏插入圖片描述
    解決方法:
pip install tornado==5.1
pip install python-dateutil==2.8.0
pip uninstall opentracing-instrumentation
pip install opentracing-instrumentation==3.2.1

2. 示例

Command

參數及其用法(方括號中爲可選參數):
log-anomaly-detector [main-options] <command> <subcommand> [subcommand-options] [parameters]

首先去github上clone整個項目
git clone https://github.com/AICoE/log-anomaly-detector.git
測試用例:

$ cd log-anomaly-detector

$ log-anomaly-detector run --config-yaml config_files/.env_cmn_log_fmt_config.yaml --single-run True

這裏有個bug,需要修改 config_files/.env_cmn_log_fmt_config.yaml 文件的前兩行爲1行:

STORAGE_DATASOURCE: "local"

正常運行頁面:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kRcJxUwO-1575949281468)(./1575527788493.png)]

UI Command:

參數及其用法(方括號中爲可選參數):

export SQL_CONNECT="mysql+pymysql://{USERNAME}:{PASSWORD}@localhost/factstore"
export CUSTOMER_ID="test1"
log-anomaly-detector ui --port 8080 --debug True

實際用例:

export SQL_CONNECT="mysql+pymysql://root:[email protected]/factstore" 
export CUSTOMER_ID="test1"
log-anomaly-detector --metric-port 8081 ui --port 9999

可以打開fact store(用來反饋false positive):
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qPwqFQSo-1575949281468)(./1575861528765.png)]
提交false positive成功:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-t59CokMc-1575949281469)(./1575861557220.png)]

3. 結構

該框架由三個組件組成。

機器學習Core(LAD Core)
包含自定義代碼以訓練模型並預測日誌行是否異常。目前只有無監督方法,基於W2V(Word2vec)和SOM(自組織圖)。我們計劃添加更多模型。 監控(指標)

指標 ( Metrics)
爲了在生產中監控此係統,利用了grafanaprometheus來可視化此機器學習系統的運行狀況。
grafana 是一款採用 go 語言編寫的開源應用,主要用於大規模指標數據的可視化展現,是網絡架構和應用分析中最流行的時序數據展示工具。
Prometheus 是一套開源的系統監控報警框架。

反饋迴路(Fact Store)
有一個元數據註冊中心,用於跟蹤機器學習系統中來自false_positives的反饋,並提供一種用於ML自我校正錯誤預測的方法,稱爲 Fact Store。
在這裏插入圖片描述

4. Machine Learning Core

Language Encoding, Word2Vec

日誌消息是可變長度的字符串,需要將它們轉換爲固定長度的向量表示,機器學習算法可以使用這些向量表示。這裏使用了python gensim 包中的 Word2Vec,其具有將單詞轉換爲數值向量的強大能力,可以保留其大部分語義。

SOM

自組織映射 ( self-organizing map, SOM ) 是一種無監督的學習算法,用於幫助我們量化日誌的異常性。
SOM的工作原理
SOM是一個單層的神經網絡,只有輸入層和競爭層兩層:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qbjwJH4l-1575949281470)(./1575947595582.png)]
競爭層的神經元採用競爭的方式激活,每個神經元有一個權值向量ww ,輸入向量 xx 會激活與之最接近的神經元,這個神經元叫做獲勝神經元(winner)。
下圖展示了 SOM 的訓練過程。紫色區域表示訓練數據的分佈狀況,白色網格表示從該分佈中提取的當前訓練數據的映射。首先,SOM 節點位於數據空間的任意位置,最接近訓練數據的節點(黃色高亮部分)會被選中。它和網格中的鄰近節點一樣,朝訓練數據移動。在多次迭代之後,網格傾向於近似該種數據分佈(下圖最右)。
在這裏插入圖片描述
最終的效果就是對數據進行了聚類,每個神經元代表一類。這一類所包含的數據,就是能夠使它競爭獲勝的那些數據。

訓練計算過程
Step 1:與其他神經網絡相同,需要將WeightsWeights初始化爲很小的隨機數
Step 2:隨機取一個 輸入樣本XiX_i
Step 3:遍歷競爭層中每一個節點:計算XiX_i與節點之間的相似度(通常使用歐式距離),選取距離最小的節點作爲優勝節點(winner node),有的時也叫BMU(best matching unit)
Step 4:根據鄰域半徑σσ(sigma)確定優勝鄰域將包含的節點;並通過neighborhood function計算它們各自更新的幅度(基本思想是:越靠近優勝節點,更新幅度越大;越遠離優勝節點,更新幅度越小)
Step 5:更新優勝鄰域內節點的WeightWeight
Step 6:完成一輪迭代(迭代次數+1),返回Step 2,直到滿足設定的迭代次數

推理階段,離最近的神經元結果較遠的點是異常點,這裏需要設定一個最長距離的閾值參數。

SOM的詳細原理可參考:
https://www.zhihu.com/question/28046923
https://zhuanlan.zhihu.com/p/73534694

模型結構

通過W2V將log文本轉換爲數值向量,生成的向量輸入SOM中,進行異常檢測模型的訓練和推理。

5.Metrics

Fact Store Metrics

用於查看Fact Store部署成功的指標。
在這裏插入圖片描述

Core Metrics

用於可視化正在運行的ML作業和發現false positives。
在這裏插入圖片描述

6. Storage

數據源(Source)和數據接收(Sink)可以有多種存儲形式:
在這裏插入圖片描述

7. demo數據格式

項目裏給了Local形式數據的例子
輸入數據
分爲兩種:json和txt格式
json格式:
在這裏插入圖片描述

txt格式:常規 log 格式: timestamp severity message
在這裏插入圖片描述

輸出數據
json格式:
在這裏插入圖片描述

8. 總結

該工具基於word2vec和SOM算法,可以實現對單條Log日誌的異常檢測。
總的來說項目較爲完整,但其上線不久且用戶不多,因此代碼中尚存在一些Bug需要修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章