zabbix wechat 报警


监控在运维工作中是比不可少的一环,那伴随着监控也同时会涉及到告警机制,一般的监控到的结果是成功或者失败,如Ping不通、访问网页出错、连接不到Socket,发生时这些称之为故障,故障是最优先的告警。那针对于 zabbix 的告警可以有多种方式去做:

zabbix三种常见报警介质:

短信:它的好处是不用联网手机有信号就行,但是需要有短信网关,需要花钱。

邮件:它也可以做到手机短信通知,基本现在邮箱都有这个功能(如果你使用的是移动的手机号,可以让zabbix将报警信息发送到139邮箱,再通过139绑定到手机号来接收短信,免费),当然如果你使用qq邮箱微信也是可以推送邮件提醒的,完全免费。

微信:对于我这种手机一响就会掏出来看一下的人比较方便,可定制化强, 完全免费


下面来介绍下如何通过 wechat 来配置 zabbix 报警

wechat 报警所具备的一些条件:

1、在 zabbix_server 中配置 alertscript 路径:

zabbix wechat 报警

2、在 zabbix 界面中确保触发器是已经启用的状态(一般做测试都会临时搭建一个 zabbix_server 出来,通过 ansible 定制包10分钟就可以安装完成)

zabbix wechat 报警

3、需要申请微信企业号

去该页面申请一个即可:https://qy.weixin.qq.com/
具体操作则是输入基本信息,在邮箱中点击链接进行激活,选择微信企业号类型、信息登记就可以了。


一、安装 simplejson 3.8.2 (Zabbix_Server 端操作)

wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz#md5=53b1371bbf883b129a12d594a97e9a18
tar zxf simplejson-3.8.2.tar.gz
cd simplejson-3.8.2
python setup.py build
python setup.py install

下载 wechat.py 安装脚本

git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git  
cp Zabbix-Alert-WeChat/wechat.py /usr/local/zabbix/alertscripts/
chmod +x wechat.py

二、企业微信号设置

我起名该企业微信号名称为报警小灵通

zabbix wechat 报警

1、通讯录设置
点击通讯录,新建一个技术部、接着在技术部下面新建一个子部门 —> 运维小组

zabbix wechat 报警

并记录运维小组的部门ID(等下修改wechat.py脚本的时候需要该ID号,用于发送报警信息)

zabbix wechat 报警

在通讯录中添加一个用户(该用户用来发送微信企业号的消息)

zabbix wechat 报警


2、应用中心设置

创建应用,取名 zabbix 报警,新建消息型应用,填写应用名称、功能介绍、并且选择可见范围 —> 运维小组。

zabbix wechat 报警

并且记录应用ID(等下修改wechat.py脚本的时候需要该ID号,用于发送报警信息)

zabbix wechat 报警

3、应用权限设置

点击左侧栏 —> 设置 —> 权限设置 —> 新建管理组,并且设置权限

zabbix wechat 报警

zabbix wechat 报警

继续点击刚才新建的小组 —> 权限处理 —> 记录 CorpID与Secret(等下修改wechat.py脚本的时候需要该ID号,用于发送报警信息)

zabbix wechat 报警

扫二维码即可关注,接收消息

zabbix wechat 报警


三、wechat 脚本修改(修改部门ID、应用ID、CorpID与SecretID),就是我们刚才所记录的,如果没有记录,可以回头去看

#!/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
    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":user,    #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
        "toparty":"4",    #企业号中的部门id。
        "msgtype":"text", #消息类型。
        "agentid":"6",    #企业号中的应用id。
        "text":{
            "content":subject + '/n' + 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传过来的第一个参数
    subject = str(sys.argv[2])  #zabbix传过来的第二个参数
    content = str(sys.argv[3])  #zabbix传过来的第三个参数

    corpid =  'wx5053'   #CorpID是企业号的标识
    corpsecret = 'FOPk4InFyvHFdz6-_NjeZ9gHN1zJG'  #corpsecretSecret是管理组凭证密钥
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)

执行 wechat.py 脚本进行测试,看是否收得到公众号信息,我这边是正常的

zabbix wechat 报警

zabbix wechat 报警


四、Zabibx Web 界面设置

1、添加报警媒介

点击管理 —> 报警媒介 —> 创建报警媒介
下图请注意!脚本参数中的第一个是我在微信企业号中创建的用户,并且 hongxue 是该用户的账户,并不是微信号!!!

zabbix wechat 报警

2、设置用户报警媒介

点击管理 —> 用户 —> 报警媒介(类型为刚才创建的报警媒介、收件人还是选择hongxue)

zabbix wechat 报警

3、配置触发器

点击配置 —> 动作 —> 创建动作(事件源为触发器),并且设置动作操作

zabbix wechat 报警


五、验证微信报警是否正常

我做了几个操作,修改 /etc/passwd,并且关闭ssh服务,具体动作日志可以点击报表 —> 动作日志查看

zabbix wechat 报警

下面可以看到我微信收到企业号推送的报警信息

zabbix wechat 报警