官方文档: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
告警信息: