前言:

监控对我们来说太重要了,监控工具也有很多,像 Cacti 、Nagios,Ganglia,Zabbix等等,今天我们要介绍的是Zabbix,它的功能很强大,在介绍Zabbix之前,先简单说一下之前的 Cacti 和 Nagios。

1、Cacti:它是一款数据采集,数据存储,外加web界面展示的工具,它的数据展示功能很强大,但是故障报警方面很薄弱。

2、Nagios:告警功能异常强大,但是数据展示方面薄弱,并且监控主机数量有限。

而 Zabbix 是集以上两款工具的优点于一身,并且更加强大,能实现企业级的分布式监控。

监控系统采集数据的方式:
snmp简单,但是安全性差,主要针对网络设备,网络设备不能安装agent
server/agent安全性高,功能强大。

(1)概念:

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

(2)构成部分:zabbix server;zabbix agent

  • zabbix server:可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
  • zabbix agent:需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。

(3)特点

- 安装与配置简单,学习成本低;
    - 支持多语言(包括中文);
    - 免费开源;
    - 自动发现服务器与网络设备;
    - 分布式监视以及WEB集中管理功能;
    - 可以无agent监视;
    - 用户安全认证和柔软的授权方式;
    - 通过WEB界面设置或查看监视结果;
    - email等通知功能

(4)功能(可以监控哪些内容)

- CPU负荷
   - 内存使用
   - 磁盘使用
   - 网络状况
   - 端口监视
   - 日志监视

(5)Zabbix 中的常见组件:

1、Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行;

2、Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据;

3、Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;

4、Proxy:可选组件,常用于分布式监控环境中,代理Server收集被监控端的监控数据并统一发往Server端;

5、Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端;

默认情况下zabbix包含5个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server。

(6)下面介绍一下常见的进程:

1、zabbix_agentd:客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。

2、zabbix_get: zabbix工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令。通常用户排错。

3、zabbix_sender:zabbix工具,用于发送数据给server或者proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致zabbix超时。于是我们在脚本执行完毕之后,使用sender主动提交数据。

4、zabbix_server:zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server

5、zabbix_proxy: zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里。

6、zabbix_java_gateway:zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。

———— 工作原理:

zabbix api access在哪 zabbix cacti_php


zabbix api access在哪 zabbix cacti_php_02


分布式监控系统示意图:监控数据被提交给zabbix proxy 再 提交给zabbix server

zabbix api access在哪 zabbix cacti_zabbix安装部署_03

zabbix agent 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。

这里agent收集数据分为主动和被动两种模式:

  • 主动模式:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy;
  • 被动模式:server向agent请求获取监控项的数据,agent返回数据。

———— zabbix 监控架构:

在实际监控架构中,zabbix根据网络环境、监控规模等 分了三种架构server-client 、master-node-client、server-proxy-client

(1)server-client架构:是zabbix的最简单的架构,监控机和被监控机之间不经过任何代理,直接由zabbix server和zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境。

(2)server-proxy-client架构:其中proxy是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后再提交给server。该架构经常是和master-node-client架构做比较的架构 ,一般适用于跨机房、跨网络的中型网络架构的监控。

(3)master-node-client架构:该架构是zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境。每个node同时也是一个server端,node下面可以接proxy,也可以直接接client。node有自已的配置文件和数据库,其要做的是将配置信息和监控数据向master同步,master的故障或损坏对node其下架构的完整性。

———— 下面,搭建一个比较典型的架构(server-client架构):

部署在 LAMP 架构的上的:

——— 部署过程:

1 : 安装配置LAMP环境,以满足zabbix的代码部署要求
2 : 创建监控数据库并部署PHP网页文档
3 : 安装监控端:zabbix server
4 : 使用浏览器访问PHP网页文档并提示安装zabbix
5 : 安装被监控端数 :zabbix_agentd
6 : 在web界面配置添加被监控端主机及监控项

———— 环境准备:

角色

安装内容

监控端(192.168.220.131)

lamp架构、zabbix server

被监控端(192.168.220.140)

zabbix_agentd

(1)先开始部署LAMP架构(安装在监控端上):

//用 yum快速部署安装 lamp架构:
[root@localhost ~]# yum install -y \
> httpd \
> mariadb-server mariadb \
> php php-mysql \
> php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mhash

//修改 httpd.conf配置文件:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
--修改以下三项:
1、域名:
ServerName www.kgc.com:80    //自己自定义一个域名
2、监听地址:
Listen 192.168.220.131:80    //监听本机的ip地址即可
#Listen 80                   //注释ipv6的地址
3、在首页模块中,添加php首页:
<IfModule dir_module>
    DirectoryIndex index.html index.php  //添加PHP主页
</IfModule>


//修改PHP文件:
[root@localhost ~]# vim /etc/php.ini
在Date模块中,设置中国时区:
;date.timezone = PRC


//开启服务,并检查端口是否都正常:
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# systemctl start mariadb.service
[root@localhost ~]# netstat -ntap | egrep "80|3306"


//配置mysql:
[root@localhost ~]# mysql_secure_installation   ##安全配置向导 (第一个设置密码、其他选择n 、最后一个y)

//登录数据库:
[root@localhost ~]# mysql -u root -p
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 *.* TO 'zabbix'@'%' IDENTIFIED BY 'admin123';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select user,host from mysql.user;  //查看数据库,因为此时可能会存在空白用户会影响数据库连接

MariaDB [(none)]> drop user ''@localhost;  //删除
Query OK, 0 rows affected (0.00 sec)  

MariaDB [(none)]> drop user ''@localhost.localdomain;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;   //刷新数据库
Query OK, 0 rows affected (0.00 sec)

zabbix api access在哪 zabbix cacti_zabbix api access在哪_04

//创建 PHP 首页,用户测试数据库的连接是否成功:

[root@localhost ~]# vim /var/www/html/index.php

<?php
$link=mysql_connect('192.168.220.131','zabbix','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();

测试:在浏览器上输入,192.168.220.131/index.php

显示Success!! 即表示成功

zabbix api access在哪 zabbix cacti_zabbix安装部署_05

(2)架构安装好之后,开始安装监控端,zabbix server:

[root@localhost ~]# yum install php-bcmath php-mbstring -y

//会自动生成yum源文件,保证系统可以上网
[root@localhost ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpm

[root@localhost ~]# yum install zabbix-server-mysql zabbix-web-mysql -y

//输入密码:admin123,生成数据库文件
[root@localhost ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.0/create.sql.gz | mysql -uzabbix -p  zabbix

zabbix api access在哪 zabbix cacti_zabbix安装部署_06

//添加 zabbix 数据库密码:
[root@localhost ~]# vim /etc/zabbix/zabbix_server.conf
DBPassword=admin123

zabbix api access在哪 zabbix cacti_数据_07

//修改时区:
[root@localhost ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai

zabbix api access在哪 zabbix cacti_zabbix安装部署_08

//开启服务:
[root@localhost ~]# systemctl start zabbix-server
[root@localhost ~]# systemctl enable zabbix-server
[root@localhost ~]# netstat -anpt | grep zabbix   //监听端口是10051
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      112508/zabbix_serve 
tcp6       0      0 :::10051                :::*                    LISTEN      112508/zabbix_serve

[root@localhost ~]# systemctl restart httpd.service

(3)现在,先在浏览器上检测一下,监控端是否部署成功,浏览器访问:http://192.168.220.131/zabbix/

zabbix api access在哪 zabbix cacti_mysql_09


1、点击 Next step :配置数据库连接:

zabbix api access在哪 zabbix cacti_mysql_10


2、Name 填写 zabbix

zabbix api access在哪 zabbix cacti_php_11


zabbix api access在哪 zabbix cacti_php_12


3、安装后登录:用户名:Admin 密码:zabbix

zabbix api access在哪 zabbix cacti_zabbix安装部署_13


4、最后点击 “Sign in”

zabbix api access在哪 zabbix cacti_zabbix api access在哪_14


5、语言选择:进入界面后,可以在右上角 ----> 用户设置 ----> 选择中文(zh_CN) ----> 更新

zabbix api access在哪 zabbix cacti_php_15


中文界面:

zabbix api access在哪 zabbix cacti_zabbix api access在哪_16

(4)接下来,安装被监控端,zabbix_agentd:

//首先,关闭防火墙:
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

//安装相关组件:
[root@localhost ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpm
[root@localhost ~]# yum install -y zabbix-agent

//修改配置文件:
[root@localhost ~]# vim  /etc/zabbix/zabbix_agentd.conf
修改以下三项:

Server=192.168.220.131
ServerActive=192.168.220.131
Hostname=test  //这个名字是自定义的

zabbix api access在哪 zabbix cacti_php_17


zabbix api access在哪 zabbix cacti_php_18

//开启服务:
[root@localhost ~]# systemctl start zabbix-agent.service
[root@localhost ~]# systemctl enable zabbix-agent.service

//被监控端的端口是10050
[root@localhost ~]# netstat -anpt | grep zabbix
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      5478/zabbix_agentd  
tcp6       0      0 :::10050                :::*                    LISTEN      5478/zabbix_agentd

(5)在 zabbix web 界面配置添加被监控端主机及监控项:

1、步骤:

配置 ----> 主机 ----> 创建主机

zabbix api access在哪 zabbix cacti_php_19


2、在模板中,还可以选择监控的服务(我这里选择了 SSH、HTTP):

zabbix api access在哪 zabbix cacti_数据_20


zabbix api access在哪 zabbix cacti_数据_21