Zabbix告警可以通过邮件,微信,电话,短信等方式发送告警消息。电话和短信需要向运营商购买相应的网关,需要付费;邮件和微信是免费的,可以根据业务需要选择相应的告警模式
部署前准备工作
先申请一个微信企业号:https://qy.weixin.qq.com
申请通过过登录该企业号
注:每个企业号有发送消息限制
据说是有消息数限制的
- 发消息频率。每企业不可超过200次/分钟;不可超过帐号上限数x30人次/天。例如:企业号的注册号的人数上限为200人,注册号一天可以发送200x30=6000人次/天,注意:1条消息发给100人算作100人次。
参考:企业号发布消息数限制
向微信企业号添加部门
向微信企业号新增成员。添加成员后,会生成一个二维码,需要用户扫描关注该微信企业号
创建应用(消息型应用),并给部门设置管理员(设置—权限管理–新建管理组)
要确认管理员能读取通讯录,可以使用应用发送消息
注意:这时需要管理员的CorpID和Secret
我们要准备这些东西:
- 一个微信企业号
- 企业号已经被部门成员关注
- 企业号里有一个可以发消息的应用
- 一个授权管理员,可以使用该应用给成员发消息
我们要取到这些信息:
- 成员账号
- 组织部门ID
- 应用ID
- CropID
- Secret
配置Zabbix之微信告警
调用微信接口:
调用微信接口需要一个调用接口的凭证:access_token
通过 :CropID 、Secret才能获取到access_token,但是获取到的token有效期为两分钟
http://qydev.weixin.qq.com/debug
Shell脚本
1 2 3
| curl -s -G url 获取 AccessToken curl --data url 传送凭证调用企业号接口 zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容
|
把脚本放到zabbix告警脚本目录下:
1 2 3 4 5
| [root@localhost etc] AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts [root@CentOS etc] [root@CentOS alertscripts] [root@CentOS alertscripts]
|
登录zabbix webGUI:管理–报警媒介类型–创建媒介类型
1 2 3 4
| {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE} 这三个参数在zabbix3.0上必须加上,否则无法发送消息
|
管理–用户–admin–报警媒介–添加:
创建Trigger和Action(略),发送选择微信
当条件满足Zabbix Trigger后会触发Action,然后Action调用微信API发送告警消息:
zabbix Action默认消息模版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 【告警】 {TRIGGER.NAME}\n 告警主机:{HOST.NAME}\n 主机IP: {HOST.IP}\n 告警时间:{EVENT.DATE} {EVENT.TIME} \n 告警等级:{TRIGGER.SEVERITY} \n 告警信息:{TRIGGER.NAME}\n 问题详情:{ITEM.NAME}:{ITEM.VALUE}\n 事件ID: {EVENT.ID}\n 触发器URL: {TRIGGER.URL}\n Item values:\n 1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}\n 2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}\n 3. {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): {ITEM.VALUE3}\n
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #!/bin/bash CropID='1234567890abcdefghi' Secret='12435dfh5ysdqwdMD4MI3ORUVpPnd9Q174mXP7' GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}') PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" function body() { local int AppID=1 企业号中的应用id local UserID=$1 部门成员id,zabbix中定义的微信接收者 local PartyID=3 部门id,定义了范围,组内成员都可接收到消息 local Msg=$(echo "$@" | cut -d" " -f3-) 过滤出zabbix中传递的第三个参数 printf '{\n' printf '\t"touser": "'"$User"\"",\n" printf '\t"toparty": "'"$PartyID"\"",\n" printf '\t"msgtype": "text",\n' printf '\t"agentid": "'" $AppID "\"",\n" printf '\t"text": {\n' printf '\t\t"content": "'"$Msg"\""\n" printf '\t},\n' printf '\t"safe":"0"\n' printf '}\n' } /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
|
部署多人接收微信告警消息
首先登录微信企业号(https://qy.weixin.qq.com/)
向微信企业号接收Zabbix告警消息组添加成员
这里在部署时设置好后就不需要在操作了
登录Zabbix Web Gui
管理–用户–admin–报警媒介–微信
测试
成功
附件:
weichat.sh
本文出自”Jack Wang Blog”:http://www.yfshare.vip/2017/04/13/Zabbix之微信-Wechat-告警/