Zabbix实现微信报警

编程爱好者联盟 2016-10-09

一、  申请企业微信账号,申请地址 https://qy.weixin.qq.com/

Zabbix实现微信报警

二、 登陆企业微信账

Zabbix实现微信报警

图一

图二

2、添加微信账号

Zabbix实现微信报警

  图一

Zabbix实现微信报警

图二

完成以上步骤后 就完成了微信账号的添加

三、新建应用

Zabbix实现微信报警

图一

Zabbix实现微信报警

图二

Zabbix实现微信报警

图三

Zabbix实现微信报警

图四

以上四幅图完成后就应用创建完成

四、设置权限管理

Zabbix实现微信报警

图一

Zabbix实现微信报警

图二

Zabbix实现微信报警

图三

完成以上三幅图的操作,权限管理设置完成;到此微信设置已经完成!

五、Zabbix Server配置

Zabbix实现微信报警

图一

Zabbix实现微信报警

图二

Zabbix实现微信报警

图三

完成以上三幅图中的配置,则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 = '[email protected]'
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

相关推荐