Zabbix微信报警for新版企业微信

丶灬走出姿态 提交于 2020-03-06 11:24:49

本文转载自: 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!