a616652325 发表于 2019-1-20 12:39:54

Zabbix基于微信发警报

在zabbix监控中,国内越来越流行使用微信、钉钉、邮件报警,这正式结合了当下的发展趋势。接下来介绍下zabbix如何结合微信发送警报信息。

一、企业微信注册
  企业微信注册地址:https://work.weixin.qq.com/
http://owatlfstl.bkt.clouddn.com/2017-11-25_105258.jpg


[*]http://owatlfstl.bkt.clouddn.com/2017-11-25_105410.jpg
http://owatlfstl.bkt.clouddn.com/2017-11-25_105630.jpg
http://owatlfstl.bkt.clouddn.com/2017-11-25_105928.jpg
http://owatlfstl.bkt.clouddn.com/2017-11-25_110351.jpg
http://owatlfstl.bkt.clouddn.com/2017-11-25_110441.jpg
http://owatlfstl.bkt.clouddn.com/2017-11-25_110634.jpg
http://owatlfstl.bkt.clouddn.com/2017-11-25_110922.jpg
注意:我们需要记录以下几个值:

Agentld
Secret
CorpID
部门ID
二、下载脚本
  #wget https://www.guoxiangfu.com/wechat
  #vim wechat

1 #!/usr/bin/env python   #如果是python修改为python3 即可
2 # -*- coding: utf-8 -*-
3 ## File Name: wechat.sh
6 reload(sys)
7 sys.setdefaultencoding( "utf-8" )
8
9 class WeChat(object):
10         __token_id = ''
11         # init attribute
12         def __init__(self,url):
13               self.__url = url.rstrip('/')
14               self.__corpid = '你的Corpid'
15               self.__secret = '你的SecretID'
16               
17         # Get TokenID
18         def authID(self):
19               params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
20               data = urllib.urlencode(params)
21               
22               content = self.getToken(data)
23               
24               try:
25                         self.__token_id = content['access_token']
26                         # print content['access_token']
27               except KeyError:
28                         raise KeyError
29                        
30         # Establish a connection
31         def getToken(self,data,url_prefix='/'):
32               url = self.__url + url_prefix + 'gettoken?'
33               try:
34                         response = urllib2.Request(url + data)
35               except KeyError:
36                         raise KeyError
37               result = urllib2.urlopen(response)
38               content = json.loads(result.read())
39               return content
40
41         # Get sendmessage url
42         def postData(self,data,url_prefix='/'):
44               request = urllib2.Request(url,data)
45               try:
46                         result = urllib2.urlopen(request)
47               except urllib2.HTTPError as e:
48                         if hasattr(e,'reason'):
49                                 print 'reason',e.reason
50                         elif hasattr(e,'code'):
51                                 print 'code',e.code
52                         return 0
53               else:
54                         content = json.loads(result.read())
55                         result.close()
56               return content
57
58         # send message
59         def sendMessage(self,touser,message):
60
61               self.authID()
62
63               data = json.dumps({
64                         'touser':touser,
65                         'toparty':"2",#这个相当于刚刚记录的部门ID
66                         'msgtype':"text",
67                         'agentid':"2",#修改为刚刚记录的agentid
68                         'text':{
69                                 'content':message
70                         },
71                         'safe':"0"
72               },ensure_ascii=False)
73
74               response = self.postData(data)
75               print response
76
77
78 if __name__ == '__main__':
79         a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
80         a.sendMessage(sys.argv,sys.argv)
修改权限,所有者、所属组
  #chmod +x wechat
#chown zabbix.zabbix wechat
  ##验证是否可以发送成功
#./wechat zabbix test test

{u'invaliduser': u'zabbix', u'errcode': 0, u'errmsg': u'ok'}
http://owatlfstl.bkt.clouddn.com/Screenshot_20171125-112639.png
  到此我们就配置好了。

Zabbix配置

查看存放的脚本
  #grep "AlertScriptsPath" /etc/zabbix/zabbix_server.conf

### Option: AlertScriptsPath
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
  #mv wechat /usr/lib/zabbix/alertscripts/
  在地址栏输入:http://192.168.4.61/zabbix/zabbix.php?action=mediatype.edit
http://owatlfstl.bkt.clouddn.com/2017-11-25_114322.jpg
http://owatlfstl.bkt.clouddn.com/2017-11-25_204542.jpg
http://owatlfstl.bkt.clouddn.com/2017-11-25_204859.jpg
http://owatlfstl.bkt.clouddn.com/2017-11-25_205023.jpg

发送警报信息内容:

故障恢复信息:

服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
{
"告警主机":"{HOST.NAME}",
"告警地址":"{HOST.IP}",
"告警时间":"{EVENT.DATE} {EVENT.TIME}",
"恢复时间":"{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}",
"告警等级":"{TRIGGER.SEVERITY}",
"告警信息":"{TRIGGER.NAME}",
"监控项目":"{ITEM.NAME}",
"当前状态":"{TRIGGER.STATUS}",
"持续时间":"{EVENT.AGE}",
"事件ID":"{EVENT.ID}",
"监控ID":"{ITEM.ID}",
"监控取值":"{ITEM.LASTVALUE}"
}
发生故障发送的信息

服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
{
"告警主机":"{HOST.NAME}",
"告警地址":"{HOST.IP}",
"告警时间":"{EVENT.DATE} {EVENT.TIME}",
"告警等级":"{TRIGGER.SEVERITY}",
"告警信息":"{TRIGGER.NAME}",
"监控项目":"{ITEM.NAME}",
"当前状态":"{TRIGGER.STATUS}",
"持续时间":"{EVENT.AGE}",
"事件ID":"{EVENT.ID}",
"监控ID":"{ITEM.ID}",
"监控取值":"{ITEM.LASTVALUE}"
}
测试
http://owatlfstl.bkt.clouddn.com/EFBC52C9B1398C609B3F59CD6C34AEFC.jpg

小结
  (1)使用微信告警,必须有CorpID、AgentId和Secret。这是建立与微信通信的措施。
  (2)创建过程中,建议每一步都要测试是否成功,再进行下一步。
  (3)可以指定多个用户接受信息。



页: [1]
查看完整版本: Zabbix基于微信发警报