前段时间用zabbix做监控系统后,有需求将报警信息同步到工单系统中,开始研究zabbix告警脚本
主要功能为:
- 发生告警后,将告警内容通过接口同步到工单系统
- 告警解决后,自动关闭工单系统中的工单
需要工单系统提供工单同步及关闭接口
shell 主要功能为解析传入参数,拼接参数,使用curl提交请求
具体脚本如下:
#!/bin/bash
errorlog=/var/log/zabbix/test.log
url_prefix='http://host:port/system/api/'
touser=$1
subject=`echo $2 | tr '\r\n' '\n'`
messages=`echo $3 | tr '\r\n' '\n'`
outsideid=`echo -e "${messages}" | grep "事件ID: " | cut -d ":" -f 2 | xargs -r echo `
echo -e "=====start=====\ntouser:${touser}\nsubject:${subject}\nmessage start:\n${messages}\nmessage end\noutsideid:${outsideid}\n" >> $errorlog 2>&1
function add(){
echo -e "开始新增工单信息[${outsideid}]开始....\n" >> $errorlog 2>&1
basemsg=`echo -e "$messages" | base64`
customercode=`echo -e "${messages}" | grep "所属项目编码: " | cut -d ":" -f 2 | xargs -r echo`
if [[ ! $customercode ]];
then
echo -e "传入参数内容不符合格式要求,内容中必须包含'所属项目编码: '" >> $errorlog 2>&1
end
fi
param="?qtype=3®istcode=xxx&rema=&customercode=${customercode}&outsideid=${outsideid}"
action="wfregist"
result=`curl -connect-timeout 1 -m 1 "${url_prefix}${action}${param}" --data-urlencode "qtitle=${subject}" -X POST -d "qdetail=${basemsg}"`
echo -e "远程接口返回信息:$result\n" >> $errorlog 2>&1
echo -e "新增工单信息[${outsideid}]结束...\n" >> $errorlog 2>&1
}
function close(){
echo -e "关闭工单信息[${outsideid}]开始..." >> $errorlog 2>&1
param="?outsideid=${outsideid}"
action="tsclose"
result=`curl -connect-timeout 1 -m 1 "${url_prefix}${action}${param}" -X GET`
echo -e "远程接口返回结果:$result\n" >> $errorlog 2>&1
echo -e "关闭工单信息[${outsideid}]结束...\n" >> $errorlog 2>&1
}
function end(){
echo -e "\n=====end=====" >> $errorlog 2>&1
exit 1
}
if [[ ! $outsideid ]];
then
echo -e "传入参数内容不符合格式要求,内容中必须包含'事件ID: '\n" >> $errorlog 2>&1
end
fi
if [[ "$subject" =~ ^告警:.* ]];
then
add
elif [[ "$subject" =~ ^告警已解除:.* ]];
then
close
else
echo -e "传入参数主题不符合格式要求,必须以'告警:'或'告警已解除:'开头\n" >> $errorlog 2>&1
end
fi
echo -e "\n=====end=====" >> $errorlog 2>&1
exit 0
动作中的操作格式:
标题:
告警: {HOST.NAME} - {EVENT.NAME}
内容:
发生时间: {EVENT.DATE} {EVENT.TIME}
主机: {HOST.NAME}
问题: {EVENT.NAME}
严重级别: {EVENT.SEVERITY}
所属项目编码: {INVENTORY.SOFTWARE}
事件ID: {EVENT.ID}
处理建议:
恢复格式:
标题:
告警已解除: {HOST.NAME} - {EVENT.NAME}
内容:
问题解除时间: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
问题持续时间: {EVENT.AGE}
发生时间: {EVENT.DATE} {EVENT.TIME}
主机: {HOST.NAME}
问题: {EVENT.NAME}
严重级别: {EVENT.SEVERITY}
所属项目编码: {INVENTORY.SOFTWARE}
事件ID: {EVENT.ID}
启用告警脚本
设置告警脚本的路径(默认开启)
vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
web界面中设置报警媒介
设置用户报警媒介
添加动作信息