ElastAlert安裝與使用

安裝

官方文檔:https://elastalert.readthedocs.io/en/latest/running_elastalert.html

我簡單總結一下附帶我遇到的坑:

環(huán)境

  • Elasticsearch
  • Python 2.7 坑:一定要2.7,2.6和3.*都有問題
  • Ubuntu : python-pip python-dev libffi-dev libssl-dev
  • centos: gcc libffi-devel python-devel openssl-devel python-setuptools

安裝

可以setup.py腳本安裝也可以使用pip 安裝,但是必須從git上拉下來,因為好多配置文件是必須要有的。

#安裝依賴包
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.yaml

#將從該文件夾下讀取*.yaml配置文件
rules_folder: your_rule_folder
#查詢es中 elastalert_status 索引的頻率,也可以是minutes,days 等等
run_every:
  hours: 1
# 每兩分鐘查詢一次es 匹配 rules 的數(shù)據(jù),存放到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

規(guī)則配置 your_rule.yaml

例子:

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的記錄發(fā)送給你,如果你想獲取多條需要使用聚合功能,
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 即執(zhí)行一個命令,比較靈活一些
alert:
- command
#- email
pipe_match_json: true #把參數(shù)以json文件流的形式傳入,python中以 sys.stdin.read()接受
command: ["/root/elastalert/your_rule_folder/command_alert.py"]

rule設置各自獨立以文件方式存儲在rules_folder設置的目錄里。其中可以定義下面這些參數(shù):

  • name 配置,每個規(guī)則需要有自己獨立的名稱,一旦重復,進程將無法啟動。
  • type 配置,選擇某一種數(shù)據(jù)驗證方式。
  • index 配置,從某類索引里讀取數(shù)據(jù),目前已經支持Ymd格式,需要先設置use_strftime_index:true,然后匹配索引,配置形如:index:logstash-es-test-%Y。%m。%d,表示匹配logstash-ES-測試名稱開頭,以年月日作為索引后綴的索引。
  • filter 配置,設置向ES請求的過濾條件。
  • timeframe 配置,累積觸發(fā)報警的時長。
  • alert 配置,設置觸發(fā)報警時執(zhí)行哪些報警手段。

type :不同的類型還有自己獨特的配置選項。目前ElastAlert有以下幾種自帶ruletype:

  • any:只要有匹配就報警;
  • blacklistcompare_key字段的內容匹配上blacklist數(shù)組里任意內容;
  • whitelistcompare_key字段的內容一個都沒能匹配上whitelist數(shù)組里內容;
  • change:在相同query_key條件下,compare_key字段的內容,在timeframe范圍內發(fā)送變化;
  • frequency:在相同query_key條件下,timeframe范圍內有num_events個被過濾出來的異常;
  • spike:相同在query_key條件下,兩個前后timeframe范圍內數(shù)據(jù)量相差比例超過spike_height??梢云渲型ㄟ^spike_type設置具體漲跌方向的英文up,down,both。可以還通過threshold_ref設置要求上一個周期數(shù)據(jù)量的下限,threshold_cur設置要求當前周期數(shù)據(jù)量的下限,如果數(shù)據(jù)量不到下限,也不觸發(fā);
  • flatlinetimeframe范圍內,量數(shù)據(jù)小于threshold閾值;
  • new_termfields字段新出現(xiàn)之前terms_window_size(默認30天)范圍內最多的terms_size(默認50)個結果以外的數(shù)據(jù);
  • cardinality:在相同query_key條件下,timeframe范圍內cardinality_field的值超過max_cardinality或者低于min_cardinality。

初始化

安裝完成后會自帶三個命令:

  • elastalert-create-index ElastAlert會腳執(zhí)行記錄存放到一個ES索引中,該命令就是用來創(chuàng)建這個索引的,默認情況下,索引名叫elastalert_status。其中有4個_type,都有自己的@timestamp字段,所以同樣也可以用kibana來查看這個索引的日志記錄情況。
  • elastalert-rule-from-kibana從Kibana已保存的儀表盤中讀取Filtering設置,幫助生成config.yaml里的配置。不過注意,它只會讀取過濾,不包括查詢。
  • elastalert-test-rule測試自定義配置中的規(guī)則設置。

直接運行:

  1. elastalert-create-index

  2. 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文件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容