zabbix4.0微信报警设置
系统环境:Centos7.4 Zabbix4.0
安装zabbix_server在之前的博文有写道,由于是内网环境,对外通讯仅通过一台代理服务器,并且邮件等端口也被封禁了,所以才考虑用微信报警的方式.
一.注册企业微信号
首先申请微信企业号: https://qy.weixin.qq.com/
注册后 添加一个子部门,此时默认部门ID为2
然后自建一个应用程序
可见范围添加上运维
然后点击应用与小程序查看AgentID和SecretID,并记录下来
点击我的企业,企业信息可以查看企业ID即CropID.
企业ID就是cropid xxxxxxxxxxxxxxxxxxx
AgentId 1000002
Secret 8ubvbvaUvq5W68qcEIFWcwVRI7ErfTl-68jV4Hs9noE
然后打开 https://work.weixin.qq.com/api/devtools/devtool.php测试是否ok
二.Shell脚本设置
[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix alertscripts]# vim weixin.sh
#!/bin/bash
###SCRIPT_NAME:wechat.sh###
###send message from weixin for zabbix monitor###
CropID=‘此处填写上面获取到的CorpID’
Secret=‘此处填写应用的Secret’
GURL=“https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=KaTeX parse error: Expected 'EOF', got '&' at position 7: CropID&̲corpsecret=Secret”
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F" ‘{print $10}’)
PURL=“https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken”
function body() {
#企业号中的应用id
local int AppID=这里填写AgentID
#部门成员id,zabbix中定义的微信接收者
local UserID=KaTeX parse error: Expected 'EOF', got '#' at position 11: 1 #̲部门id,定义了范围,组内成员…(echo “KaTeX parse error: Undefined control sequence: \n at position 39: … printf '{\̲n̲' print…UserID”"",\n"
printf ‘\t"toparty": "’"$PartyID""",\n"
printf ‘\t"msgtype": “text”,\n’
printf ‘\t"agentid": "’" KaTeX parse error: Can't use function '\"' in math mode at position 8: AppID "\̲"̲",\n" p…Msg"""\n"
printf ‘\t},\n’
printf ‘\t"safe":“0”\n’
printf ‘}\n’
}
/usr/bin/curl --data-ascii “$(body $1 $2 $3)” $PURL##
[root@zabbix alertscripts]# chown zabbix.zabbix weixin.sh
[root@zabbix alertscripts]# chmod 744 weixin.sh
测试
[root@zabbix alertscripts]# ./weixin.sh limingfan test test
{“errcode”:0,“errmsg”:“ok”,“invaliduser”:""}
注:limingfan为运维部门成员的账号
手机上也收到
若是通过代理上网的服务器,发现测试代码可以发送到手机上,但是实际发生故障会出现发送失败,那么需要在weixin.sh加上/etc/profile中的代理设置的内容。
三.zabbix网页端设置
脚本参数为
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
然后添加一个用于报警的用户
创建触发器动作
操作,恢复操作,Update operation都需设置发送消息到用户weixin
服务器发生故障!
\n
\n告警服务器:{HOSTNAME1}
\n告警服务器IP地址:{HOST.CONN}
\n告警时间:{EVENT.DATE} {EVENT.TIME}
\n告警等级:{TRIGGER.SEVERITY}
\n告警信息: {TRIGGER.NAME}
\n告警项目:{TRIGGER.KEY1}
\n问题详情:{ITEM.NAME}:{ITEM.VALUE}
\n发生: {TRIGGER.NAME}故障!
\n当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
\n事件 ID:{EVENT.ID}
服务器故障已恢复!
\n
\n告警服务器:{HOSTNAME1}
\n告警服务器IP地址:{HOST.CONN}
\n告警时间:{EVENT.DATE} {EVENT.TIME}
\n告警等级:{TRIGGER.SEVERITY}
\n告警信息: {TRIGGER.NAME}
\n告警项目:{TRIGGER.KEY1}
\n问题详情:{ITEM.NAME}:{ITEM.VALUE} {TRIGGER.NAME}已恢复!
\n当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
\n事件 ID:{EVENT.ID}
服务器:报警确认!
\n
\n确认人:{USER.FULLNAME}
\n时间:{ACK.DATE} {ACK.TIME}
\n确认信息如下:{ACK.MESSAGE}
\n问题服务器:{HOSTNAME1}
\n问题服务器IP:{HOST.CONN}
\n问题详情: {TRIGGER.NAME}
\n问题ID:{EVENT.ID}
然后手动触发一次报警
若要其他人也能收到报警信息,则用微信扫描 我的企业,微工作台.
还有就是通讯录一定要添加该成员