官方文档:https://elastalert.readthedocs.io/en/latest/

##钉钉告警插件

https://github.com/xuyaoqiang/elastalert-dingtalk-plugin

流程:

elastalert读取指定elasticsearch索引,根据规则匹配,如果匹配到就发邮件报警

安装elastalert

python必须得2.7以上

cd /usr/local/src

安装Python3

 yum -y install wget openssl openssl-devel gcc gcc-c++

wget -c https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
 tar xf Python-3.6.2.tgz
 cd Python-3.6.2
  ./configure --prefix=/usr/local/python --with-openssl
   make && make install

 设置软连接

ln -s /usr/local/python/bin/python3 /usr/bin/python
ln -s /usr/local/python/bin/pip3 /usr/bin/pip
pip install --upgrade pip
由于yum只支持python2,所有需要编辑yum;

1、cd进入/usr/bin

vi yum

将#/usr/bin/python  改为#/usr/bin/python2

 

2、再cd /usr/libexec/,进入/usr/libexec目录

vi urlgrabber-ext-down,修改urlgrabber-ext-down文件

同样将#/usr/bin/python  改为#/usr/bin/python2

这样就可以使用yum了。

 

 

下载elastalert 安装包

    wget https://github.com/Yelp/elastalert/archive/v0.2.1.tar.gz
    tar xf v0.2.1.tar.gz
    cd elastalert-0.2.1

安装 cd elastalert-0.2.1

    
pip install "elasticsearch<7,>6"
pip install -r requirements.txt
 python setup.py install

 

    ll /usr/local/python/bin/elastalert*  可以看到生成的几个命令。
    ln -s /usr/local/python/bin/elastalert* /usr/bin

 

[root@localhost elastalert-0.2.1]# ll
总用量 96
-rw-rw-r--. 1 root root 10707 8月   9 05:56 changelog.md
-rw-r--r--. 1 root root   206 12月 10 14:10 config.yaml
-rw-rw-r--. 1 root root  3321 8月   9 05:56 config.yaml.example
-rw-rw-r--. 1 root root   261 8月   9 05:56 docker-compose.yml
-rw-rw-r--. 1 root root   264 8月   9 05:56 Dockerfile-test
drwxrwxr-x. 3 root root    36 8月   9 05:56 docs
drwxrwxr-x. 3 root root  4096 12月 10 14:17 elastalert
-rw-rw-r--. 1 root root 11359 8月   9 05:56 LICENSE
-rw-rw-r--. 1 root root   528 8月   9 05:56 Makefile
-rw-rw-r--. 1 root root    74 8月   9 05:56 pytest.ini
-rw-rw-r--. 1 root root 15705 8月   9 05:56 README.md
-rw-rw-r--. 1 root root   107 8月   9 05:56 requirements-dev.txt
-rw-rw-r--. 1 root root   449 8月   9 05:56 requirements.txt
drwxrwxr-x. 2 root root  4096 12月 10 16:58 rules
-rw-rw-r--. 1 root root   100 8月   9 05:56 setup.cfg
-rw-rw-r--. 1 root root  1711 8月   9 05:56 setup.py
-rw-rw-r--. 1 root root   780 8月   9 05:56 supervisord.conf.example
drwxrwxr-x. 2 root root   249 8月   9 05:56 tests
-rw-rw-r--. 1 root root   606 8月   9 05:56 tox.ini
[root@localhost elastalert-0.2.1]# 

 

 安装之后会自带三个命令

  • elastalert-create-index:ElastAlert会把执行记录存放到一个ES 索引中,该命令就是用来 创建这个索引的,默认情况下,索引名叫elastalert_status。其中有4个 _type,都有 自己的@timestamp字段,所以同样也可以用kibana,来查看这个索引的日志记录情况。

  • elastalert-rule-from-kibana:从Kibana3已保存的仪表盘中读取Filtering设置,帮助生成config.yaml里的配置。不过注意,它只会读取filtering,不包括queries。

  • elastalert-test-rule:测试自定义配置中的rule设置。

设置elastalert索引
elastalert-create-index
New index name (Default elastalert_status)
Name of existing index to copy (Default None)
New index elastalert_status created
Done!

 设置配置文件

[root@ops-95 elastalert]# pwd
/usr/local/src/elastalert-0.1.28/elastalert

 

[root@ops-95 elastalert]# cat  config.yaml  |grep -v "^#"
# 用来加载rule的目录,默认是example_rules
rules_folder: rules
# 用来设置定时向elasticsearch发送请求,也就是告警执行的频率
run_every:
  minutes: 1
# 用来设置请求里时间字段的范围
buffer_time:
  minutes: 15

es_host: 192.168.0.71
es_port: 9200


# elastalert产生的日志在elasticsearch中的创建的索引
writeback_index: elastalert_status
# 失败重试的时间限制
alert_time_limit:
  days: 2

 设置规则

[root@ops-95 yqh_rules]# pwd
/usr/local/src/elastalert-0.1.28/yqh_rules
[root@ops-95 yqh_rules]# ll
总用量 8
-rwxr-xr-x 1 root root   49 1月  31 15:53 email_auth.yaml
-rwxr-xr-x 1 root root 1529 1月  31 16:50 yqh_frequency.yaml

 

[root@ops-95 yqh_rules]# cat yqh_frequency.yaml |grep -v "^#"

es_host: 192.168.0.71
es_port: 9200
name: yqh rule #规则名字必须是唯一的
type: frequency
index: api01.nginx_access ## 监控的索引
num_events: 5  ## 限定时间内,发生的次数
timeframe:
  hours: 1  ## 一小时内有5个错误日志写进ES的话就发送邮件

filter:
  - regexp:   ##以正则的方式匹配, “.*” 就是已有日志写进es就算
     message: ".*"

alert:
- "email"

email:
- "zhangshd@91power.com"
- "347042860@qq.com"

smtp_host: smtp.qq.com
smtp_port: 25

smtp_auth_file: /usr/local/src/elastalert-0.1.28/yqh_rules/email_auth.yaml
from_addr: zhangshd@91power.com

 如果qq的不可以的话,可以用163的smtp

smtp_host: smtp.163.com
smtp_port: 25
email_reply_to: zs1483959314@163.com
from_addr: zs1483959314@163.com

 

filter:
 - term:
     status: "404"
#截取的字段status为404   1分钟出现4次报警

 

[root@ops-95 yqh_rules]# cat email_auth.yaml 
user: "zhangshh@91power.com"
password: "123.com" 这里是授权码

 

 启动elastalert

elastalert --config /usr/local/src/elastalert-0.2.1/config.yaml --rule /usr/local/src/elastalert-0.2.1/wg_rules/nginx_007.yaml --verbose

python -m elastalert.elastalert --config elastalert/config.yaml  --verbose --rule yqh_rules/yqh_frequency.yaml

也可以用supervisorctl 管理elastalert

[root@ops-95 ~]# cat /etc/supervisord/elastalert.conf    
[program:elastalert]
# running globally
directory=/usr/local/src/elastalert-0.1.28/
command=python -m elastalert.elastalert --config elastalert/config.yaml  --verbose --rule yqh_rules/yqh_frequency.yaml
process_name=%s(program)
autorestart=true
startsecs=15
stopsignal=INT
stopasgroup=true
killasgroup=true
stderr_logfile=/var/log/elastalert_stderr.log
stderr_logfile_maxbytes=5MB
 

也可以编辑systemctl

# /usr/lib/systemd/system
# vi elastalertd.service
[Unit]
Description=elastalertd
After=elasticsearch.service
[Service]
Type=simple
User=root
Group=root
Restart=on-failure
WorkingDirectory=/data/elastalert
ExecStart=/usr/bin/elastalert --config /data/elastalert/config.yaml --rule /data/elastalert/example_rules/my_rule.yaml
[Install]
WantedBy=multi-user.target

 

开机自启动:systemctl enable elastalertd
启动:systemctl start elastalertd.service
关闭: systemctl stop elastalertd.service
查看状态: systemctl status elastalertd.service

 

告警信息: