日志内容分析
INFO:elastalert:Ran mgt-nginx-error-4xx from 2020-03-30 21:45 CST to 2020-03-30 21:54 CST: 240 query hits (240 already seen), 0 matches, 0 alerts sent
时间区间说明:
2020-03-30 21:45 CST to 2020-03-30 21:54 CST 为A区间
A区间是由buffer_time来控制的,该区间是若buffer_time是15,那么是滚动式的,比如当前时间是21:50
那么当前的时间区间就是21:35-21:50 ,若当前时间是21:51则时间区间为21:36-21:51
各项字段说明:
240 query hits 表示在A区间,累计有240个请求满足匹配条件
240 already seen 表示在A区间前滚动一分钟(21:45-21:53)已经处理过的
0 matches 表示条数为,不满足阈值条件。若阈值为200次/1分钟,那么实际请求300次/1分钟,matches的值为1(300/200去小数点),实际请求700次/1分钟则matches的值为3(700/200去小数点)
0 alerts sent 表示本次是否触发警报,0表示未触发。1表示触发一次警报
两个注意事项:
- Elastalert在维护过程中,中断时间期间的数据若大于buffer_time,则elastaler只会采集最近buffer_time区间的数据,然后进行评估,评估的方式依然根据日志实际访问时间评估每分钟是否满足报警条件,而不是期间累计得到总数去匹配规则
- 不满足Query的查询条件的将不会被hit所计算
钉钉报警推送参考
es_host: mgt-elk-esmaster1
es_port: 9200
name: online-nginx-error-5xx
type: frequency
index: online-nginx-access-*
num_events: 600
timeframe:
minutes: 1
filter:
- query:
query_string:
query: "status>= 500 AND status < 600"
alert:
- "elastalert_modules.dingtalk_alert.DingTalkAlerter"
dingtalk_webhook: "https://oapi.dingtalk.com/robot/send?access_token=xxx"
dingtalk_msgtype: "text"
realert:
minutes: 1
exponential_realert:
hours: 1
alert_subject: "[ElastAlert] online-nginx-5xx overload"
alert_text_type: alert_text_only
alert_text: |
[ElastAlert] online-nginx-5xx overload
索引: online-nginx-access-*
描述: 5xx >=600次/每分钟
Elastalert启动管理脚本
[root@mgt-elastalert-server1 elastalert]# cat elastalert.sh
#!/bin/bash
case "$1" in
start)
/usr/bin/cd /data1/elastalert/
/usr/bin/nohup python3 -m elastalert.elastalert --verbose &
;;
stop)
/usr/bin/pkill python3
;;
restart)
/usr/bin/pkill python3
/usr/bin/cd /data1/elastalert/
/usr/bin/nohup python3 -m elastalert.elastalert --verbose &
;;
*)
echo " input [start/stop/restart]"
esac