• 0213微信ZABBIX报警


    简介

    微信作为日常使用最频繁的工具,因此希望将微信接入zabbix报警。

    微信企业号

    1.申请微信企业号
    申请后,请在“我的企业”页面下记录企业号的CorpID

    2.添加通讯录

    部门添加完成后,根据实际情况添加子部门或相关成员,如下:

    3.创建应用
    在“企业应用”页面创建应用


    注意: 可见范围一定要添加需要收到报警的人员或部门,否则zabbix报警信息无法推送到相关人员。

    创建完成如下:


    至此,微信企业号的配置完成。

    zabbix server端配置

    一.微信报警脚本
    默认将脚本放到/usr/local/zabbix/share/zabbix/alertscripts即可,由于我在脚本中打印日志,因此请添加权限。

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    #author: yanggd
    #date: 2018-04-20
    #comment: zabbix接入微信报警脚本

    import requests
    import sys
    import os
    import json
    import logging

    logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
    datefmt = '%a, %d %b %Y %H:%M:%S',
    filename = os.path.join('/usr/local/zabbix/share/zabbix/alertscripts','weixin.log'),
    filemode = 'a')

    corpid='wwbbaxxxxxx'
    appsecret='m2HUZXUxxxxxxxxxx'
    agentid=1000004
    #获取accesstoken
    token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
    req=requests.get(token_url)
    accesstoken=req.json()['access_token']

    #发送消息
    msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

    touser=sys.argv[1]
    subject=sys.argv[2]
    #toparty='3|4|5|6'
    message=sys.argv[3]

    params={
    "touser": touser,
    # "toparty": toparty,
    "msgtype": "text",
    "agentid": agentid,
    "text": {
    "content": message
    },
    "safe":0
    }

    req=requests.post(msgsend_url, data=json.dumps(params))

    logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)

    #添加权限
    chmod +x weixin.py
    touch weixin.log
    chown zabbix.zabbix weixin.log

    企业号开发文档请官方文档企业微信API:
    开始开发
    发送应用消息

    脚本说明:
    1.corpid、appsecret、agentid就是我们需要从企业号和应用中获取到的信息,其中.corpid、appsecret用于获取accesstoken,agentid用于往应用发送消息
    2.由于zabbix会往脚本中传入3个参数,分别为sendto(收件人)、subject(报警主题)、message(报警信息)。这3个参数需要在zabbix中配置,我们下面会讲到。

    此脚本中我们没有接受subject参数,而是直接使用sendto及message参数。
    另经测试添加toparty部门变量后,发现报警信息会重复发送,因此在此注释掉。
    具体的报警发送信息,我们通过脚本打印在日志weixin.log中。

    二、zabbix配置
    1.报警媒介类型

    zabbix3.4版本要添加这三个参数,用于发给weixin.py。
    2.添加动作
    事件源选择“触发器”,然后“创建动作”
    (1)动作


    注意:计算方式”与/或”,当维护状态非在维护 and 任意一个模板项有问题时,会触发此动作。
    (2)操作

    “默认信息”就是发送到weixin.py脚本的message
    “操作”可以定义此动作发送的接收人或接受组

    #方便拷贝
    Problem started at {EVENT.TIME} on {EVENT.DATE}
    Problem name: {TRIGGER.NAME}
    Host: {HOST.NAME}
    Severity: {TRIGGER.SEVERITY}

    Problem description: {ITEM.NAME}:{ITEM.VALUE}
    {TRIGGER.URL}

    (3)恢复操作

    此操作就是故障恢复时发送恢复报警信息。

    #方便拷贝
    Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
    Problem name: {TRIGGER.NAME}
    Host: {HOST.NAME}
    Severity: {TRIGGER.SEVERITY}

    Problem description: {ITEM.NAME}:{ITEM.VALUE}
    {TRIGGER.URL}

    (4)确认操作

    此操作就是监控人员在zabbix网页中确认问题并关闭问题后发送的确认信息,这也是3.4版本和某些低版本不同的地方。

    #方便拷贝
    {USER.FULLNAME} acknowledged problem at {ACK.DATE} {ACK.TIME} with the following message:
    {ACK.MESSAGE}

    Current problem status is {EVENT.STATUS}

    3.给用户添加报警媒介
    管理–用户,选择属于web_admin组中的一个用户,然后选择“报警媒介”-“添加”

    注意:收件人为企业号-通讯录中成员账号,是成员的唯一标识。

    三、测试
    当上面的几步操作完成后,我们先对脚本进行测试。

    #最好使用zabbix用户测试,来排除权限问题
    python weixin.py opt test test
    #opt为消息接收账号

    执行完成后,企业号就会收到测试信息,然后再停止某一服务,通过zabbix报警查看微信是否能接收到信息。

    weixin.py脚本通过zabbix报警使用的是zabbix用户,因此请确认脚本及日志是否具有权限。

    微信报警信息如下:
    第一条是报警信息
    第二条是故障恢复信息


    ---------------------
    作者:man8er
    来源:CSDN
    原文:https://blog.csdn.net/yanggd1987/article/details/80093310
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    201671010461张仲桃 实验三
    通读《构建之法》之后的问题
    201671010402-陈靖 实验十四 团队项目评审&课程学习总结
    201671010402-陈靖 实验四附加实验
    201671010402-陈靖——英文文本统计分析》结对项目报告
    201671010402 词频统计软件项目报告
    201671010402-陈靖 实验三 作业互评与改进
    读《现代软件工程——构建之法》所遇到的问题
    201671010403 陈倩倩 实验十四 团队项目评审&课程学习总结
    201671010403 陈倩倩 实验四附加实验
  • 原文地址:https://www.cnblogs.com/qcfeng/p/10371387.html
Copyright © 2020-2023  润新知