Zabbix是一个非常强大的开源监控软件,但是正常情况下我们只会登到它提供的Web界面来查看监控的信息,不过Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是现在越来越多的企业开始使用Zabbix结合微信作为主要的告警方式,毕竟用邮件的话,看起来没有那么方便,下面来介绍一下怎么将Zabbix发报警信息给微信!

环境介绍:
系统:Centos7.3
zabbix:3.4.13
企业微信

一、企业微信注册

这里直接上企业微信官网直接注册就行,注册比较简单,也不用像以前那样提供营业执照什么的了。
地址:http://work.weixin.qq.com/

二、配置企业微信

注册好后在管理界面点击应用与小程序

企业微信 监控群聊消息 java 企业微信app监控_企业微信 监控群聊消息 java

企业微信 监控群聊消息 java 企业微信app监控_微信_02

企业微信 监控群聊消息 java 企业微信app监控_企业微信_03

创建好应用以后进入应用里把这两个值记录下来

企业微信 监控群聊消息 java 企业微信app监控_企业微信_04

然后再点击上方的我的企业,把企业的ID也记录一下

企业微信 监控群聊消息 java 企业微信app监控_企业微信_05

微信接口调用,测试一下接口有没有问题

调用微信接口需要一个调用接口的凭证:access_token

通过CorpID和Secret可以获得access_token

微信企业号接口调试地址: http://qydev.weixin.qq.com/debug

企业微信 监控群聊消息 java 企业微信app监控_企业微信_06

三、配置Python脚本(也可以用shell)

1、查看Zabbix-server的脚本路径在哪里
打开zabbix-server的配置文件,指定脚本存放路径(这一步很重要,不做的话zabbix识别不到脚本)

root@backup:~ # vim /etc/zabbix/zabbix_server.conf

企业微信 监控群聊消息 java 企业微信app监控_微信_07

2、下载python微信脚本放置上面设置的脚本存放路径
#安装simplejson

#wget https://files.pythonhosted.org/packages/e3/24/c35fb1c1c315fc0fffe61ea00d3f88e85469004713dab488dee4f35b0aff/simplejson-3.16.0.tar.gz
#tar zxvf simplejson-3.16.0.tar.gz && cd simplejson-3.16.0
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 && chown zabbix:zabbix wechat.py

3、修改wechat.py脚本 (要修改的部分只有corpid,appsecret,agentid,还有日志路径,把刚才截图里查询的结果填进去即可)

root@backup:~ # vim /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/env python
 #-*- coding: utf-8 -*- 
#date: 2018-11-12 
#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/lib/zabbix/alertscripts','weixin.log'),                  
filemode = 'a')   #指定一下日志的路径

corpid='ww80b211239205218'   # 企业ID 
appsecret='F9gCNmbiSyB5cvaYwq6BII9egNNBNaOeyr4wOUk'   #应用里的Secret  
agentid=1000002   #应用里的AgentID  
#获取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)

企业微信 监控群聊消息 java 企业微信app监控_企业微信_08

4、测试脚本

root@backup:~ # chmod  +x /usr/lib/zabbix/alertscripts/wechat.py
root@backup:~ # chown -R zabbix:zabbix  /usr/lib/zabbix/alertscripts/ #记得把这个文件夹的属主和属组给到zabbix
这个用户,不然可能zabbix调用不了这个脚本
root@backup:/usr/lib/zabbix/alertscripts # ./wechat.py ZhangYouCheng  abc  123456789
{"errcode":0,"errmsg":"ok","invaliduser":""}

参数1,:用户名 参数2:主题 参数3:内容

用户名:注意,这个脚本的参数1的用户名必须是企业微信里的账号名字如下图

企业微信 监控群聊消息 java 企业微信app监控_企业微信 监控群聊消息 java_09

查看一下企业微信里能不能收到脚本发来的信息,如果能收到的话已经成功一半了!

企业微信 监控群聊消息 java 企业微信app监控_微信_10

ok,收到消息后只需去Zabbix的web配置一下即可

四、Zabbix Web界面配置

1、配置报警媒介

管理—>报警媒介类型—>创建媒体类型

企业微信 监控群聊消息 java 企业微信app监控_json_11

企业微信 监控群聊消息 java 企业微信app监控_企业微信_12


脚本参数:

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

2、配置用户群组,创建监控用户
在创建用户之前先配置一下用户和群组
管理—>用户群组— Zabbix administrators (这个应该是系统自带的群组,没有的话再创建一个吧)

企业微信 监控群聊消息 java 企业微信app监控_企业微信 监控群聊消息 java_13

进去后选择权限,依次选择,把所有群组都勾选上

企业微信 监控群聊消息 java 企业微信app监控_json_14

企业微信 监控群聊消息 java 企业微信app监控_zabbix报警_15

现在这个群组对所有的组都有读写权限了,现在去创建用户

企业微信 监控群聊消息 java 企业微信app监控_企业微信_16

管理—>用户—>创建用户

创建一个接收zabbix报警的用户

依次配置用户、报警媒介、权限

企业微信 监控群聊消息 java 企业微信app监控_json_17

报警媒介这一烂这样配

企业微信 监控群聊消息 java 企业微信app监控_微信_18

权限的话给读写权限,一定是要读写权限,没有读写权限很有可能没有办法发出去消息 !!!

企业微信 监控群聊消息 java 企业微信app监控_企业微信 监控群聊消息 java_19


配置完点更新

企业微信 监控群聊消息 java 企业微信app监控_json_20

3、创建动作

配置—>动作—>创建动作

企业微信 监控群聊消息 java 企业微信app监控_zabbix报警_21

企业微信 监控群聊消息 java 企业微信app监控_企业微信_22

企业微信 监控群聊消息 java 企业微信app监控_json_23

企业微信 监控群聊消息 java 企业微信app监控_json_24

方便复制
默认标题:故障告警:{TRIGGER.STATUS}: {TRIGGER.NAME}
消息内容:告警主机:{HOST.NAME} 
主机地址:{HOST.IP} 
告警时间:{EVENT.DATE} {EVENT.TIME} 
告警等级:{TRIGGER.SEVERITY} 
告警信息:{TRIGGER.NAME} 
问题详情:{ITEM.NAME}:{ITEM.VALUE} 
事件代码:{EVENT.ID}

企业微信 监控群聊消息 java 企业微信app监控_企业微信 监控群聊消息 java_25

默认标题:故障解除:{TRIGGER.STATUS}: {TRIGGER.NAME}
恢复主机:{HOST.NAME} 
主机地址:{HOST.IP} 
恢复时间:{EVENT.DATE} {EVENT.TIME} 
恢复等级:{TRIGGER.SEVERITY} 
恢复信息:{TRIGGER.NAME} 
问题详情:{ITEM.NAME}:{ITEM.VALUE} 
事件代码:{EVENT.ID}

企业微信 监控群聊消息 java 企业微信app监控_企业微信_26

默认标题:Acknowledged: {TRIGGER.NAME}
消息内容:{USER.FULLNAME} acknowledged problem at {ACK.DATE} {ACK.TIME} with the following message:
{ACK.MESSAGE}

Current problem status is {EVENT.STATUS}

配置完后保存

去检查一下

基本上配置完这三个以后就可以收到zabbix发来的消息了

企业微信 监控群聊消息 java 企业微信app监控_企业微信 监控群聊消息 java_27

能够收到zabbix发来的报警了

企业微信 监控群聊消息 java 企业微信app监控_企业微信_28