Zabbix 5.0 LTS 版本实现微信推送报警

  • A+
所属分类:Zabbix

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

1、注册企业微信

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

Zabbix 5.0 LTS 版本实现微信推送报警

2、配置企业微信

2.1 创建部门

Zabbix 5.0 LTS 版本实现微信推送报警

2.2 添加成员

Zabbix 5.0 LTS 版本实现微信推送报警

也可通过二维码邀请成员

Zabbix 5.0 LTS 版本实现微信推送报警

记住成员账号

Zabbix 5.0 LTS 版本实现微信推送报警

3. 创建应用

Zabbix 5.0 LTS 版本实现微信推送报警

填写完信息记住应用(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
Zabbix 5.0 LTS 版本实现微信推送报警
Zabbix 5.0 LTS 版本实现微信推送报警

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

5、 zabbix web界面配置

5.1 配置报警媒介

Zabbix 5.0 LTS 版本实现微信推送报警
Zabbix 5.0 LTS 版本实现微信推送报警

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

Zabbix 5.0 LTS 版本实现微信推送报警

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

Zabbix 5.0 LTS 版本实现微信推送报警

5.4 创建动作

Zabbix 5.0 LTS 版本实现微信推送报警

5.5 设置报警消息

Zabbix 5.0 LTS 版本实现微信推送报警
故障{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 恢复报警

Zabbix 5.0 LTS 版本实现微信推送报警
恢复{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相关设置需要先做好,否则不会自动告警)

  • 微信公众号
  • 扫一扫关注微信公众号
  • weinxin
  • 运维交流群
  • 扫一扫二维码加入群聊
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: