企业号微信报警--(公众号有48小时限制)无限制报警
笔者在维护公司监控系统的期间遇到一桩事情,之后不得不添加微信报警。
- 事情是这样的,最初使用公司短信api报警+邮件报警,某天半夜提供dns的服务的服务器挂掉了,第二天接到业务问题反馈就开始排查,因为没有收到短信报警也就没有觉得是服务器挂掉了。经过半个小时的折腾后偶然看了下邮件才知道原因,通知机房重启服务器解决。
- 可见邮件告警的实时性有多差。再者短信告警的反应也没有好到哪里去,经常服务都恢复了,告警短信和恢复短信一块来。所以找其他报警方式成为下一步要做的事情
微信的第三方接口为我们提供了便利的方式。我们先申请一个 企业号官网
配置企业号
1.通讯录添加企业成员
企业号的安全性就是于只有事先添加了的账号才能完成扫描关注操作。
这里笔者添加了账号(自定义)、手机号(绑定了微信的)
2.创建应用
打开应用中心创建应用,记住应用ID以发送消息给部门成员
3.给部门设置管理员
设置--->功能设置---->权限管理---->新建管理组
管理员必须事先已经关注了企业号,并且已经设置好邮箱地址
部署脚本
- 笔者之前使用shell脚本会造成‘%’无法解析,故改为python脚本。想使用shell可以留言索要
脚本需要改的参数有三个
①CropID='******'
②Secret='******'
③agentid"agentid":"9"
①②以上可以在微信企业号中“设置--功能--权限管理--管理员”可以找到
③自己创建的应用id
vim zabbix程序目录/share/zabbix/alertscripts/weixin.py
#!/usr/bin/python
# coding: utf-8
#jipeng 2016.8.11
#python2将zabbix报警信息发送到微信。
import urllib,urllib2
import json
import sys
def gettoken():
#微信企业号中“设置--功能--权限管理--管理员”可以找到
CropID='******'
Secret='******'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+CropID+"&corpsecret="+Secret
token_file = urllib2.urlopen(GURL)
token_data = token_file.read().decode('utf-8')
token_json = json.loads(token_data)
token_json.keys()
token = token_json['access_token']
return token
def senddata(access_token,user,content):
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+access_token
send_values = {
"touser":user, #企业号中的用户帐号,在zabbix用户Media中配置。
"msgtype":"text", #消息类型。
"agentid":"9", #企业号中的应用id(根据自己的应用更改)
"text":{
"content":content
},
"safe":"0"
}
send_data = json.dumps(send_values, ensure_ascii=False)
send_request = urllib2.Request(PURL, send_data)
response = json.loads(urllib2.urlopen(send_request).read())
print str(response)
if __name__ == '__main__':
user = str(sys.argv[1]) #zabbix传过来的第一个参数(用户)
content = str(sys.argv[3]) #zabbix传过来的第三个参数(内容)
accesstoken = gettoken()
senddata(accesstoken,user,content)
配置zabbix3.0.4版本
1.创建Media types
Administration--Media types
2.用户添加微信报警
Administration--User--用户--Media
3.Actions添加微信报警