Zabbix監控Elastalert
阿新 • • 發佈:2018-12-27
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 }