zoukankan      html  css  js  c++  java
  • Zabbix微信报警for新版企业微信

    本文转载自: https://www.93bok.com

    引言

    Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。

    说明

    之前微信报警使用的是企业号,然后新版微信已经取消了企业号,改用企业微信,企业微信还有app下载的。使用微信号发短信一般会有条数限制,企业微信没有这个限制,而且成员分组也方便。比起之前的微信企业号,企业微信方式在zabbix报警设置上还是有一点不一样的。

    一、企业微信注册

    • 注册步骤没什么说的,按照提示信息填入相关信息即可,到下图中的位置的时候,选择“没有组织机构代码证,继续注册”即可。

    Pgn4aQ.png

    二、配置企业微信

    • 当注册完成之后,接下来就是设置企业微信的信息,我们需要记住的是CorpID

    Pgn55j.png

    • 点击通讯录,添加一个组,或者添加一个成员,成员可以使用微信邀请或者短信邀请。

    PgnTGn.png

    • 添加完管理员需要记住管理员账号

    PgnqMV.png

    • 添加成员需要记住成员ID

    PgnjZF.png

    三、添加应用

    • “企业应用”------“创建应用”

    Pgnva4.png

    • 按要求填写即可

    PguCxx.png

    • 同样也可以在“微信插件”里面二维码邀请关注加入通讯录

    PguiM6.png

    • 创建完成后需要记住AgentId和Secret

    PguEZD.png

    注意:以前的应用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在哪看,如下图

    PguVde.png

    六、测试脚本

    cd /a01/apps/zabbix/data/zabbix/alertscripts/
    ./weixin.py nongkaige test 您好,报警测试
    

    PguQQP.png

    • 上边表示成功了,我们去微信看看有没有收到消息

    Pgulsf.png

    七、Zabbix web界面添加报警媒介

    • “管理”------“报警媒介类型”------“创建媒体类型”

    PguGdg.png

    {ALERT.SENDTO}# 发送给谁
    {ALERT.SUBJECT} # 告警标题
    {ALERT.MESSAGE} # 告警内容
    

    八、创建报警用户

    • “管理”------“用户”------“创建用户”
    • 用户群组可以设置一个单独的,我嫌麻烦就直接用管理员组了

    PguNJs.png

    PguwQ0.png

    Pgu0yV.png

    PguBLT.png

    九、创建报警触发的“动作”

    • “配置”------“动作”------“创建动作”

    PgureU.png

    PguswF.png

    告警主机:{HOST.NAME}
    主机IP: {HOST.IP}
    告警时间:{EVENT.DATE} {EVENT.TIME} 
    告警等级:{TRIGGER.SEVERITY} 
    告警信息:{TRIGGER.NAME}
    问题详情:{ITEM.NAME}:{ITEM.VALUE}
    当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
    事件ID: {EVENT.ID}
    

    PguOSI.png

    PguXlt.png

    Pguzm8.png

    十、测试报警微信能否收到消息

    • 我记得之前做监控磁盘IO的时候有写过触发器报警的,那接下来我们就试试这个吧,在被监控端上测试
    dd if=/dev/zero of=/a.txt bs=8k count=3000000
    

    PgKS0S.png

    PgKCkQ.png

  • 相关阅读:
    电信10兆指的是多少Mbps
    keycloak ssl-required报错问题处理
    Centos7 DNS神奇的配置
    angular4套用primeng样式
    Python库大全
    jquery根据name属性的高级选择
    Js String 属性扩展
    SQLSever 触发器
    IaaS, PaaS和SaaS
    Sql Server 基础知识
  • 原文地址:https://www.cnblogs.com/93bok/p/12425350.html
Copyright © 2011-2022 走看看