本文转载自: https://www.93bok.com
引言
Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。
说明
之前微信报警使用的是企业号,然后新版微信已经取消了企业号,改用企业微信,企业微信还有app下载的。使用微信号发短信一般会有条数限制,企业微信没有这个限制,而且成员分组也方便。比起之前的微信企业号,企业微信方式在zabbix报警设置上还是有一点不一样的。
一、企业微信注册
- 注册步骤没什么说的,按照提示信息填入相关信息即可,到下图中的位置的时候,选择“没有组织机构代码证,继续注册”即可。
二、配置企业微信
- 当注册完成之后,接下来就是设置企业微信的信息,我们需要记住的是CorpID
- 点击通讯录,添加一个组,或者添加一个成员,成员可以使用微信邀请或者短信邀请。
- 添加完管理员需要记住管理员账号
- 添加成员需要记住成员ID
三、添加应用
- “企业应用”------“创建应用”
- 按要求填写即可
- 同样也可以在“微信插件”里面二维码邀请关注加入通讯录
- 创建完成后需要记住AgentId和Secret
注意:以前的应用ID和组ID已经取消
四、修改zabbix默认脚本路径
vim /etc/zabbix/zabbix_server.conf AlertScriptsPath=/a01/apps/zabbix/data/zabbix/alertscripts/
五、编写微信报警脚本
vim /a01/apps/zabbix/data/zabbix/alertscripts/weixin.py #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib,urllib2,json import sys reload(sys) sys.setdefaultencoding( "utf-8" ) class WeChat(object): __token_id = '' # init attribute def __init__(self,url): self.__url = url.rstrip('/') self.__corpid = 'ww5e0580d06a000d0a' self.__secret = 'nk4tWqmzNHlr_SY_NXkGpctEYbY8wVR26iSRBHv0urY' # Get TokenID def authID(self): params = {'corpid':self.__corpid, 'corpsecret':self.__secret} data = urllib.urlencode(params) content = self.getToken(data) try: self.__token_id = content['access_token'] # print content['access_token'] except KeyError: raise KeyError # Establish a connection def getToken(self,data,url_prefix='/'): url = self.__url + url_prefix + 'gettoken?' try: response = urllib2.Request(url + data) except KeyError: raise KeyError result = urllib2.urlopen(response) content = json.loads(result.read()) return content # Get sendmessage url def postData(self,data,url_prefix='/'): url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id request = urllib2.Request(url,data) try: result = urllib2.urlopen(request) except urllib2.HTTPError as e: if hasattr(e,'reason'): print 'reason',e.reason elif hasattr(e,'code'): print 'code',e.code return 0 else: content = json.loads(result.read()) result.close() return content # send message def sendMessage(self,touser,message): self.authID() data = json.dumps({ 'touser':touser, 'toparty':"2", 'msgtype':"text", 'agentid':"1000002", 'text':{ 'content':message }, 'safe':"0" },ensure_ascii=False) response = self.postData(data) print response if __name__ == '__main__': a = WeChat('https://qyapi.weixin.qq.com/cgi-bin') a.sendMessage(sys.argv[1],sys.argv[3])
- 分别修改上边特殊标记的为自己企业微信的CorpID、Secret、AgentId和部门ID即可,下面再说一下部门ID在哪看,如下图
六、测试脚本
cd /a01/apps/zabbix/data/zabbix/alertscripts/ ./weixin.py nongkaige test 您好,报警测试
- 上边表示成功了,我们去微信看看有没有收到消息
七、Zabbix web界面添加报警媒介
- “管理”------“报警媒介类型”------“创建媒体类型”
{ALERT.SENDTO}# 发送给谁 {ALERT.SUBJECT} # 告警标题 {ALERT.MESSAGE} # 告警内容
八、创建报警用户
- “管理”------“用户”------“创建用户”
- 用户群组可以设置一个单独的,我嫌麻烦就直接用管理员组了
九、创建报警触发的“动作”
- “配置”------“动作”------“创建动作”
告警主机:{HOST.NAME} 主机IP: {HOST.IP} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.NAME} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1} 事件ID: {EVENT.ID}
十、测试报警微信能否收到消息
- 我记得之前做监控磁盘IO的时候有写过触发器报警的,那接下来我们就试试这个吧,在被监控端上测试
dd if=/dev/zero of=/a.txt bs=8k count=3000000
来源:https://www.cnblogs.com/93bok/p/12425350.html