EGADS框架處理流程分析
阿新 • • 發佈:2021-01-17
最近在搞異常檢測相關的工作,因此調研了業界常用的異常檢測系統。通過查閱相關資料,發現業界對雅虎開源的EGADS系統評價比較高,其git專案已有980個star。這周閱讀了專案的原始碼,梳理了系統框架的基本處理流程,整理成這篇文章。現分享給大家,希望對想了解EGADS系統工作原理的同學有所幫助。
## 1. 簡介
EGADS (Extensible Generic Anomaly Detection System 可擴充套件通用的異常檢測系統) 是雅虎開源的java庫,用於自動檢測大規模時序資料中的異常。它包含了許多異常檢測技術,適用於很多使用情況,只需要一個包,唯一依賴是java。EDADS的工作原理是,首先建立一個時間序列模型來計算時間t的預期值,然後通過對比時間t的預期值和實際值,計算出若干誤差E。EDADS自動確定E的閾值,並輸出最有可能的異常點。EGADS庫可以在各種各樣的情形中使用,以檢測具有各種季節性、趨勢和噪聲成分的時間序列中的異常點和變化點。
EGADS能夠準確、可擴充套件地檢測時間序列的異常。EGADS將預測和異常檢測分離成兩個獨立的元件,允許使用者將自己的模型新增到任何元件中。
## 2. 整體架構
EGADS框架由兩個重要部分組成:時間序列建模模組(TMM)和異常檢測模組(ADM)。給定一個時間序列,TMM元件對時間序列建模生成預期值,該值隨後被ADM消費並計算出異常評分。EGADS是作為一個框架構建的,可以很容易地整合到現有的監測基礎實施中。Yahoo內部的Yahoo監控服務(YMS)每秒處理數百萬的資料點。因此,有一個 可擴充套件的、準確的和自動化的異常檢測 對於YMS至關重要。基於此,EGADS可以編譯成一個輕量級jar包,並且很容易大規模部署。TMM和ADM可以在`main/java/com/yahoo/egads/models`找到。
EGADS系統將輸入資料轉化為時間序列,然後選擇一個時間序列模型應用於時間序列,構成時間序列建模模組(TSMM),再把異常檢測模型應用於時間序列建模模組輸出的預測值,構成異常檢測模組(ADM),最終把檢測出的異常點寫入DB。整體架構如下圖所示。
![egads系統整合](https://img2020.cnblogs.com/blog/2089037/202101/2089037-20210116233515489-1776675181.png)
## 3. 框架處理流程
EGADS的github上給出了一個簡單使用案例:
```shell
java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads src/test/resources/sample_config.ini src/test/resources/sample_input.csv
```
以github上的示例為例,通過閱讀EGADS原始碼,筆者將框架處理流程劃分為四部分:
1. 初始化配置檔案和輸入檔案
主函式載入配置檔案 `sample_config.ini` 和資料輸入檔案`sample_input.csv` ,並例項化輸入檔案的處理物件`FileInputProcessor` 。 這裡要說明一點,如果資料是以其他形式輸入的,如通過控制檯輸入,則需要示例化控制檯輸入的處理物件`StdinProcessor`.
2. 把輸入檔案轉化為TimeSeries列表
`FileInputProcessor` 負責把輸入檔案轉化