首先需要申请一个企业号,其实公众号也可以,不过脚本不一样。而且公众号任何人都可以关注,有泄密的风险。企业号只有指定的人可以关注,安全性较高。申请企业号,需要一个绑定你本人开户银行卡的微信号。
申请网址 https://qy.weixin.qq.com/
点击“立即注册”。根据提示注册企业号,到“选择类型”时,选择最右边的企业号。注意:企业描述中:“报警”是敏感词不能使用。登录之后,可以看到如下页面
填写信息:
申请完毕后,登录
在通讯录添加成员
注:这里的账号相当于你的企业账号,与微信号无关。必须先在此处创建用户,并且填写正确的微信号或者手机号,才可通过扫描二维码关注该企业号(知道为何安全了吧)。
这里扫描二维码就可以关注。
添加应用
填写信息
填写完成后,出现你刚填写的应用
点击查看详情
记住应用ID,后面能用到!
点击设置,管理组,权限管理, 记住 CorpID Secret (后面能用到)
现在万事俱备,可以开始编写脚本了。
编写脚本
在/usr/lib/zabbix/alertscripts下编写脚本wechat.sh
脚本如下:
1 #!/bin/bash 2 ###SCRIPT_NAME:weixin.sh### 3 ###send message from weixin for zabbix monitor### 4 ###wuhf### 5 ###V1-2015-08-25### 6 7 CropID='************' 8 Secret='************' 9 GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" 10 Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}') 11 12 PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" 13 14 function body() { 15 local int AppID=****** 16 local UserID=$1 17 local PartyID=1 18 local Msg=$(echo "$@" | cut -d" " -f3-) 19 printf '{\n' 20 printf '\t"touser": "'"$User"\"",\n" 21 printf '\t"toparty": "'"$PartyID"\"",\n" 22 printf '\t"msgtype": "text",\n' 23 printf '\t"agentid": "'" $AppID "\"",\n" 24 printf '\t"text": {\n' 25 printf '\t\t"content": "'"$Msg"\""\n" 26 printf '\t},\n' 27 printf '\t"safe":"0"\n' 28 printf '}\n' 29 } 30 /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
注释:更新代码(其上可能调用的URL时效)
1 #!/bin/bash 2 3 CropID='wxe46cfc45d0c07e23' 4 Secret='takL9WW2Eo_Ww5AGENHR7mJA6nl89sz1ghbhpAE8Jus' 5 GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" 6 Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}') 7 PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" 8 function body() { 9 local int AppID=1 10 local UserID=@all 11 local Msg=$(echo "$@" | cut -d" " -f3-) 12 printf '{\n' 13 printf '\t"touser": "'"$UserID"\"",\n" 14 printf '\t"msgtype": "text",\n' 15 printf '\t"agentid": "'"$AppID"\"",\n" 16 printf '\t"text": {\n' 17 printf '\t\t"content": "'"$Msg"\""\n" 18 printf '\t},\n' 19 printf '\t"safe":"0"\n' 20 printf '}\n' 21 } 22 /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
以上CropID,Secret,AppID 填写自己微信号上的正确信息,否则无效!
chown -R zabbix:zabbix /usr/local/zabbix/alertscripts chmod 750 /usr/local/zabbix/alertscripts/wechat.sh
执行./wechat.sh 1 1 test 看自己微信是否能收到东西。
如果能的话,继续下一步。反之检查上面有什么问题
然后到zabbix上添加
点击管理---媒体类型---创建媒体类型
管理---用户---添加用户
组态---动作---添加动作
名称:weixin_action 默认接收人:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
默认信息:
告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME} 告警项目:{TRIGGER.KEY1} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1} 事件ID:{EVENT.ID}
恢复信息:打钩
恢复主旨:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
恢复信息:
告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME} 告警项目:{TRIGGER.KEY1} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1} 事件ID:{EVENT.ID}
已启用:打钩
最后测试,是否会微信报警。停掉一台机子
表示成功!
附加:在搭建的过程中,我碰见了一个问题就是,
在虚拟机上用命令测试,微信能收到信息。但是到zabbix上就不成功,并且zabbix上动作显示已送达!详细请看下一篇文档!