CentOS 7.6 zabbix5.0监控实现微信告警

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、创建模板

CentOS 7.6 zabbix5.0监控实现微信告警_第1张图片

CentOS 7.6 zabbix5.0监控实现微信告警_第2张图片

CentOS 7.6 zabbix5.0监控实现微信告警_第3张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第4张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第5张图片

2、创建应用集

CentOS 7.6 zabbix5.0监控实现微信告警_第6张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第7张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第8张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第9张图片

3、创建监控项

CentOS 7.6 zabbix5.0监控实现微信告警_第10张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第11张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第12张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第13张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第14张图片

4、创建触发器

CentOS 7.6 zabbix5.0监控实现微信告警_第15张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第16张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第17张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第18张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第19张图片

5、创建主机

添加被监控端主机的信息
CentOS 7.6 zabbix5.0监控实现微信告警_第20张图片

CentOS 7.6 zabbix5.0监控实现微信告警_第21张图片

6、为主机应用模板

这边建议创建模板然后创建主机,然后到主机里去链接到模板,这样比较灵活,因为有可能你要对多个主机应用同一个模板,就不用一个个创建
CentOS 7.6 zabbix5.0监控实现微信告警_第22张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第23张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第24张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第25张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第26张图片
链接好查看应该是这样的
CentOS 7.6 zabbix5.0监控实现微信告警_第27张图片

四、设置微信

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

1、注册企业微信

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

不复杂比较简单哦!
CentOS 7.6 zabbix5.0监控实现微信告警_第28张图片
注册好了就可以点击进入后台管理页面
CentOS 7.6 zabbix5.0监控实现微信告警_第29张图片

2、创建部门

CentOS 7.6 zabbix5.0监控实现微信告警_第30张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第31张图片
然后选择管理员账号就可以了

3、创建应用

CentOS 7.6 zabbix5.0监控实现微信告警_第32张图片CentOS 7.6 zabbix5.0监控实现微信告警_第33张图片

4、调试接口

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

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

调试的时候需要两样东西

1、企业id
CentOS 7.6 zabbix5.0监控实现微信告警_第34张图片
2、secret
CentOS 7.6 zabbix5.0监控实现微信告警_第35张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第36张图片
企业微信团队会给你发消息,点击“前往查看”
CentOS 7.6 zabbix5.0监控实现微信告警_第37张图片
把secret复制到电脑上
CentOS 7.6 zabbix5.0监控实现微信告警_第38张图片

CentOS 7.6 zabbix5.0监控实现微信告警_第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里的用户账号:
CentOS 7.6 zabbix5.0监控实现微信告警_第40张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第41张图片

获取Partyid:
CentOS 7.6 zabbix5.0监控实现微信告警_第42张图片
获取Agentid:
CentOS 7.6 zabbix5.0监控实现微信告警_第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

能收到说明我们微信告警的脚本就没问题了,可以用了
CentOS 7.6 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

CentOS 7.6 zabbix5.0监控实现微信告警_第45张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第46张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第47张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第48张图片

2、配置动作

CentOS 7.6 zabbix5.0监控实现微信告警_第49张图片

CentOS 7.6 zabbix5.0监控实现微信告警_第50张图片

CentOS 7.6 zabbix5.0监控实现微信告警_第51张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第52张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第53张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第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}

CentOS 7.6 zabbix5.0监控实现微信告警_第55张图片

CentOS 7.6 zabbix5.0监控实现微信告警_第56张图片

CentOS 7.6 zabbix5.0监控实现微信告警_第57张图片

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

主机IP:{
     HOST.IP}

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

告警等级:{
     TRIGGER.SEVERITY}

告警项目:{
     TRIGGER.KEY1}

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

事件ID:{
     EVENT.ID}

CentOS 7.6 zabbix5.0监控实现微信告警_第58张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第59张图片

3、应用到用户

CentOS 7.6 zabbix5.0监控实现微信告警_第60张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第61张图片
CentOS 7.6 zabbix5.0监控实现微信告警_第62张图片

CentOS 7.6 zabbix5.0监控实现微信告警_第63张图片
然后就可以测试报警啦

七、告警测试

到客户端上把http服务停掉

[root@dockertest ~]# systemctl stop httpd

大概几秒钟之后zabbix的主页就能同步状态并提示已发送告警
CentOS 7.6 zabbix5.0监控实现微信告警_第64张图片
微信收到如下提示:
CentOS 7.6 zabbix5.0监控实现微信告警_第65张图片
再到客户端把http服务开启,主页问题就消失了,微信收到如下信息,测试成功

[root@dockertest ~]# systemctl start httpd

CentOS 7.6 zabbix5.0监控实现微信告警_第66张图片

你可能感兴趣的:(企业级应用,zabbix,zabbix5.0,zabbix微信告警,zabbix监控,zabbix运维)