Zabbix告警可以通过邮件,微信,电话,短信等方式发送告警消息。电话和短信需要向运营商购买相应的网关,需要付费;邮件和微信是免费的,可以根据业务需要选择相应的告警模式

部署前准备工作

先申请一个微信企业号:https://qy.weixin.qq.com
申请通过过登录该企业号

注:每个企业号有发送消息限制
据说是有消息数限制的

  • 发消息频率。每企业不可超过200次/分钟;不可超过帐号上限数x30人次/天。例如:企业号的注册号的人数上限为200人,注册号一天可以发送200x30=6000人次/天,注意:1条消息发给100人算作100人次。
    参考:企业号发布消息数限制

向微信企业号添加部门
weichat_qiyehao

向微信企业号新增成员。添加成员后,会生成一个二维码,需要用户扫描关注该微信企业号
qiyehao_adduser

创建应用(消息型应用),并给部门设置管理员(设置—权限管理–新建管理组)
create_application
qiyehao_app_set

要确认管理员能读取通讯录,可以使用应用发送消息
注意:这时需要管理员的CorpID和Secret

我们要准备这些东西:

  • 一个微信企业号
  • 企业号已经被部门成员关注
  • 企业号里有一个可以发消息的应用
  • 一个授权管理员,可以使用该应用给成员发消息

我们要取到这些信息:

  • 成员账号
  • 组织部门ID
  • 应用ID
  • CropID
  • Secret

配置Zabbix之微信告警

调用微信接口:
调用微信接口需要一个调用接口的凭证:access_token
通过 :CropID 、Secret才能获取到access_token,但是获取到的token有效期为两分钟
http://qydev.weixin.qq.com/debug
weichat_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]# grep -i '^AlertScriptsPath' zabbix_server.conf
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
[root@CentOS etc]# cd /usr/local/zabbix/share/zabbix/alertscripts
[root@CentOS alertscripts]# chmod 755 weixin.sh
[root@CentOS alertscripts]# chown zabbix:zabbix weixin.sh

登录zabbix webGUI:管理–报警媒介类型–创建媒介类型
zabbix_weichat_warnning

1
2
3
4
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
这三个参数在zabbix3.0上必须加上,否则无法发送消息

管理–用户–admin–报警媒介–添加:
zabbix_wechat_mess

创建Trigger和Action(略),发送选择微信
zabbix_wechat_action

当条件满足Zabbix Trigger后会触发Action,然后Action调用微信API发送告警消息:
image

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
###SCRIPT_NAME:weixin.sh###
###send message from weixin for zabbix monitor###
###wuhf###
###V1-2015-08-25###
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告警消息组添加成员
weichat_qiyehao_adduser
weichat_qiyehao_adduser
weichat_qiyehao_adduser

这里在部署时设置好后就不需要在操作了
image

登录Zabbix Web Gui
管理–用户–admin–报警媒介–微信
zabbix_weichat_mess_adduser

测试
test_weichat_mess_success
成功

附件:
weichat.sh


本文出自”Jack Wang Blog”:http://www.yfshare.vip/2017/04/13/Zabbix之微信-Wechat-告警/