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

 

posted @ 2016-10-09 15:06  chen_vbird  阅读(2790)  评论(0编辑  收藏  举报