1、说明
感觉这个是最实用的报警方式,总算实现了,现在总结下,我是在以前邮件报警的基础上面做的实验,也就是说zabbix的web界面,server端,agent端都是能够正常工作的,并且有检测agent端80端口的监控项,action等配置。
2、企业微信配置
以前注册过一个订阅号,但是微信限制在48小时内如果用户没有给公众号发送过消息,公众号不能主动给用户推送消息,后来才找到可以用企业微信来进行发送消息,企业微信里面的用户可以无限制的互相发送消息。个人也可以注册企业微信
注册企业微信:https://work.weixin.qq.com
企业微信后台:https://work.weixin.qq.com/wework_admin/loginpage_wx
注册好后进入管理界面,可以自己先熟悉下各个选项的作用
-
创建应用
选择应用管理 – 应用 – 自建 – 创建应用 这样后面的消息都是这个应用发出来的,应用点进去右上角可以选择是否启用。点击编辑,可以将人员添加进这个应用
-
获取token
从下面的api文档中获取access token
https://work.weixin.qq.com/api/doc/90000/90135/91039
从下面的api文档中获取发送应用消息说明
https://work.weixin.qq.com/api/doc/90000/90135/90236#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF
-
自己微信关注企业微信号
我的企业 – 微信插件 – 邀请关注 然后自己的微信扫二维码,这样微信可以接收企业微信的消息,
可以选择应用消息从发送到企业微信还是自己的微信,设置:企业微信 – 设置 – 新消息通知 – 仅在企业微信中接收消息 – 设置关闭,企业微信 – 设置 – 新消息通知 – 仅在企业微信中接收应用 – 设置关闭,这样就会发送消息到微信
到这里,微信微信设置就可以了
现在企业微信和企业邮箱合并管理了
有个问题,如果我的账号使用的邮箱是contact,则邮箱有新邮件,微信就会提醒,而且免打扰不管用。这里设置我的账号使用andy邮箱,而设置公共邮箱为contact,这样微信不会经常有邮件提醒。通过邮箱管理大师收邮件。应用可以正常发消息不受影响
3、python脚本
import json import time import requests class WeChat: def __init__(self): self.corpId = 'wwb6468feb4235ae8r' self.corpSecret = 'mSeg3DdYcqvonf2FkuDG3ELufxCyyhV2FjpR1UNr_sA' self.toUser = 'andy' self.agentId = 1000002 self.accessToken = '' self.lastTime = '' def _get_access_token(self): url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken' values = { 'corpid': self.corpId, 'corpsecret': self.corpSecret } req = requests.post(url, params=values) data = json.loads(req.text) print("new token: ", data['access_token']) return data['access_token'] def get_access_token(self): if self.accessToken == '': self.accessToken = self._get_access_token() self.lastTime = str(time.time()) return self.accessToken if time.time() - float(self.lastTime) < 7200: return self.accessToken else: self.accessToken = self._get_access_token() self.lastTime = str(time.time()) return self.accessToken def send_data(self, message): url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.get_access_token() send_values = { 'touser': self.toUser, 'msgtype': 'text', 'agentid': self.agentId, 'text': { 'content': message }, 'safe': 0 } send_msg = bytes(json.dumps(send_values), 'utf-8') respone = requests.post(url, send_msg) respone = respone.json() return respone['errmsg'] if __name__ == '__main__': wx = WeChat() print(wx.send_data("hello"))
下面是腾讯接口定义
服务端所有的自定义脚本都放在此目录下面:/usr/local/zabbix_server/etc/zabbix_server.conf.d 具体的脚本查看gitlab 第一参数是用户id,第二个参数是部门id,第三个参数是消息内容 经过测试默认部门id为1,但是有问题,这里部门id固定为2 [root@localhost /usr/local/zabbix_server/etc/zabbix_server.conf.d]#chmod +x WeChatSendMassage.py [root@localhost /usr/local/zabbix_server/etc/zabbix_server.conf.d]#./WeChatSendMassage.py "andyblog" 2 456 #测试成功,手机能成功收到消息, {u'errcode': 0, u'errmsg': u'ok'} [root@localhost /usr/local/zabbix_server/etc/zabbix_server.conf.d]#./WeChatSendMassage.py "andyblog|log" 2 456 #两个人接收,测试成功,手机能成功收到消息, 修改完要重启服务 编辑server端配置文件,修改自定义脚本文件位置 [root@localhost /usr/local/zabbix_server/etc]#vim zabbix_server.conf AlertScriptsPath=/usr/local/zabbix_server/etc/zabbix_server.conf.d 重启server端服务 # service zabbix_server restart Shutting down zabbix_server: [ OK ] Starting zabbix_server: [ OK ]
注意,如果刚开始用root用户在命令行测试成功后,需将日志文件的属主和属组更改为zabbix,不然正常工作,zabbix用户无法写入日志会报错
4、zabbix设置
添加媒介,为脚本,输入的第一个参数为用户,多个用户用|分割,第二个参数经过测试固定为2,第三个参数要是信息的内容
一共添加了三个媒介,脚本都一样,只是参数不同,代表发送给不同人
WeChatSendMassage.py andy|bob 2 {ALERT.MESSAGE}
在用户中将媒介添加进去
在action中添加一个action,这里因为一共人监控几个组,某几个组的,只要是high类型的都发送消息给某个人
下面的是微信的信息内容,信息的标题不重要
{TRIGGER.STATUS}: {TRIGGER.NAME} 告警状况:{TRIGGER.STATUS} 告警信息:{TRIGGER.NAME} 告警时间:{EVENT.DATE} {EVENT.TIME} 问题详情:{ITEM.NAME}:{ITEM.VALUE}
在operation中设置发送信息,媒介设置为通过微信,就可以测试了
经过测试发现还挺稳定的,都能收到信息
–
–
–
评论前必须登录!
注册