Zabbix监控Elastalert
现平台已大量使用Elastalert
作为ELK日志告警器,上周出现某个index告警查询异常;导致无法正常告警,在还没计划好构建高可用方案前,先确保能够第一时间知道Elastalert
状态是否正常。
Elastalert配置文件中writeback_index
回写的index,查询同时,向ES的index
记录状态,会生成index_silence
index_error
index_status
。
index_error
记录错误信息.index_status
记录状态信息.在查看状态信息记录的时候,发现与Elastalert
告警查询异常时间吻合,所以我们只需要用Zabbix
监控该index就OK.
查询十五分钟内的数据,生成自发现字典格式
由于我的rulename都是由字符与空格组成,所以替换成``号.
get_rules(){ get_scroll=$(curl -s -XPOST "${ES_HOST}:${ES_PORT}/${INDEX}/_search?size=1000&_source=rule_name" \ -H 'Content-Type: application/json' -d '{ "query" : { "match_all" : {} }}') result=$(echo $get_scroll |grep -oP "(?<=rule_name\"\:)\"[^\"]*\""|sort|uniq|sed 's/"//g'|sed 's/ /_/g'|tr '\n' '|') data=(${result//|/ }) length=${#data[@]} printf "{\n" printf '\t'"\"data\":[" for ((i=0;i<$length;i++)) do item=${data[$i]} printf '\n\t\t{' printf "\"{#RULE_NAME}\":\"${item}\"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf "\n\t]\n" printf "}\n" exit 0 }
查询某个index的状态
get_status(){ local rule=${1//_/ } query=$(cat << EOF{ "query" : { "bool": { "must": [ {"match" : {"rule_name": "${rule}"}}, {"range" : {"@timestamp":{"gte":"now-15m"}}} ] } }} EOF) get_data=$(curl -s -XPOST "${ES_HOST}:${ES_PORT}/${INDEX}/_search?size=1" \ -H 'Content-Type: application/json' -d "${query}") result=$(echo $get_data |grep -oP "(?<=rule_name\"\:)\"[^\"]*\"") echo "${rule}" |grep -qw "${result//\"/}" && echo 0 || echo 1 exit 0}
后记
脚本传送门
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。