zabbix 自定义告警脚本

前段时间用zabbix做监控系统后,有需求将报警信息同步到工单系统中,开始研究zabbix告警脚本

主要功能为:

  1. 发生告警后,将告警内容通过接口同步到工单系统
  2. 告警解决后,自动关闭工单系统中的工单

需要工单系统提供工单同步及关闭接口

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&registcode=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界面中设置报警媒介
在这里插入图片描述

设置用户报警媒介

添加动作信息
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Zabbix 是一款开源的企业级监控软件。在 Zabbix 中,可以设置各种告警方式,其中包括钉钉告警。本文将介绍如何编写钉钉的 Shell 告警脚本。 首先,我们需要在钉钉中创建一个机器人。在钉钉群中,点击右上角的设置按钮,选择机器人管理,然后点击创建机器人。选择自定义机器人,设置机器人名称和头像,然后复制 Webhook 地址。 接下来,我们需要编写 Shell 脚本。可以使用任何编辑器,比如 vim,nano 或者 gedit。以下是一个简单的 Shell 脚本示例: ```bash #!/bin/bash # 钉钉机器人 webhook 地址 url="https://oapi.dingtalk.com/robot/send?access_token=XXXXXXXX" # 消息内容 message="$1" # 发送 POST 请求 curl -H "Content-Type: application/json" -X POST -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$message\"}}" $url ``` 在脚本中,首先设置了钉钉机器人的 Webhook 地址。然后获取了消息内容,该内容作为脚本的第一个参数传入。最后,使用 curl 命令发送 POST 请求,将消息内容作为 JSON 格式发送给钉钉机器人。 现在,将脚本保存为 dingding.sh,并将其放置在 Zabbix 的 alertscripts 目录中。该目录通常位于 /usr/lib/zabbix/alertscripts。然后,将脚本的权限设置为可执行: ```bash chmod +x /usr/lib/zabbix/alertscripts/dingding.sh ``` 接下来,在 Zabbix 中创建一个新的媒介类型。在 Zabbix 管理界面中,选择 Administration -> Media types。然后点击 Create media type 按钮。 在弹出窗口中,输入以下信息: - Name: 钉钉告警 - Type: Script - Script name: dingding.sh - Script parameters: {ALERT.MESSAGE} 然后点击 Add 按钮进行保存。 最后,在 Zabbix告警动作中,选择钉钉告警媒介类型,并将钉钉机器人 Webhook 地址作为参数传入。现在,当 Zabbix 监控出现问题时,将会通过钉钉机器人发送告警消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值