一、企业微信注册
微信的报警方式可以让我们随时随地接收到信息,加快问题的处理,比传统邮件更加方便,首先我们先打开企业微信的地址
1、填写申请信息
2、下一步
根据注册流程步骤进行后面的操作,直到注册成功。
二、企业微信配置
1、创建部门
首先我们要创建部门,类似于组,把相关的人员放到这个部门里面,创建部门之后,我们会用到部门id,报警消息根据部门id发到部门的相关人员。
根据自己的需求填写,所属部门也可以是现有部门的子部门,具有层级所属关系。
查看部门id,我们以后会用到,我这里部门id是2。
2、给部门增加人员
点击添加成员,然后让用户关注就可以了。
3、添加应用
用于消息发送的接口,这里我们需要记住应用的id以及secret,用于发送token的获取,按照我们的设定,目前只有运维部的人员可以看到此应用,即可以通过此应用获取到报警信息。
记住这里的Agentid和Secret。
4、获取企业ID
三、测试微信消息发送接口
调用微信接口需要一个调用接口的凭证:access_token,通过CropID 、Secret才能获取到access_token,但是获取到的token有效期为7200秒。
我们可以通过下面的接口调试工具以及接口说明文档进行测试。
接口调试工具:
接口说明文档:
调试成功页面如下。
四、报警脚本
1、编写python脚本
脚本使用的python版本为3.6,关于python3.6的安装请查看博文 。
vim /usr/local/zabbix/alertscripts/wechat.py
#!/usr/bin/python3.6 # -*- coding: UTF-8 -*- # wangzan18@126.com # 2018-09-30 import json import requests import sys # 微信公众号上应用的CropID和Secret corpid = 'wx8d46d36104988993' corpsecret = 'QCjzy2lH2ZB7MUG6uowChyChPsOQw96EB0X0QjofRRt0JePGezTVR4saIw3Ezznh' def getToken(corpid,corpsecret): # 获取access_token GURL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s" % (corpid, corpsecret) # 使用requests.get 函数请求,并把结果转化为json形式,获取token token = requests.get(GURL).json()['access_token'] return token def sendMsg(title,message): # 获取access_token access_token = getToken(corpid,corpsecret) # 消息发送接口 Purl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % access_token # 要发送的消息 weixin_msg = { "toparty": '2', # 部门ID "agentid": '4', # 企业应用的id "msgtype" : "textcard", "textcard": { "title": title, "description": message, "url": "www.wzlinux.com", "btntxt": "更多" } } # 向消息接口发送消息 print(requests.post(Purl,data = json.dumps(weixin_msg),headers={'Content-Type': 'application/json;charset=utf-8'}).content) if __name__ == '__main__': # 向脚本传参title和message title = sys.argv[1] message = sys.argv[2] sendMsg(title,message)
chmod +x /usr/local/zabbix/alertscripts/wechat.py
代码地址:https://github.com/wangzan18/learnpython/blob/master/weixin_news.py
2、测试脚本
微信已经可以接收到消息,那脚本已经没有什么问题了。
五、Zabbix配置
1、添加Media types
首先需要在zabbix server的配置文件开启上面脚本的目录,然后才可以使用,我们添加两个参数,一个是报警的标题,一个是报警信息的内容,用于传给脚本的两个参数。
2、给用户添加报警媒介
3、创建Action
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!{告警主机:{HOST.NAME}告警地址:{HOST.IP}监控项目:{ITEM.NAME}监控取值:{ITEM.LASTVALUE}告警等级:{TRIGGER.SEVERITY}当前状态:{TRIGGER.STATUS}告警信息:{TRIGGER.NAME}告警时间:{EVENT.DATE} {EVENT.TIME}事件ID:{EVENT.ID}} 服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!{告警主机:{HOST.NAME}告警地址:{HOST.IP}监控项目:{ITEM.NAME}监控取值:{ITEM.LASTVALUE}告警等级:{TRIGGER.SEVERITY}当前状态:{TRIGGER.STATUS}告警信息:{TRIGGER.NAME}告警时间:{EVENT.DATE} {EVENT.TIME}恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}持续时间:{EVENT.AGE}事件ID:{EVENT.ID}} 服务器:{HOST.NAME}: 报警确认{确认人:{USER.FULLNAME} 时间:{ACK.DATE} {ACK.TIME} 确认信息如下:"{ACK.MESSAGE}"问题服务器IP:{HOSTNAME1}问题ID:{EVENT.ID}当前的问题是: {TRIGGER.NAME}}
六、报警测试
关掉zabbix agent。