Zabbix3.0搭配微信企业号报警

Zabbix搭配微信企业号报警是一个很流行的手段,这里说一下如何配置。

准备工作

建立一个企业号以及具体应用的链接在此:http://chenx1242.blog.51cto.com/10430133/1954634,里面写的都很明白了。

现在打开微信企业号的官方网站https://work.weixin.qq.com,然后扫描一下微信二维码登录到企业号的控制台。

在控制台网页里,需要查找几个元素,分别是CorpID应用AgentId应用Secret还有用户账号

首先,在控制台里选择“我的企业”,然后就可以看见CorpID,如图:
抱光妹

然后点击“企业应用”,如果没有应用,那么就新建立一个应用。比如我已经建立了一个应用叫“zabbix告警”,那么应用AgentId和应用Secret就在如图的位置:
抱光妹

有了上面的CropID和Secret,就可以去验证一下accesstoken,登录http://qydev.weixin.qq.com/debug ,后在填入对应的CropID和Secret,看一下返回结果是否是“HTTP/1.0 200 OK”,如图:
抱光妹

在这个“zabbix告警”的应用里可见范围里添加对应需要通知的人,然后在“通讯录”里,找到对应的人,记录他们的账号,如图:
抱光妹

材料已经俱备完毕,现在需要做的是更改zabbix-server配置。

首先,在zabbix-server.conf里添加一句AlertScriptsPath=/usr/lib/zabbix/alertscripts,这是为了说明一下脚本所在的路径。当然,这个路径你可以自己更改,然后重启一下zabbix-server。

编写脚本

cd /usr/lib/zabbix/alertscripts,在这个目录下我们要新写一个微信脚本,比如脚本名称叫wechat.py

这个python脚本是需要requests模块的,所以需要先安装这个模块,安装方法如下:

1
2
pip install requests
pip install --upgrade requests

而python脚本内容如下,感谢https://github.com/X-Mars/Zabbix-Alert-WeChat/的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_
#this script is used for alarm by WECHAT

import requests,sys,json
import urllib3

urllib3.disable_warnings()
reload(sys)
sys.setdefaultencoding('utf-8')

def GetToken(Corpid,Secret):
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
Data = {
"corpid":Corpid,
"corpsecret":Secret
}
r = requests.get(url=Url,params=Data,verify=False)
Token = r.json()['access_token']
return Token

def SendMessage(Token,User,Agentid,Subject,Content):
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
Data = {
"touser": User, # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
#"totag": Tagid, # 企业号中的部门id,群发时使用。
"msgtype": "text", # 消息类型。
"agentid": Agentid, # 企业号中的应用id。
"text": {
"content": Subject + '\n' + Content
},
"safe": "0"
}
r = requests.post(url=Url,data=json.dumps(Data),verify=False)
return r.text

if __name__ == '__main__':
User = sys.argv[1] # zabbix传过来的第一个参数
Subject = sys.argv[2] # zabbix传过来的第二个参数
Content = sys.argv[3] # zabbix传过来的第三个参数
Corpid = "这里填写Corpid"
Secret = "这里填写Secret"
Agentid = "这里填写应用的agentid"
Token = GetToken(Corpid, Secret)
Status = SendMessage(Token,User,Agentid,Subject,Content)
print Status

脚本保存后,chown -R zabbix:zabbix wechat.py,然后小试一下,上面看到“Zabbix告警”这个微信应用里有一个用户账号叫ChenShuo,那么wechat.py执行语句是:python wechat.py ChenShuo 这个是标题 这里是正文!!

然后看一下微信,如图:
抱光妹

正确出现了微信提示,可见这个脚本是OK的了。

配置zabbix

现在我们要登录到zabbix网站,最上面的“Administration”里选择“Media types”,新建立一个Media type,如图:
抱光妹

保存之后,在“Administration”里选择“Users”,在Admin用户里点击“media”,把刚刚新增的“微信告警”这个media type添加进去,如图:
抱光妹

通知手段配置完毕,现在就是要在具体的Trigger上把微信告警这个新手段添加到active里。首先打开Configuration里的actions界面。此时假设现在有一个告警Trigger叫“模块发生了重启”,判断模块是否重启的依据就是pid值是否发生了变化。那么点击这个Trigger,在action里把“微信告警”添加到报警手段里,如图:
抱光妹

保存之后,整个的微信告警配置就完成了。为了验证配置是否生效,我冒死重启了一台生产环境的服务器,当然啦,好孩子千万不要效仿。

收到微信提示如图:
抱光妹
不过考虑到微信告警可能会有所延迟,所以在这建议大家把告警阈值配置稍微早一点,避免“孩子死了奶来了”这种尴尬的情况。

参考资料

http://www.yfshare.vip/2017/04/13/Zabbix%E4%B9%8B%E5%BE%AE%E4%BF%A1-Wechat-%E5%91%8A%E8%AD%A6/
https://github.com/X-Mars/Zabbix-Alert-WeChat/

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------