实现zabbix经过微信报警的方式也是经过脚原本实现,与邮件报警不一样的是,脚本调用的微信的相关接口的获取相对复杂一点 php
一、申请一个微信公众号(企业号) python
申请方法很少说,若是已申请请忽略 web
二、在微信企业号上新建应用 json
上传应用logo,填写应用名称,应用介绍等 api
应用建立完以后查看并启用应用,同时会生成应用的AgentId以及Secret,这个在后面步骤会有用 服务器
三、接口调用测试 微信
点击:API文档——>开发者工具——>接口调试工具,找不到就直接点这个地址 app
http://work.weixin.qq.com/api/devtools/devtool.php 工具
corpid为建立的企业号生成的corpid post
Corpsecret就是在第2步中建立的应用所生成的Secret,填入后点击检查问题,生成请求地址和返回结果,确认无误后进行下一步
四、关于脚本
脚本的存放目录为/usr/lib/zabbix/alertscripts,脚本内容不作过多说明,须要了解含义请自行百度,脚本内容以下
[root@zabbix alertscripts]# cat weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S',
filename = os.path.join('/tmp','weixin.log'),
filemode = 'a')
corpid='微信企业号corpid'
appsecret='应用的Secret'
agentid=应用的id
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
"touser": touser,
# "toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
脚本中须要填写微信企业号corpid,应用的Secret以及应用的id,脚本中还定义了日志文件为/tmp/weixin.log
脚本编写完成以后须要为脚本添加执行权限
[root@zabbix alertscripts]# chmod +x weixin.py
脚本后面内容中的一些参数touser,toparty,msgtype,agentid,content,safe是微信企业号中定义的参数名称,说明文档见腾讯企业号开发者文档https://work.weixin.qq.com/api/doc
目前微信企业号中的部门成员帐号也就是咱们使用的touser参数是部门成员的帐号,这个帐号在早起阶段是成员的微信号码,可是目前咱们须要使用的帐号微信官方自动生成为成员名字的拼音缩写,能够在微信企业号后台通信录——>部门——>成员详情找到
另外须要说明的是,微信企业号应用的访问频率是有限制的,这一点一样也能够在开发者文档中找到
五、web界面新增报警媒介类型
名称自定义便可,类型选择脚本,脚本名称为所写的脚本的名称weixin.py,脚本的三个参数都是zabbix内置变量,分别为:报警收件人:{ALERT.SENDTO},报警标题:{ALERT.SUBJECT},报警内容:{ALERT.MESSAGE},添加完报警媒介类型后勾选启用
六、配置用户报警媒介信息
配置须要收到微信报警的用户的信息,添加报警媒介,选择上面建立的微信报警,收件人填写上面所说的部门成员的帐号,因为是经过微信公众号发送的微信提醒,若是须要为多个用户例如微信企业号中全部用户发送报警,这里收件人的信息就填写为@all
七、测试
命令行测试脚本可否成功执行
[root@zabbix alertscripts]# ./weixin.py har452330261 "测试" 'test'
测试参数为三个,分别为部门成员帐号,报警标题,报警内容
测试的时候若是出现错误提示缺乏requests,解决方法为使用pip进行安装:pip install smtplib
测试后会在微信企业号中收到咱们建立的应用所发出的消息
同时在zabbix服务器的后台也生成了微信报警的日志文件/tmp/weixin.log,若是测试不成功能够经过日志来进行查错
命令行测试完成后,若是想要经过zabbix进行触发报警,还须要作的就是将上面生成的日志文件的所属修改成zabbix用户且具备写权限
[root@zabbix alertscripts]# ll /tmp/weixin.log
-rwxr-xr-x 1 zabbix zabbix 35329 6月 13 07:47 /tmp/weixin.log
到这里微信报警就算大功告成了,接下来就能够愉快的经过zabbix进行触发微信报警了,报警成功触发后能够经过zabbix面板的报表——>动做日志查看
收到的报警提示以下
附加内容:
一、微信报警基于微信企业号,一般状况下咱们收到微信企业号的消息须要下载微信企业号的客户端,如何不下载又能收到消息呢(也就是直接在本身的微信收到消息呢)?
解决办法为:进入微信企业号后台——>链接微信——>微工做台——>邀请关注,后台会给所拥有的微信企业号生成一个二维码,拿出手机,微信扫码关注,之后报警的消息就能直接在微信收到了
二、新添加的用户收到微信报警的步骤:
微信企业号通信录相应部门中添加成员
微信企业号微工做台邀请成员关注
zabbix服务端web界面添加用户,设置用户的微信报警媒介(收件人所在部门的相应成员帐号)
三、微信企业号具备不少功能以及开发者工具,有兴趣或者相关开发人员能够细细研究
博主原创文章,转载请务必注明出处