zoukankan      html  css  js  c++  java
  • Zabbix 5.0 LTS 版本实现微信推送报警

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

    1、注册企业微信

    注册地址: https://work.weixin.qq.com

    2、配置企业微信

    2.1 创建部门

    2.2 添加成员

    也可通过二维码邀请成员

    记住成员账号

    3. 创建应用

    填写完信息记住应用(AgentIdSecret后面会用到)

    4、配置监控脚本

    准备事项:微信企业号 
    企业号已经被部门成员关注 
    企业号有一个可以发送消息的应用,一个授权管理员,可以使用应用给成员发送消息

    需要得到的信息:

    • 成员账号
    • 组织部门ID
    • 应用ID
    • CorpID和Secret

    4.1 修改zabbix_agentd

    [root@wain ~]# grep alertscripts /etc/zabbix/zabbix_server.conf
    # AlertScriptsPath=${datadir}/zabbix/alertscripts
    AlertScriptsPath=/usr/lib/zabbix/alertscripts

    4.2 安装simplejson

    wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
    tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
    python setup.py build
    python setup.py install

    4.3、配置监控脚本

    vi /usr/lib/zabbix/alertscripts/wechat.py

    修改脚本里企业号中相关参数信息

    #!/usr/bin/python2.7
    #_*_coding:utf-8 _*_
    # 源地址:https://github.com/X-Mars/Zabbix-Alert-WeChat
    
    import requests,sys,json
    
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    def GetTokenFromServer(Corpid,Secret):
        Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
        Data = {
            "corpid":Corpid,
            "corpsecret":Secret
        }
        r = requests.get(url=Url,params=Data,verify=False)
        print(r.json())
        if r.json()['errcode'] != 0:
            return False
        else:
            Token = r.json()['access_token']
            file = open('/usr/lib/zabbix/var/zabbix_wechat_config.json', 'w')
            file.write(r.text)
            file.close()
            return Token
    
    def SendMessage(User,Agentid,Subject,Content):
        try:
            file = open('/usr/lib/zabbix/var/zabbix_wechat_config.json', 'r')
            Token = json.load(file)['access_token']
            file.close()
        except:
            Token = GetTokenFromServer(Corpid, Secret)
    
        n = 0
        Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
        Data = {
            "touser":'FangJian',                       # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
            #"totag": '1',                                # 企业号中的标签id,群发使用(推荐)
            "toparty": "1",                             # 企业号中的部门id,群发时使用。
            "msgtype": "text",                              # 消息类型。
            "agentid":"1000002",                             # 企业号中的应用id。
            "text": {
                "content": Subject + 'n' + Content
            },
            "safe": "0"
        }
        r = requests.post(url=Url,data=json.dumps(Data),verify=False)
        while r.json()['errcode'] != 0 and n < 4:
            n+=1
            Token = GetTokenFromServer(Corpid, Secret)
            if Token:
                Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
                r = requests.post(url=Url,data=json.dumps(Data),verify=False)
                print(r.json())
    
        return r.json()
    
    
    if __name__ == '__main__':
        # zabbix传过来的第一个参数
        User = sys.argv[1]
        # zabbix传过来的第二个参数
        Subject = str(sys.argv[2])
        # zabbix传过来的第三个参数
        Content = str(sys.argv[3])
    
        # CorpID是企业号的标识
        Corpid = "wwc06ac2ef58e8169d"
        # Secret是管理组凭证密钥 
        Secret = "hCj2VwvvNp4scE1qpeBMYUbAFDy_5NaiKH5E8g1Kk6w"
        # 通讯录标签ID
        #Tagid = "1"
        # 应用ID
        Agentid = "1"
        # 部门ID
        #Partyid = "1"
    
        Status = SendMessage(User,Agentid,Subject,Content)
        print Status

    4.4 报警测试

    ./wechat.py 1 报警测试 error

    至此代表服务器端已配置就绪

    5、 zabbix web界面配置

    5.1 配置报警媒介

    5.2 创建报警用户(我这以管理用户Admin)

    5.3 配置用户报警媒介(选择刚才创建的wechat)

    5.4 创建动作

    5.5 设置报警消息

    故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
    
    告警主机:{HOSTNAME1}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    告警等级:{TRIGGER.SEVERITY}
    告警信息: {TRIGGER.NAME}
    告警项目:{TRIGGER.KEY1}
    问题详情:{ITEM.NAME}:{ITEM.VALUE}
    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
    事件ID:{EVENT.ID}

    5.6 恢复报警

    恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
    
    告警主机:{HOSTNAME1}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    告警等级:{TRIGGER.SEVERITY}
    告警信息: {TRIGGER.NAME}
    告警项目:{TRIGGER.KEY1}
    问题详情:{ITEM.NAME}:{ITEM.VALUE}
    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
    事件ID:{EVENT.ID}

    到此当某台设备ICMP宕机时,便会发出微信告警信息。(ICMP相关设置需要先做好,否则不会自动告警)

     来源:https://mefj.com.cn/lur2654.html

  • 相关阅读:
    跨表修改数据|查询修改数据|两表联合修改数据
    .net oracle 连接
    型材优化截取初步代码
    JQuery.getJSON 从aspx页面返回JSON数据 .
    asp.net form验证
    ASP.NET读取纯真IP数据库QQWry.Dat,得到地址名称
    防止PHP木马,应在PHP.INI里禁止的一些函数
    sqlserver2005中的数据库日志收缩
    jquery.pagination.js分页插件的运用
    ASP.NET前台代码绑定后台变量方法总结
  • 原文地址:https://www.cnblogs.com/mefj/p/13860626.html
Copyright © 2011-2022 走看看