log-anomaly-detector (LAD)
log-anomaly-detector (LAD)
LAD是Red hat 開發的,一個基于機器學習的Log日志異常檢測命令行工具
文章目錄
- log-anomaly-detector (LAD)
- 1. 安裝
- 2. 示例
- Command
- UI Command:
- 3. 結構
- 4. Machine Learning Core
- Language Encoding, Word2Vec
- SOM
- 模型結構
- 5.Metrics
- Fact Store Metrics
- Core Metrics
- 6. Storage
- 7. demo數據格式
- 8. 總結
1. 安裝
環境要求:python 3.6 或以上
直接安裝會出錯,為了避免后續的錯誤,需要預先安裝以下幾個依賴(后裝的話會出錯):
然后安裝LAD:
pip install log-anomaly-detector==0.0.2
安裝需要幾個小時,之前的版本使用UI Command時會有bug,作者在0.0.2版本中修復了
查看是否安裝成功:
log-anomaly-detector --help
報錯解決:
- 報錯1:
在issue里提了這個錯誤,作者表示這是因為他們采用了某個git commit當做依賴,這是個bug,需要該項目的作者解決。
暫時只能采用這個解決辦法:
- 報錯2:
解決方法:
2. 示例
Command
參數及其用法(方括號中為可選參數):
log-anomaly-detector [main-options] <command> <subcommand> [subcommand-options] [parameters]
首先去github上clone整個項目
git clone https://github.com/AICoE/log-anomaly-detector.git
測試用例:
這里有個bug,需要修改 config_files/.env_cmn_log_fmt_config.yaml 文件的前兩行為1行:
STORAGE_DATASOURCE: "local"正常運行頁面:
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:123456@3.3.6.12/factstore" export CUSTOMER_ID="test1" log-anomaly-detector --metric-port 8081 ui --port 9999可以打開fact store(用來反饋false positive):
提交false positive成功:
3. 結構
該框架由三個組件組成。
機器學習Core(LAD Core)
包含自定義代碼以訓練模型并預測日志行是否異常。目前只有無監督方法,基于W2V(Word2vec)和SOM(自組織圖)。我們計劃添加更多模型。 監控(指標)
指標 ( Metrics)
為了在生產中監控此系統,利用了grafana和prometheus來可視化此機器學習系統的運行狀況。
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是一個單層的神經網絡,只有輸入層和競爭層兩層:
競爭層的神經元采用競爭的方式激活,每個神經元有一個權值向量www ,輸入向量 xxx 會激活與之最接近的神經元,這個神經元叫做獲勝神經元(winner)。
下圖展示了 SOM 的訓練過程。紫色區域表示訓練數據的分布狀況,白色網格表示從該分布中提取的當前訓練數據的映射。首先,SOM 節點位于數據空間的任意位置,最接近訓練數據的節點(黃色高亮部分)會被選中。它和網格中的鄰近節點一樣,朝訓練數據移動。在多次迭代之后,網格傾向于近似該種數據分布(下圖最右)。
最終的效果就是對數據進行了聚類,每個神經元代表一類。這一類所包含的數據,就是能夠使它競爭獲勝的那些數據。
訓練計算過程
Step 1:與其他神經網絡相同,需要將WeightsWeightsWeights初始化為很小的隨機數
Step 2:隨機取一個 輸入樣本XiX_iXi?
Step 3:遍歷競爭層中每一個節點:計算XiX_iXi?與節點之間的相似度(通常使用歐式距離),選取距離最小的節點作為優勝節點(winner node),有的時也叫BMU(best matching unit)
Step 4:根據鄰域半徑σσσ(sigma)確定優勝鄰域將包含的節點;并通過neighborhood function計算它們各自更新的幅度(基本思想是:越靠近優勝節點,更新幅度越大;越遠離優勝節點,更新幅度越小)
Step 5:更新優勝鄰域內節點的WeightWeightWeight
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需要修改。
總結
以上是生活随笔為你收集整理的log-anomaly-detector (LAD)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 粗识 HTML5 video 标签和MS
- 下一篇: (转)高并发高流量网站架构详解