环境
centos7.6
ELK:日志收集框架,elastalert 从其中的es查询告警。
python3.6:或以上,一般系统都自带了
安装elastalert
下载
git clone https://github.com/Yelp/elastalert.git
安装
cd elastalert/
pip install -r requirements.txt
python setup.py install -i https://pypi.tuna.tsinghua.edu.cn/simple
ln -s /usr/local/python3/bin/elastalert* /usr/bin
-i https://pypi.tuna.tsinghua.edu.cn/simple
指定源,加快下载速度。如果出现超时,重试即可
安装完成后,会看到四个命令:
- elastalert:主执行程序
- elastalert-create-index:创建一个索引,elastalert会把执行记录放到这个索引中,默认情况下,索引名为elastalert_status.
- elastalert-rule-from-kibana:从Kibana3已保存的仪表盘中读取Filtering设置,帮助生成config.yaml里的配置。不过注意,它只会读取filtering,不包括queries
- elastalert-test-rule:测试自定义配置中的rule设置。
配置elastalert
主配置文件config.yml
# 用来加载rule的目录,默认是example_rules
rules_folder: rules
# 用来设置定时向elasticsearch发送请求,也就是告警执行的频率
run_every:
seconds: 30
# 用来设置请求里时间字段的范围
buffer_time:
seconds: 30
# elasticsearch的host地址,端口
es_host: 192.168.1.89
es_port: 9200
# elastalert产生的日志在elasticsearch中的创建的索引
writeback_index: elastalert_status
writeback_alias: elastalert_alerts
# 失败重试的时间限制
alert_time_limit:
days: 2
创建索引
elastalert-create-index
在ELK中查看索引
curl 192.168.1.89:9200/_cat/indices?v
创建告警规则
es_host: 192.168.1.100
es_port: 9200
name: warning rule
type: frequency
index: filebeat-* #我这里是filebeat直接保存日志到es
num_events: 5
timeframe:
minutes: 10
filter:
- query:
query_string:
query: "message: WARN OR ERROR" #查询warn和error日志
smtp_host: smtp.exmail.qq.com
smtp_port: 25
smtp_auth_file: /data/elastalert/example_rules/smtp_auth_file.yaml
from_addr: xxx@xx.com
alert:
- "email"
email:
- "dev@dev.com" #接收告警邮件的邮箱
smtp_auth_file.yaml
user: "*****@**********.com"
password: "********"
测试规则配置
通过下面的命令测试配置是否正确
elastalert-test-rule --config ../config.yaml my_rule.yaml
启动
前台启动
elastalert --verbose --config config.yaml --rule example_rules/my_rule.yaml
系统服务启动
[root@docker-server system]# cat /usr/lib/systemd/system/elastalertd.service
[Unit]
Description=elastalertd
[Service]
Type=simple
User=root
Group=root
Restart=on-failure
WorkingDirectory=/data/elastalert
ExecStart=/usr/bin/elastalert --configconfig.yaml --rule rules/my_rule.yaml
[Install]
WantedBy=multi-user.target
systemctl restart elastalertd.service
systemctl stop elastalertd.service
systemctl daemon-reload