上一篇文章中已经讲了zabbix的编译安装方法,接下来就是微信告警功能的实现。这一部分内容多数来自网上,我也是照着网上介绍的方法实现的,我在这里整理一下。

        微信的第三方接口要求我们先申请一个企业号:从这里进入  https://qy.weixin.qq.com/

申请企业号的时候建议申请 企业-团体号,公众号需要24小时与它互动不然就接不到消息,团体号没有这个问题。

    

1.通讯录添加企业成员

        首先新建组织部门,然后我们要提前把成员信息添加进组织部门,必填项+手机号或者微信号,这样别人扫描二维码的时候才能成功关注企业号。 注意:这里有两个我们要用到信息,一个组织部门的ID,一个部门成员的账号(账号是自己手动指定的,不同于微信号,最好是字母加数字)

zabbix实现微信告警功能_第1张图片


zabbix实现微信告警功能_第2张图片


2. 应用中心创建应用

        我们要在这里创建应用,因为要通过应用发送消息给部门成员。 注意:这里要记住一个值,应用ID

zabbix实现微信告警功能_第3张图片



zabbix实现微信告警功能_第4张图片


3.给部门设置管理员
        设置--->功能设置---->权限管理---->新建管理组

        管理员必须事先已经关注了企业号,并且已经设置好邮箱地址。

zabbix实现微信告警功能_第5张图片


确定管理员可以读取通讯录,可以使用应用发消息。注意:我们需要管理员的CorpID和Secret

zabbix实现微信告警功能_第6张图片


我们要准备这些东西:


  •     一个微信企业号

  •     企业号已经被部门成员关注

  •     企业号里有一个可以发消息的应用    一个授权管理员,可以使用该应用给成员发消息


我们要取到这些信息:


  •     成员账号

  •     组织部门ID

  •     应用ID

  •     CropID    Secret


4.如何调用微信接口?

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


安装simplejson

下载simplejson-3.8.2.tar.gz
tar xvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
python setup.py build
python setup.py install


附上python脚本:

——————————————————————————

#!/usr/bin/python

#_*_coding:utf-8 _*_

 

import urllib,urllib2

import json

import sys

import simplejson

 

def gettoken(corpid,corpsecret):

    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret

    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,content):

 

    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token

    send_values = {

        "touser":user,    #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。

        "toparty":"2",    #企业号中的部门id,这里创建的运维部门ID是2

        "msgtype":"text", #消息类型位text文本类型,当然你可以设置为图文类型等;

        "agentid":"4",    #企业号中的应用id,这里创建的应用ID是4;

        "text":{

            "content":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])     #zabbix传过来的第一个参数

    content = str(sys.argv[3])  #zabbix传过来的第三个参数

 

    corpid =  'wxec0879f3c9fa1342'   #CorpID是企业号的标识

    corpsecret = 'I2AFaK8nsV9yc8ttYO8jz5SHf5CS7_oEQ9GhJI-ABqfLasuF6EBc_WxXWSVPzS6V' 

    accesstoken = gettoken(corpid,corpsecret)

    senddata(accesstoken,user,content)

——————————————————————————————————————

你会发现脚本里面没有使用zabbix传递的第二个参数,因为zabbix传递的第二个参数是报警标题,主要对于邮件来说的,微信就不需要了。当然你需要安装python安装包,yum安装就可以了。


5.将脚本放入zabbix脚本执行路径下(这个路径不是默认的,可以在zabbix_server.conf里面更改路径)

mv weixin.py /home/zabbix/scripts
chown -R zabbix.zabbix /home/zabbix/scripts

chmod +x /home/zabbix/scripts/weixin.py


6.创建示警媒体

zabbix实现微信告警功能_第7张图片


7.创建用户(我直接用的admin用户,你也可以新建用户,注意收件人id必须是开始公众号里面添加的组织成员id)

zabbix实现微信告警功能_第8张图片


8.创建动作

zabbix实现微信告警功能_第9张图片


zabbix实现微信告警功能_第10张图片


最后测试,随便更改一下触发器的值让zabbix报警,看能不能收到微信告警。

zabbix实现微信告警功能_第11张图片