在zabbix监控中,国内越来越流行使用微信、钉钉、邮件报警,这正式结合了当下的发展趋势。接下来介绍下zabbix如何结合微信发送警报信息。
一、企业微信注册
企业微信注册地址:https://work.weixin.qq.com/
注意:我们需要记录以下几个值:
Agentld
Secret
CorpID
部门ID
二、下载脚本
[root@node1~]#wget https://www.guoxiangfu.com/wechat
[root@node1~]#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[1],sys.argv[3])
修改权限,所有者、所属组
[root@node1~]#chmod +x wechat
[root@node1~]#chown zabbix.zabbix wechat
##验证是否可以发送成功[root@node1~]#./wechat zabbix test test
{u'invaliduser': u'zabbix', u'errcode': 0, u'errmsg': u'ok'}
到此我们就配置好了。
Zabbix配置
查看存放的脚本
[root@node1~]#grep "AlertScriptsPath" /etc/zabbix/zabbix_server.conf
### Option: AlertScriptsPath
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
[root@node1~]#mv wechat /usr/lib/zabbix/alertscripts/
在地址栏输入:http://192.168.4.61/zabbix/zabbix.php?action=mediatype.edit
发送警报信息内容:
故障恢复信息:
服务器:{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}"
}
测试
小结
(1)使用微信告警,必须有CorpID、AgentId和Secret。这是建立与微信通信的措施。
(2)创建过程中,建议每一步都要测试是否成功,再进行下一步。
(3)可以指定多个用户接受信息。
转载于:https://blog.51cto.com/merit/2044543