zabbix5.0监控实现微信告警

  • 一、配置zabbix客户端
  • 1、环境说明
  • 2、下载zabbix_agent
  • 3、修改配置文件
  • 4、启动zabbix_agentd
  • 二、安装启动httpd
  • 三、监控告警设置
  • 1、创建模板
  • 2、创建应用集
  • 3、创建监控项
  • 4、创建触发器
  • 5、创建主机
  • 6、为主机应用模板
  • 四、设置微信
  • 1、注册企业微信
  • 2、创建部门
  • 3、创建应用
  • 4、调试接口
  • 五、微信告警脚本
  • 1、安装python3.6
  • 2、编写告警脚本
  • 3、脚本测试
  • 六、配置告警媒介
  • 1、创建媒介类型:wechat
  • 2、配置动作
  • 3、应用到用户
  • 七、告警测试


一、配置zabbix客户端

1、环境说明

服务端配置请看这一篇:CentOS7.6 源码安装zabbix5.0及初始化配置(超详细)

服务端:192.168.245.204
客户端:192.168.245.203

这里测试基于http服务的告警,如果服务down了就微信通知告警
这里还需要安装注册企业微信,请提前安装好,后面有说明

服务端配置好以后,我们需要配置客户端,客户端需要安装zabbix_agent并启动才能让zabbix服务器监控到它

2、下载zabbix_agent

首先下载zabbix_agent,我这里是源码安装的

[root@dockertest ~]# wget https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.13/zabbix_agent-5.0.13-linux-3.0-amd64-static.tar.gz

创建一个目录用于存放文件

[root@dockertest ~]# mkdir /usr/local/zabbix_agent

解压源码包到zabbix_agent目录

[root@dockertest ~]# tar xf zabbix_agent-5.0.13-linux-3.0-amd64-static.tar.gz -C /usr/local/zabbix_agent

3、修改配置文件

修改配置文件zabbix_agentd.conf

[root@dockertest ~]# cd /usr/local/zabbix_agent/
[root@dockertest zabbix_agent]# vim  conf/zabbix_agentd.conf
Server=192.168.245.204
ServerActive=192.168.245.204
Hostname=Apache web server
UnsafeUserParameters=1

制作命令的软链接

[root@dockertest zabbix_agent]# ln -s /usr/local/zabbix_agent/bin/* /usr/local/bin/
[root@dockertest zabbix_agent]# ln -s /usr/local/zabbix_agent/sbin/* /usr/local/sbin/

然后需要把配置文件放到/usr/local/etc/zabbix_agentd.conf下否则无法启动

[root@dockertest zabbix_agent]# cp conf/zabbix_agentd.conf /usr/local/etc/zabbix_agentd.conf

还要创建系统用户和组zabbix否则也无法启动

[root@dockertest zabbix_agent]# groupadd --system zabbix
[root@dockertest zabbix_agent]# useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix

4、启动zabbix_agentd

启动zabbix客户端程序

[root@dockertest zabbix_agent]# zabbix_agentd
[root@dockertest zabbix_agent]# netstat -antp | grep zabbix
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      31625/zabbix_agentd

到服务端上去检查一下能否获得客户端的信息

[root@zabbix-server ~]# zabbix_get -s 192.168.245.203 -p 10050 -k system.uname
Linux dockertest 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64

二、安装启动httpd

因为我们监控的是客户端的http服务,所以安装apache并启动

[root@dockertest zabbix_agent]# yum -y install httpd
[root@dockertest zabbix_agent]# systemctl start httpd

三、监控告警设置

1、创建模板

java监控手机微信 对微信进行监控_zabbix5.0

java监控手机微信 对微信进行监控_zabbix监控_02

java监控手机微信 对微信进行监控_java监控手机微信_03


java监控手机微信 对微信进行监控_zabbix5.0_04


java监控手机微信 对微信进行监控_zabbix5.0_05

2、创建应用集

java监控手机微信 对微信进行监控_zabbix监控_06


java监控手机微信 对微信进行监控_zabbix_07


java监控手机微信 对微信进行监控_zabbix监控_08


java监控手机微信 对微信进行监控_zabbix监控_09

3、创建监控项

java监控手机微信 对微信进行监控_zabbix监控_10


java监控手机微信 对微信进行监控_java监控手机微信_11


java监控手机微信 对微信进行监控_zabbix监控_12


java监控手机微信 对微信进行监控_zabbix_13


java监控手机微信 对微信进行监控_java监控手机微信_14

4、创建触发器

java监控手机微信 对微信进行监控_java监控手机微信_15


java监控手机微信 对微信进行监控_zabbix5.0_16


java监控手机微信 对微信进行监控_zabbix监控_17


java监控手机微信 对微信进行监控_zabbix监控_18


java监控手机微信 对微信进行监控_zabbix5.0_19

5、创建主机

添加被监控端主机的信息

java监控手机微信 对微信进行监控_zabbix5.0_20

java监控手机微信 对微信进行监控_zabbix微信告警_21

6、为主机应用模板

这边建议创建模板然后创建主机,然后到主机里去链接到模板,这样比较灵活,因为有可能你要对多个主机应用同一个模板,就不用一个个创建

java监控手机微信 对微信进行监控_java监控手机微信_22


java监控手机微信 对微信进行监控_zabbix微信告警_23


java监控手机微信 对微信进行监控_java监控手机微信_24


java监控手机微信 对微信进行监控_java监控手机微信_25


java监控手机微信 对微信进行监控_zabbix微信告警_26


链接好查看应该是这样的

java监控手机微信 对微信进行监控_zabbix_27

四、设置微信

服务器设置好以后就开始对微信进行相关设置

1、注册企业微信

https://work.weixin.qq.com/wework_admin/register_wx

不复杂比较简单哦!

java监控手机微信 对微信进行监控_zabbix监控_28


注册好了就可以点击进入后台管理页面

java监控手机微信 对微信进行监控_java监控手机微信_29

2、创建部门

java监控手机微信 对微信进行监控_zabbix5.0_30


java监控手机微信 对微信进行监控_zabbix监控_31


然后选择管理员账号就可以了

3、创建应用

java监控手机微信 对微信进行监控_zabbix5.0_32

java监控手机微信 对微信进行监控_zabbix监控_33

4、调试接口

创建好之后需要进行接口的调试,这一步主要就是测试我们之后微信可否能发成功

微信企业号接口调试工具:
https://open.work.weixin.qq.com/wwopen/devtool/interface/combine

调试的时候需要两样东西

1、企业id

java监控手机微信 对微信进行监控_zabbix_34


2、secret

java监控手机微信 对微信进行监控_zabbix监控_35


java监控手机微信 对微信进行监控_zabbix微信告警_36


企业微信团队会给你发消息,点击“前往查看”

java监控手机微信 对微信进行监控_zabbix5.0_37


把secret复制到电脑上

java监控手机微信 对微信进行监控_java监控手机微信_38

java监控手机微信 对微信进行监控_zabbix监控_39

五、微信告警脚本

下面就开始编写微信告警的脚本了

告警脚本存放位置:/usr/local/share/zabbix/alertscripts

1、安装python3.6

因为微信告警脚本是python写的,所以需要先安装python,系统预装python版本是2.7,实践会报错找不到模块

ImportError: No module named 'typing'

所以需要安装python3.6解决,但yum支持不了这么高版本的python,所以这里用源码安装python,然后装requests模块的时候也不要用系统预装的pip,用pip3

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz

tar -xf Python-3.6.4.tgz

mkdir -p /usr/local/Python3

cd Python-3.6.4/

./configure --prefix=/usr/local/python3
 
make && make install

ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3

cd /usr/local/python3

pip3 install requests    //requests是一个Python第三方库,处理URL资源特别方便

2、编写告警脚本

一定要到告警脚本目录下,把微信的告警脚本放进去,这里是找的网上的版本,自己根据实际情况把重要字段改了下,需要修改的地方后面用#注释标明了,需要改成自己微信相关的信息

[root@zabbix-server python3]# cd /usr/local/share/zabbix/alertscripts
[root@zabbix-server alertscripts]# vim wechat.py
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_
#auther:火星小刘
 
import requests,sys,json
import urllib3
urllib3.disable_warnings()
 
reload(sys)
sys.setdefaultencoding('utf-8')
 
def GetTokenFromServer(Corpid,Secret):
    Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
    Data = {
        "corpid":Corpid,
        "corpsecret":Secret
    }
    r = requests.get(url=Url,params=Data,verify=False)
    print(r.json())
    if r.json()['errcode'] != 0:
        return False
    else:
        Token = r.json()['access_token']
        file = open('/tmp/zabbix_wechat_config.json', 'w')
        file.write(r.text)
        file.close()
        return Token
 
def SendMessage(User,Agentid,Subject,Content):
    try:
        file = open('/tmp/zabbix_wechat_config.json', 'r')
        Token = json.load(file)['access_token']
        file.close()
    except:
        Token = GetTokenFromServer(Corpid, Secret)
 
    n = 0
    Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
    Data = {
        "touser": "S*****ie",                  # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。 		  
        #"totag": Tagid,                                # 企业号中的标签id,群发使用(推荐)
        "toparty": "2",                             # 企业号中的部门id,群发时使用。
        "msgtype": "text",                              # 消息类型。
        "agentid": "1000002",                             # 企业号中的应用id。
        "text": {
            "content": Subject + '\n' + Content
        },
        "safe": "0"
    }
    r = requests.post(url=Url,data=json.dumps(Data),verify=False)
    while r.json()['errcode'] != 0 and n < 4:
        n+=1
        Token = GetTokenFromServer(Corpid, Secret)
        if Token:
            Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
            r = requests.post(url=Url,data=json.dumps(Data),verify=False)
            print(r.json())
 
    return r.json()
 
 
if __name__ == '__main__':
    User = sys.argv[1]                                                                # zabbix传过来的第一个参数
    Subject = str(sys.argv[2])                                                      # zabbix传过来的第二个参数
    Content = str(sys.argv[3])                                                     # zabbix传过来的第三个参数
 
    Corpid = "ww6ba7489884e59b0c"                                                  # CorpID是企业号的标识
    Secret = "Mnzu5QIAKF5zJqg-2N33PDbssY9Kx3RK1XxA8FTNgUk"                         # Secret是管理组凭证密钥
    #Tagid = "1"                                                                        # 通讯录标签ID
    Agentid = "1000002"                                                                 # 应用ID
    Partyid = "2"                                                                      # 部门ID
 
    Status = SendMessage(User,Agentid,Subject,Content)
    print Status

获取touser里的用户账号:

java监控手机微信 对微信进行监控_zabbix5.0_40


java监控手机微信 对微信进行监控_java监控手机微信_41

获取Partyid:

java监控手机微信 对微信进行监控_zabbix_42


获取Agentid:

java监控手机微信 对微信进行监控_zabbix监控_43

修改完别忘了加可执行权限

[root@zabbix-server alertscripts]# chmod +x wechat.py

3、脚本测试

手动测试一下发一条信息看微信能不能收到

[root@zabbix-server alertscripts]# ./wechat.py S******e test hello
/usr/lib/python2.7/site-packages/urllib3/connectionpool.py:769: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
{u'access_token': u's3eqGeu6Sr9ZyFsar8ll9TgxInJ9UhYrH6TbyUg9xkI63FrSUjZQYS44hwEVGJP4krUBVP-qrViPwiADf929tBa1oCyRHIwqZkMhuMEboOqgumYql1bTpvphaYJZFcpyfyHq50cLKZiFzudgggJXcgbfGlE5vJHA8gvUHeHeejluQxWO39N40qgTscHOy_eotm-VWFuFBTXB39Yqvph5Sg', u'expires_in': 7200, u'errcode': 0, u'errmsg': u'ok'}
{u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}
wechat.py的三个参数:
企业账号:S*****e
标题:test
内容:hello

能收到说明我们微信告警的脚本就没问题了,可以用了

java监控手机微信 对微信进行监控_zabbix5.0_44


测试报警之前需要修改一下这个文件的权限:zabbix_wechat_config.json

这个文件是用来存放刚才接口调用的返回结果的

否则之后告警会报没有权限而无法发送

[root@zabbix-server ~]# ll /tmp/zabbix_wechat_config.json
-rw-r--r-- 1 root root 277 7月   7 17:52 /tmp/zabbix_wechat_config.json

[root@zabbix-server ~]# chown zabbix.zabbix /tmp/zabbix_wechat_config.json

六、配置告警媒介

1、创建媒介类型:wechat

java监控手机微信 对微信进行监控_zabbix_45


java监控手机微信 对微信进行监控_zabbix5.0_46


java监控手机微信 对微信进行监控_zabbix_47


java监控手机微信 对微信进行监控_zabbix5.0_48

2、配置动作

java监控手机微信 对微信进行监控_zabbix微信告警_49

java监控手机微信 对微信进行监控_zabbix5.0_50

java监控手机微信 对微信进行监控_zabbix微信告警_51


java监控手机微信 对微信进行监控_zabbix_52


java监控手机微信 对微信进行监控_java监控手机微信_53


java监控手机微信 对微信进行监控_java监控手机微信_54

故障问题:{EVENT.NAME}
告警主机:{HOSTNAME1}

告警时间:{EVENT.DATE} {EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

java监控手机微信 对微信进行监控_zabbix5.0_55

java监控手机微信 对微信进行监控_zabbix_56

java监控手机微信 对微信进行监控_java监控手机微信_57

故障恢复:{EVENT.NAME}
恢复主机:{HOSTNAME1}

主机IP:{HOST.IP}

恢复时间:{EVENT.RECOVERY.TIME}    //网上很多这里写的跟告警时间是一样的,如果是这样会出现故障恢复了才会发告警信息,这一般不符合逻辑,所以需要改成这样

告警等级:{TRIGGER.SEVERITY}

告警项目:{TRIGGER.KEY1}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

java监控手机微信 对微信进行监控_zabbix监控_58


java监控手机微信 对微信进行监控_zabbix微信告警_59

3、应用到用户

java监控手机微信 对微信进行监控_zabbix微信告警_60


java监控手机微信 对微信进行监控_java监控手机微信_61


java监控手机微信 对微信进行监控_zabbix5.0_62

java监控手机微信 对微信进行监控_zabbix_63


然后就可以测试报警啦

七、告警测试

到客户端上把http服务停掉

[root@dockertest ~]# systemctl stop httpd

大概几秒钟之后zabbix的主页就能同步状态并提示已发送告警

java监控手机微信 对微信进行监控_zabbix监控_64


微信收到如下提示:

java监控手机微信 对微信进行监控_zabbix5.0_65


再到客户端把http服务开启,主页问题就消失了,微信收到如下信息,测试成功

[root@dockertest ~]# systemctl start httpd

java监控手机微信 对微信进行监控_java监控手机微信_66