您好,登錄后才能下訂單哦!
現平臺已大量使用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/"http://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
}
腳本傳送門
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。