通过脚本发送zabbix微信报警
Posted SSgeek
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过脚本发送zabbix微信报警相关的知识,希望对你有一定的参考价值。
实现zabbix通过微信报警的方式也是通过脚本来实现,与邮件报警不同的是,脚本调用的微信的相关接口的获取相对复杂一点
1、申请一个微信公众号(企业号)
申请方法不多说,如果已申请请忽略
2、在微信企业号上新建应用
上传应用logo,填写应用名称,应用介绍等
应用创建完之后查看并启用应用,同时会生成应用的AgentId以及Secret,这个在后面步骤会有用
3、接口调用测试
点击:API文档——>开发者工具——>接口调试工具,找不到就直接点这个地址
http://work.weixin.qq.com/api/devtools/devtool.php
corpid为创建的企业号生成的corpid
Corpsecret就是在第2步中创建的应用所生成的Secret,填入后点击检查问题,生成请求地址和返回结果,确认无误后进行下一步
4、关于脚本
脚本的存放目录为/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参数是部门成员的账号,这个账号在早起阶段是成员的微信号码,但是目前我们需要使用的账号微信官方自动生成为成员名字的拼音缩写,可以在微信企业号后台通讯录——>部门——>成员详情找到
另外需要说明的是,微信企业号应用的访问频率是有限制的,这一点同样也可以在开发者文档中找到
5、web界面新增报警媒介类型
名称自定义即可,类型选择脚本,脚本名称为所写的脚本的名称weixin.py,脚本的三个参数都是zabbix内置变量,分别为:报警收件人:{ALERT.SENDTO},报警标题:{ALERT.SUBJECT},报警内容:{ALERT.MESSAGE},添加完报警媒介类型后勾选启用
6、配置用户报警媒介信息
配置需要收到微信报警的用户的信息,添加报警媒介,选择上面创建的微信报警,收件人填写上面所说的部门成员的账号,由于是通过微信公众号发送的微信提醒,如果需要为多个用户例如微信企业号中所有用户发送报警,这里收件人的信息就填写为@all
7、测试
命令行测试脚本能否成功执行
[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面板的报表——>动作日志查看
收到的报警提示如下
附加内容:
1、微信报警基于微信企业号,通常情况下我们收到微信企业号的消息需要下载微信企业号的客户端,如何不下载又能收到消息呢(也就是直接在自己的微信收到消息呢)?
解决办法为:进入微信企业号后台——>连接微信——>微工作台——>邀请关注,后台会给所拥有的微信企业号生成一个二维码,拿出手机,微信扫码关注,以后报警的消息就能直接在微信收到了
2、新添加的用户收到微信报警的步骤:
微信企业号通讯录相应部门中添加成员
微信企业号微工作台邀请成员关注
zabbix服务端web界面添加用户,设置用户的微信报警媒介(收件人所在部门的相应成员账号)
3、微信企业号具有很多功能以及开发者工具,有兴趣或者相关开发人员可以细细研究
博主原创文章,转载请务必注明出处
以上是关于通过脚本发送zabbix微信报警的主要内容,如果未能解决你的问题,请参考以下文章