官方文檔:elastalert.readthedocs.io/en/latest/r…html
我簡單總結一下附帶我遇到的坑:java
能夠setup.py腳本安裝也可使用pip 安裝,可是必須從git上拉下來,由於好多配置文件是必需要有的。python
#安裝依賴包
yum install gcc libffi-devel python-devel openssl-devel python-setuptools
#安裝
git clone https://github.com/Yelp/elastalert.git
pip install -r requirements.txt
pip install "setuptools>=11.3"
python setup.py install
#或者 pip install elastalert
Elasticsearch 5.0+:
pip install "elasticsearch>=5.0.0"
Elasticsearch 2.X:
pip install "elasticsearch<3.0.0"
複製代碼
cd elastalert
cp config.yaml.example config.yaml #基本信息
vim config.yaml
複製代碼
基本配置 config.yamlgit
#將從該文件夾下讀取*.yaml配置文件
rules_folder: your_rule_folder
#查詢es中 elastalert_status 索引的頻率,也能夠是minutes,days 等等
run_every:
hours: 1
# 每兩分鐘查詢一次es 匹配 rules 的數據,存放到elastalert_status中
buffer_time:
minutes: 2
#host
es_host: 127.0.0.1
#port
es_port: 9200
# Option basic-auth username and password for Elasticsearch
es_username: username
es_password: pwd
複製代碼
規則配置 your_rule.yamlgithub
例子:apache
es_host: 127.0.0.1
es_port: 9200
es_username: xxx
es_password: xxx
# (Required)
# Rule name, must be unique
# 給rule一個惟一的名字
name: prod
# (Required)
# Type of alert.下面各類type詳細介紹
type: any
#注意了!!!!
#這是最大的坑,並且官方文檔也沒有比較明確的說明,elastalert只會把一條hit的記錄發送給你,若是你想獲取多條須要使用聚合功能,
aggregation:
# "* * * * *" means: run as the "run_every" in config.yaml
schedule: "* * * * *"
aggregate_by_match_time: true
# (Required)
# sd asd Index to search, wildcard supported
index: '*-prod-*'
# (Required)
#這裏使用的是ES 的DSL語句作過濾條件
filter:
#邏輯組合
- bool:
#必須存在
must:
- match:
level: "ERROR"
#必須不存在,即過濾掉的
must_not:
- match:
stackTrace: "org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe"
- match:
message: "[SUCCESS]"
# (Required)
# 報警方式,有郵件 jira等等,github上還有微信等,官網介紹https://elastalert.readthedocs.io/en/latest/ruletypes.html#alerts
#我用的是command 即執行一個命令,比較靈活一些
alert:
- command
#- email
pipe_match_json: true #把參數以json文件流的形式傳入,python中以 sys.stdin.read()接受
command: ["/root/elastalert/your_rule_folder/command_alert.py"]
複製代碼
rule設置各自獨立以文件方式存儲在rules_folder
設置的目錄裏。其中能夠定義下面這些參數:json
name
配置,每一個規則須要有本身獨立的名稱,一旦重複,進程將沒法啓動。type
配置,選擇某一種數據驗證方式。index
配置,從某類索引裏讀取數據,目前已經支持Ymd格式,須要先設置use_strftime_index:true,而後匹配索引,配置形如:index:logstash-es-test-%Y。%m。%d,表示匹配logstash-ES-測試名稱開頭,以年月日做爲索引後綴的索引。filter
配置,設置向ES請求的過濾條件。timeframe
配置,累積觸發報警的時長。alert
配置,設置觸發報警時執行哪些報警手段。type :不一樣的類型還有本身獨特的配置選項。目前ElastAlert有如下幾種自帶ruletype:vim
any
:只要有匹配就報警;blacklist
:compare_key
字段的內容匹配上blacklist
數組裏任意內容;whitelist
:compare_key
字段的內容一個都沒能匹配上whitelist
數組裏內容;change
:在相同query_key
條件下,compare_key
字段的內容,在timeframe
範圍內發送變化;frequency
:在相同query_key
條件下,timeframe
範圍內有num_events
個被過濾出來的異常;spike
:相同在query_key
條件下,兩個先後timeframe
範圍內數據量相差比例超過spike_height
。能夠其中經過spike_type
設置具體漲跌方向的英文up
,down
,both
。能夠還經過threshold_ref
設置要求上一個週期數據量的下限,threshold_cur
設置要求當前週期數據量的下限,若是數據量不到下限,也不觸發;flatline
:timeframe
範圍內,量數據小於threshold
閾值;new_term
:fields
字段新出現以前terms_window_size
(默認30天)範圍內最多的terms_size
(默認50)個結果之外的數據;cardinality
:在相同query_key
條件下,timeframe
範圍內cardinality_field
的值超過max_cardinality
或者低於min_cardinality
。安裝完成後會自帶三個命令:centos
elastalert_status
。其中有4個_type,都有本身的@timestamp
字段,因此一樣也能夠用kibana來查看這個索引的日誌記錄狀況。config.yaml
裏的配置。不過注意,它只會讀取過濾,不包括查詢。直接運行:數組
elastalert-create-index
elastalert-test-rule your_rule_folder/your_rule.yaml
複製代碼
在elastalert/下運行
python -m elastalert.elastalert --config ./config.yaml --verbose --rule your_rule_folder/your_rule.yaml
複製代碼
-m 至關於import,叫作當作模塊來啓動
--config 指定配置文件 默認./config.yaml
--verbose 把詳細信息打印出來
--rule 指定 rule文件