zoukankan      html  css  js  c++  java
  • 分布式监控系统Zabbix-3.0.3-完整安装记录(6)-微信报警部署

    Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式。

    现在由于微信使用的广泛度,越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。
    前面介绍了zabbix的邮件报警的部署过程,这里继续说下zabbix的微信报警环境的部署。

    废话不多说了,下面记录了微信报警的操作过程:

    接下来详细记录如下:

    1)微信企业号的申请过程

    2)微信企业号登陆后的相关设置

    3)zabbix结合微信报警脚本设置

    ------------------------------------------------------------------------------------------------------------------
    一、微信企业号的申请过程(现在企业号已经升级为企业微信)

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

    如下:填写用户信息登陆

    扫面二维码,完成身份验证

    扫描二维码

    ------------------------------------------------------------------------------------------------------------------
    二、微信企业号登陆后的相关设置

    首次登陆,查看通讯录-组织架构,可以直接添加成员,也可以添加子部门,然后在子部门里新增成员

    点击“修改部门”会查看到部门ID号,后面微信脚本里会用到!

    可以将成员添加到子部门中

    账号是不同于微信号,最好是字母加数字

    成员添加成功后,别忘了后面要关注本企业号

    接着”设置“企业号Logo,这个一定要设置,不然后面发信息会报错,算是一个BUG吧.

    注意:设置里面的”进入认证系统“,认证是需要收费的,所以这里不进行认证。忽略这个设置。

    注意:添加的用户一定要扫描下面”设置“->”企业号信息“里的二维码,关注这个企业号

    接着到”应用中心”里创建一个应用

    记住这个monit-test应用的ID号,后面微信脚本里会用到

    最后,需要进行“设置”->“权限管理”的操作,新建一个管理组

    留下下面的CorpID和Secret,后面的微信脚本里会用到!

    由于上面monit-manager管理组没有设置管理员,接下来还要设置一个管理员!
    点击”系统管理组“设置管理员

     

     邮箱验证方式添加

    登陆上面的管理员邮箱,按照邮件提示进行密码登陆设置

     先扫描二维码进行绑定,然后设置密码

     

    这样,以后登陆这个企业号,要先使用这个管理员的微信进行扫描,扫描后在微信里的企业小助手里确认登陆,然后再进行用户名和密码登陆。

     

     登陆后,发现系统管理员已经设置成功了。

     

    -----------------------------------------------------------------------------------------------------
    二、接下来进行zabbix的微信配置

    设置微信脚本如下:在alertscripts路径下编写脚本
    [root@Zabbix-server alertscripts]# pwd
    /usr/local/zabbix/alertscripts


    需要调用微信接口,那么如何调用微信接口呢?
    调用微信接口需要一个调用接口的凭证:access_token
    通过 :CropID 、Secret 才能获取到access_token,但是获取到的token有效期为两分钟。

    微信企业号接口调试工具传送门:http://qydev.weixin.qq.com/debug

    打开上面url,使用上面monitops企业号的monit-manager管理组的CorpID和Secret号获得调用接口凭证access_token,如下:

     

     zabbix发送微信报警的脚本可以用Shell脚本或python脚本,二者任选其一(推荐python脚本)

    (一)Shell脚本调用
    使用:
    curl -s -G url 获取 AccessToken
    使用:
    curl --data url 传送凭证调用企业号接口

    zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容

    [root@Zabbix-server alertscripts]# cat weixin.sh

    #!/bin/bash
    #########################################################################
    # File Name: wechat.sh
    # Author: shaonbean
    # Email: shaonbean@qq.com
    # Created Time: Sun 24 Jul 2016 05:48:14 AM CST
    #########################################################################
    # Functions: send messages to wechat app
    # set variables
    CropID='wx76c41a935c66acf9'
    Secret='RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'
    GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
    #get acccess_token
    Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F" '{print $4}')
    PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
    #
    function body() {
    local int AppID=1
    local UserID="test001"       
    local PartyID=3
    local Msg=$(echo "$@" | cut -d" " -f3-)
    printf '{
    '
    printf '	"touser": "'"$UserID""",
    "
    printf '	"toparty": "'"$PartyID""",
    "
    printf '	"msgtype": "text",
    '
    printf '	"agentid": "'" $AppID """,
    "
    printf '	"text": {
    '
    printf '		"content": "'"$Msg"""
    "
    printf '	},
    '
    printf '	"safe":"0"
    '
    printf '}
    '
    }
    /usr/bin/curl --data-ascii "$(body $! $2 $3)" $PURL

    注意:
    上面脚本中标注的几处:
    CorpID和Secret分别是上面企业公众号的管理组monit-manager的ID
    UseID:用户账号。这里只需要填写一个账号即可。zabbix的web界面里发信是按照应用ID,只要关注这个微信企业号内的用户都会收到报警邮件。
    AppID:应用ID
    PartyID:部门ID号

    -----------------------------------------

    为什么要这样写脚本?

          因为微信企业号开放的端口有固定的格式限制

          企业号支持的格式:http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数据格式

    -----------------------------------------------------------------------------------------------------------------------

    将weixin.sh脚本放入zabbix默认执行路径alertscripts下,权限一定要设置成zabbix进程的启动用户!
    [root@Zabbix-server alertscripts]# pwd
    /usr/local/zabbix/alertscripts
    [root@Zabbix-server alertscripts]# chown zabbix.zabbix /usr/local/zabbix/alertscripts/weixin.sh
    [root@Zabbix-server alertscripts]# chmod 755 /usr/local/zabbix/alertscripts/weixin.sh

    手动测试脚本能否正常发信,测试的账号由于在脚本里已经写明(test001),观察到微信能正常收到测试信息:
    [root@Zabbix-server alertscripts]# ./weixin.sh  test heiheihei
    {"errcode":0,"errmsg":"ok"}
    [root@Zabbix-server alertscripts]# ./weixin.sh  test hahaha
    {"errcode":0,"errmsg":"ok"}

     

    -------------------------------------
    python脚本调用

    安装simplejson    (也可以直接下载,地址:https://pan.baidu.com/s/1o8dHQIY    提取密码:yd72)
    [root@Zabbix-server src]# pwd
    /usr/local/src
    [root@Zabbix-server src]#
    [root@Zabbix-server src]# wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
    [root@Zabbix-server src]# tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
    [root@Zabbix-server src]# python setup.py build
    [root@Zabbix-server src]# python setup.py install
    *********************************************************************************
    注意:在上面build和install过程中,如果出现下面的WARNING提示,不用管,不影响结果!
    WARNING: The C extension could not be compiled, speedups are not enabled.
    Plain-Python installation succeeded.
    *********************************************************************************

    下载wechat.py脚本
    [root@Zabbix-server src]# git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
    [root@Zabbix-server src]# cp Zabbix-Alert-WeChat/wechat.py /usr/local/zabbix/alertscripts/
    [root@Zabbix-server src]# cd /usr/local/zabbix/alertscripts/
    [root@Zabbix-server alertscripts]# chmod 755 wechat.py
    [root@Zabbix-server alertscripts]# chown zabbix:zabbix wechat.py
    [root@Zabbix-server alertscripts]# mv wechat.py weixin.py

    修改weixin.py脚本
    [root@Zabbix-server alertscripts]# cat weixin.py

    #!/usr/bin/python
    #_*_coding:utf-8 _*_
    
     
    import urllib,urllib2
    import json
    import sys
    import simplejson
    
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    
    def gettoken(corpid,corpsecret):
        gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
        print  gettoken_url
        try:
            token_file = urllib2.urlopen(gettoken_url)
        except urllib2.HTTPError as e:
            print e.code
            print e.read().decode("utf8")
            sys.exit()
        token_data = token_file.read().decode('utf-8')
        token_json = json.loads(token_data)
        token_json.keys()
        token = token_json['access_token']
        return token
     
     
     
    def senddata(access_token,user,subject,content):
     
        send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
        send_values = {
            "touser":"test001", 
            "toparty":"3", 
            "msgtype":"text",
            "agentid":"1",
            "text":{
                "content":subject + '
    ' + content
               },
            "safe":"0"
            }
    #    send_data = json.dumps(send_values, ensure_ascii=False)
        send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
        send_request = urllib2.Request(send_url, send_data)
        response = json.loads(urllib2.urlopen(send_request).read())
        print str(response)
     
     
    if __name__ == '__main__':
        user = str(sys.argv[1]) 
        subject = str(sys.argv[2])
        content = str(sys.argv[3])
        
        corpid =  'wx76c41a935c66acf9'
        corpsecret = 'RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'
        accesstoken = gettoken(corpid,corpsecret)
        senddata(accesstoken,user,subject,content)
    

    上面脚本中涉及了微信企业号中的用户(任意一个即可,如上的test001),应用ID,部门ID,corpid和secret

    修改weixin.py脚本权限
    [root@Zabbix-server alertscripts]# chown zabbix.zabbxix weixin.py
    [root@Zabbix-server alertscripts]# chmod 755 weixin.py

    手动测试weixin.py脚本,可以使用用户账号或应用ID去测试,观察微信是否能收到信息:
    [root@Zabbix-server alertscripts]# ./weixin.py test001 test hahaha
    https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx76c41a935c66acf9&corpsecret=RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs
    {u'errcode': 0, u'errmsg': u'ok'}
    [root@Zabbix-server alertscripts]# ./weixin.py 1 test zabbix-微信报警
    https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx76c41a935c66acf9&corpsecret=RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs
    {u'errcode': 0, u'errmsg': u'ok'}

    接着开始登陆zabbix,添加报警设置(跟邮件报警的配置差不多)

    1)创建报警媒介(这里我选用python脚本:weixin.py,如果选用shell脚本,就改换weixin.sh。其他设置都不变!

    注意下面要填写的脚本参数:
    {ALERT.SENDTO}
    {ALERT.SUBJECT}
    {ALERT.MESSAGE}

    2)创建用户weixin(密码一栏可以选择跟之前的超级管理员zabbix一样的密码;用户类型也可以设置成超级管理员)

    这里最好使用微信企业号的应用ID,这样发的报警信息,在企业号内的用户都能收到。或者添加任意一个用户账号(比如test-001),切不可添加多条,否则就会收到重复信息。

     

     3)创建动作

    注意严格下面的微信发送格式:
    上面的默认接收人填写:{TRIGGER.STATUS}: {TRIGGER.NAME}

    默认信息和恢复信息要填写一样的内容,如下:
    告警主机:{HOST.NAME}
    主机IP: {HOST.IP}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    告警等级:{TRIGGER.SEVERITY}
    告警信息:{TRIGGER.NAME}
    问题详情:{ITEM.NAME}:{ITEM.VALUE}
    当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
    事件ID: {EVENT.ID}

    如下,在“条件”里可自主选择添加“主机”和“模板”(具体可参考上一篇的“zabbix邮件报警”的此步设置)

    下面的“操作”(具体说明可参考上一篇的“zabbix邮件报警”的此步设置)。
    下面设置的报警信息只发送给weixin用户就行了,没有发生给用户组。

     注意:“操作”底部的“条件“做如下设置(时间已确认=非确认),这个别忘了!

    这样,就顺利创建了一个名为“weixin”的动作

    测试,将其中一台被监控机器(192.168.1.25)的zabbix-agent服务关掉,观察微信是否能正常收到报警信息:
    经测试,报警信息(3次)和恢复后的信息(1次),微信都能正常收到。

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    要追加用户的微信监控,只需要将用户添加到相关应用关联到的对应部门里即可!其他配置都不需要动。

     

  • 相关阅读:
    EBS SQL > Form & Report
    oracle sql 优化分析点
    MRP 物料需求计划
    MRPII 制造资源计划
    Barcode128 应用实务
    Oracle SQL语句优化技术分析
    APPSQLAP10710 Online accounting could not be created. AP Invoice 无法创建会计分录
    Oracle数据完整性和锁机制
    ORACLE Responsibility Menu Reference to Other User
    EBS 常用 SQL
  • 原文地址:https://www.cnblogs.com/kevingrace/p/5995875.html
Copyright © 2011-2022 走看看