我的服务器是阿里云里的服务器,由于服务器有限,因此以下操作都是在一台服务器上进行的,也就是我自己监控我自己,不过无伤大雅,微信报警机器人还是会报警的。下面你准备好了麻,要开始辣~

监控环境准备 

部署zabbix-server【监控端】 

部署zabbix-agent【被监控端】 

实现对web服务器监控【监控端】 

zabbix 企业微信报警【监控端】

一.监控环境准备

1.1在你的服务器上添加安全组,HTTP端口号80、zabbix-server端口号10051、zabbix-agent端口号10050

zabbix-server和zabbix-agent的安全组规则类似

二.部署zabbix-server【监控端】

2.1 安装zabbix-server

[root@bcf ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm                 (先下载rpm包)

[root@bcf ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent httpd mariadb mariadb-server

2.2 启动mariadb

[root@bcf ~]# systemctl restart mariadb
[root@bcf ~]# systemctl enable mariadb      // 设置开机自启

2.3 准备数据库及授权

[root@bcf ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> Ctrl-C -- exit!
Aborted

2.4 导入数据库文件

[root@bcf ~]# zcat /usr/share/doc/zabbix-server-mysql-3.4.15/create.sql.gz | mysql -uzabbix -pzabbix zabbix

2.5 修改zabbix配置文件

[root@bcf ~]# vim /etc/zabbix/zabbix_server.conf

DBHost=localhost

DBName=zabbix

DBUser=zabbix

DBPassword=zabbix

注意删除前面的空格

2.6 启动zabbix-server

[root@bcf ~]# systemctl restart zabbix-server zabbix-agent
[root@bcf ~]# systemctl enable zabbix-server zabbix-agent

2.7 修改Apache配置文件,修改时区

[root@bcf ~]# vim /etc/httpd/conf.d/zabbix.conf

php_value date.timezone Asia/Shanghai

2.8 启动Apache服务

[root@bcf ~]# systemctl restart httpd
[root@bcf ~]# systemctl enable httpd

2.9 访问IP

打开浏览器选用公网ip的方式访问: http://101.37.30.108/zabbix

安装成功之后,用户名为:Admin 密码为:zabbix

三、部署zabbix-agent【被监控端】

由于我们只有一台云主机,我们就拿同一台云主机作为被监控端

3.1 zabbix-agent配置

[root@bcf ~]# vim /etc/zabbix/zabbix_agentd.conf

Server=101.37.30.108  //zabbix-server IP 即监控端的IP

ServerActive=101.37.30.108  //zabbix-server IP 即监控端的IP

3.2 启动zabbix-agent

[root@bcf ~]# systemctl restart zabbix-agent
[root@bcf ~]# systemctl enable zabbix-agent

四、 实现对web服务器监控【监控端】

4.1 添加【主机组】

4.2 添加主机

暂不点击添加按钮

4.3 关联http模板

下一步一定要点击,添加,否则不生效

上步做完,再点击添加

4.4 查看或测试触发器效果(如果是2台服务器的话可以将被监控端的http服务down,然后在触发器里面可以看到效果,但是我们目前就一个服务器,如果把它down掉的话,也不能访问这个IP了,所以就不测试了)

测试之前先将主机web1的触发器的更新间隔改为3或5s

五、 zabbix 微信报警【监控端】

5.1 下载企业微信【手机】,创建企业

5.2 企业登录后台【pc】

这里注意可见范围一定要有一个企业,否则可能报警失败,下面需要用记事本保存一些有用的信息

应用:报警机器人

AgentID       1000004

Secret          Ke3oLYC_svLJdBK3OX6qlATpZGYZY5hsN6FuYioDhYU

企业CorpID ww39ce87f07c13a896

部门id          1

5.4 python报警监控脚本

需要修改脚本中的四个信息:

self.__corpid = 'ww39ce87f07c13a896' //公司的corpid

self.__secret = 'Ke3oLYC_svLJdBK3OX6qlATpZGYZY5hsN6FuYioDhYU' //应用的secret

'toparty':1, //部门id

'agentid':"1000004", //应用id

没有这个脚本的在/usr/lib/zabbix/alertscripts/的目录下创建一个wechat.py文件,并给文件加上执行权限

[root@bcf ~]# cd /usr/lib/zabbix/alertscripts/
[root@bcf alertscripts]# ls
wechat.py
[root@bcf alertscripts]# chmod +x wechat.py 
[root@bcf alertscripts]# vim wechat.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
class WeChat(object):
        __token_id = ''
        # init attribute
        def __init__(self,url):
                self.__url = url.rstrip('/')
                self.__corpid = 'ww39ce87f07c13a896'
                self.__secret = 'Ke3oLYC_svLJdBK3OX6qlATpZGYZY5hsN6FuYioDhYU'
        # Get TokenID
        def authID(self):
                params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
                data = urllib.urlencode(params)
                content = self.getToken(data)
                try:
                        self.__token_id = content['access_token']
                        # print content['access_token']
                except KeyError:
                        raise KeyError
        # Establish a connection
        def getToken(self,data,url_prefix='/'):
                url = self.__url + url_prefix + 'gettoken?'
                try:
                        response = urllib2.Request(url + data)
                except KeyError:
                        raise KeyError
                result = urllib2.urlopen(response)
                content = json.loads(result.read())
                return content

         # Get sendmessage url
        def postData(self,data,url_prefix='/'):
                url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
                request = urllib2.Request(url,data)
                try:
                        result = urllib2.urlopen(request)
                except urllib2.HTTPError as e:
                        if hasattr(e,'reason'):
                                print 'reason',e.reason
                        elif hasattr(e,'code'):
                                print 'code',e.code
                        return 0
                else:
                        content = json.loads(result.read())
                        result.close()
                return content

        # send message
        def sendMessage(self,touser,message):
                self.authID()
                data = json.dumps({
                        'touser':touser,
                        'toparty':1,
                        'msgtype':"text",
                        'agentid':"1000004",
                        'text':{
                                'content':message
                        },
                        'safe':"0"
                },ensure_ascii=False)
                response = self.postData(data)
                print response

if __name__ == '__main__':
        a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
        a.sendMessage(sys.argv[1],sys.argv[3])

监控脚本测试:

注:i为上图的企业微信名 test为标题 2为内容,标题和内容均可自定义

[root@bcf alertscripts]# ./wechat.py i test 2

结果是{u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}说明测试成功

5.6 zabbix 创建告警媒介

注:(以哪种方式发送报警信息,短信,脚本等等)

5.7 zabbix 添加告警用户

创建用户组:web-group,包含yangge、alice...等用户

创建用户:yangge、alice...等用户,并关联到微信告警

希望的结果是:发微信到组web-group,组中的用户yangge、alice都能收到

设置用户组web-group对主机群组bcf-webserver拥有读写(发送消息)权限

5.8 Zabbix 添加告别警动作

如果希望中文显示:

告警主机: {HOST.NAME}

告警地址: {HOST.IP}

监控项目: {ITEM.NAME}

告警等级: {TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

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

5.9 测试微信报警

被监控端操作

[root@bcf ~]# systemctl stop httpd

发现手机企业微信上发来以下短信

 

以上就是这个项目的全部内容辣,这个项目是千峰的石老师教我们的,还是叫飞哥亲切,这4天的实训中,非常感谢飞哥的付出,每次都会很认真的给我们每个人解决我们出现的问题,嘿嘿,飞哥辛苦辣~~,希望以后有缘江湖再见咯~