Zabbix实现微信报警
一、 申请企业微信账号,申请地址 https://qy.weixin.qq.com/
二、 登陆企业微信账
图一
图二
2、添加微信账号
图一
图二
完成以上步骤后 就完成了微信账号的添加
三、新建应用
图一
图二
图三
图四
以上四幅图完成后就应用创建完成
四、设置权限管理
图一
图二
图三
完成以上三幅图的操作,权限管理设置完成;到此微信设置已经完成!
五、Zabbix Server配置
图一
图二
图三
完成以上三幅图中的配置,则zabbix server的配置已经完成。
七、weixin.py程序内容
1 #!/usr/bin/env python
2 # encoding: utf-8
3 # Create time 2016-10-08
4 #Auth chenpeng
5 import urllib2
6 import json
7 import sys
8 import time
9
10 class WebChat(object):
11 def __init__(self,CropID,Secret):
12 self.CropID = CropID
13 self.Secret = Secret
14 def Get_Token(self,info):
15 \'\'\'
16 :param info: 存储执行结果和执行程序状态码code (0代表执行成功,非零表示不成功)
17 :return:
18 \'\'\'
19 self.info = info
20 gurl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s" % (self.CropID,self.Secret)
21 try:
22 #通过Get方式获取token
23 req = urllib2.Request(gurl)
24 response = urllib2.urlopen(req)
25 g_result = json.loads(response.read(),"UTF-8")
26
27 if g_result .has_key(\'access_token\'):
28 self.info[\'result\']= g_result [\'access_token\']
29 self.info[\'code\'] = 0
30 else:
31 self.info[\'result\'] = g_result
32 self.info[\'code\'] = 1
33 except Exception,e:
34 self.info[\'code\'] = 1
35 self.info[\'result\'] = e
36
37
38 def Send_Msg(self,touser,toparty,agentid,access_token,content,info,*args,**kwargs):
39 \'\'\'
40 发送信息到微信
41 :param touser: 部门成员id,zabbix中定义的微信接收者,
42 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。
43 特殊情况:指定为@all,则向关注该企业应用的全部成员发送
44 :param toparty: 部门id,定义了范围,组内成员都可接收到消息,
45 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
46 :param agentid: 企业应用的id,整型。可在应用的设置页面查看
47 :param access_token: 根据CropID,Secret获取的访问token值
48 :param content: 滤出zabbix传递的第三个参数,
49 表示发送微信消息的内容消息内容,最长不超过2048个字节,
50 注意:主页型应用推送的文本消息在微信端最多只显示20个字(包含中英文)
51 :param info: 返回执行结果信息{\'result\':None,\'code\':None};\'code\':0或者非零 ;0表示成功 非零表示失败
52 :param args:
53 :param kwargs:
54 :return:
55 \'\'\'
56 self.touser = touser
57 self.toparty = toparty
58 self.agentid = agentid
59 self.conntent = content
60 self.access_token = access_token
61 self.info = info
62 purl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % (access_token)
63 data = {
64 "touser": "",
65 "toparty": "",
66 "totag": "", #标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数,非必须
67 "msgtype": "text", #必须
68 "agentid": "", #必须
69 "text": {
70 "content": "" #必须
71 },
72 "safe": "0" # 表示是否是保密消息,0表示否,1表示是,默认0
73 }
74 data[\'touser\'] = self.touser
75 data[\'agentid\'] = self.agentid
76 data[\'toparty\'] = self.toparty
77 data[\'text\'][\'content\']=self.conntent
78 data = json.dumps(data,ensure_ascii=False)
79 try:
80 #通过PUT方式获取发送数据
81 req = urllib2.Request(purl, data)
82 response = urllib2.urlopen(req)
83 res = json.loads(response.read())
84 self.info[\'code\'] = res[\'errcode\']
85 self.info[\'result\'] = res[\'errmsg\']
86
87 except Exception,e:
88 self.info[\'result\'] = e
89 self.info[\'code\'] = 1
90
91 if __name__ == \'__main__\':
92 reload(sys)
93 sys.setdefaultencoding(\'utf-8\')
94 def log(date, touser, content,info):
95 \'\'\'
96 发送的日志打印日志
97 :param date: 时间
98 :param touser: 发送给谁
99 :param content: 发送的信息内容
100 :param info: 发送执行的结果
101 :return:
102 \'\'\'
103 msg = \'%s %s %s 发送结果 - %s\n\' % (date, touser, content, info)
104 with open(\'msg.log\', \'a\') as f:
105 f.write(msg)
106
107 agentid = sys.argv[1]
108 #agentid = 1
109 touser = \'xxxxxxx@qq.com\'
110 toparty = \'\'
111 content = sys.argv[2:]
112 content = \'\n\'.join(content)
113 #content = \'测试\'
114 CropID = \'xxxxxxxxxxxxxxxxxxx\'
115 Secret = \'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\'
116 info={\'result\':None,\'code\':None}
117 date = time.strftime(\'%Y-%m-%d %H:%M:%S\')
118 res=WebChat(CropID,Secret)
119 res.Get_Token(info)
120 if info[\'code\'] == 0:
121 access_token = info[\'result\']
122 res.Send_Msg(touser=touser, toparty=toparty, agentid=agentid, access_token=access_token,
123 content=content,info=info)
124 if info[\'code\'] == 0:
125 content = eval(content)
126 log(date, touser, content,info)
127 else:
128 log(date, touser, content, info)
129 else:
130 log(date,touser,content,info)
其中代码114、115行中的CropID 和 Secret对应的是第四步《设置权限管理》中图三对应的CropID 和 Secret
代码63行中的data数据,请参考微信接口文档
地址:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E