Linux下常用的系统监控软件有Nagios、Cacti、Zabbix、Monit等,这些开源的软件,可以帮助我们更好的管理服务器,在第一时间内发现错误,并通知系统维护人员。

那我们今天就开始研究Zabbix。使用Zabbix的目的,是为了能够更好的监控服务器,并且能够生成图形报表,虽然Nagios也能够生成图形报表,但没有Zabbix这么强大。

一、Zabbix的介绍

1、Zabbix简介

Zabbix是一个提供Web管理界面的企业级的开源系统/网络监控分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持盈利。
官方网站:https://www.zabbix.com/
英文安装文档:https://www.zabbix.com/documentation/3.4/manual

Zabbix由Zabbix Server与可选组件Zabbix Agent两部分组成,Zabbix通过 C/S 模式采集数据,通过 B/S 模式在 web 端展示和配置。
Zabbix Agent端:主机通过安装Agent方式采集数据,网络设备通过SNMP方式采集数据。
Zabbix Serve端:通过SNMP、Zabbix Agent、ping、端口监视等方法提供对远程服务器/网络状态的监视,将采集的数据写入到MySQL数据库中;再通过PHP+Apache在Web前端展示;最后对其进行分析整理,达到条件触发告警。

2、Zabbix特点

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

3、Zabbix功能

具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库性能监控、FTP 等通用协议监控、多种告警方式、详细的报表图表绘制)。

  • 支持自动发现网络设备和服务器(可以通过配置自动发现服务器规则来实现)。
  • 支持分布式,能集中展示、管理分布式的监控点,扩展性强。
  • 数据收集:支持 SNMP(包括 trapping and polling)、IPMI、JMX、SSH、TELNET。
  • 自定义的检测:自定义收集数据的频率。
  • 灵活的触发器:可以定义非常灵活的问题阈值,称为触发器。
  • 高可定制的报警:发送通知,可定制的报警升级,收件人,媒体类型。
  • 监控:CPU负荷、内存使用、磁盘使用、网络状况、端口监视、日志监视等等。
  • 硬件监控:Zabbix IPMI Interface
  • 系统监控:ZabbixAgent Interface
  • Java监控:Zabbix JMX Interface
  • 网络设备监控:Zabbix SNMP Interface
  • 应用服务监控:Zabbix Agent UserParameter
  • MySQL数据库监控:percona-monitoring-plulgins
  • URL监控:Zabbix Web 监控
  • Server:提供通用接口(API功能),可以自己开发完善各类监控(根据相关接口编写程序实现),编写插件容易,可以自定义监控项,报警级别的设置。

4、Zabbix架构图

Zabbix 支持多种网络方式下的监控,可通过分布式的方式部署和安装监控代理,整个架构下所示。
Zabbix监控系统部署

监控系统运行大概的流程如下:
Agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到Zabbix Server端,Zabbix Server将数据存储到数据库中,Zabbix Web根据数据在前端进行展现和绘图。这里Agentd收集数据分为主动和被动两种模式:

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

Aabbix常用的监控架构平台:

  • Server-Agentd模式:这个是最简单的架构了,常用于监控主机比较少的情况下。
  • Server-Proxy-Agentd模式:这个常用于比较多的机器,使用Proxy进行分布式监控,有效的减轻Server端的压力。

5、Zabbix运行条件

  • Server:指安装在Zabbix服务的服务器(以下简称服务器端)上,Zabbix Server 需运行在 LAMP(Linux+Apache+Mysql+PHP)的环境下(或者LNMP),对硬件要求低。
  • Agent:指安装在被监控设备上的 Zabbix 代理(以下简称代理端),被监控设备上的数据由代理收集后统一上传到服务器端由服务器端收集、整理并呈现。
  • SNMP:也是 Agent 的一种,指支持 SNMP 协议的设备(也可以是服务器),通过设定 SNMP 的参数将相关监控数据传送至服务器端(大部份的交换机、防火墙等网络设备都支持 SNMP 协议)。
  • IPMI:Agent 的另一种方式,主要应用于设备的物理性能监控,例如设备的温度、风扇的转速等。

二、系统环境

系统环境: CentOS 7.3
Web环境:Apache(Nginx) + MySQL + PHP(传送门LAMP、LNMP搭建)
Zabbix Server: 192.168.8.55
Zabbix Agent: 192.168.8.66

# 写hosts记录(Server和Agent)
[root@Server ~]# echo "192.168.8.55 Server" >> /etc/hosts
[root@Server ~]# echo "192.168.8.66 Agent" >> /etc/hosts

# 关闭firewalld和selinux(Server和Agent)
[root@Server ~]# systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

# 关闭selinux(Server和Agent)
[root@Server ~]# setenforce 0
[root@Server ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

三、搭建LAMP环境

Zabbix Server和Zabbix Agent都搭建好LAMP环境(本文以LAMP为例)。
搭建LAMP环境网址:https://blog.51cto.com/13525470/2118643
搭建LNMP环境网址:https://blog.51cto.com/13525470/2117048

编译安装完成后再测试Web能否访问PHP页面
先添加PHP页面

[root@Server ~]# vim /web/index.php
<?php
    phpinfo();
?>

再查看是否有该进程

[root@Server ~]# netstat -anlp | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN      62265/httpd

在浏览器中访问测试:是否能看到PHP页面

http://192.168.8.55/

四、安装Zabbix-3.4.8服务端

1、修改PHP配置文件参数

安装Zabbix前,需要先配置PHP,否则安装不上

[root@Server ~]# vim /usr/local/php/etc/php.ini
# 修改以下参数
665 post_max_size = 16M
378 max_execution_time = 300
388 max_input_time = 300
932 date.timezone = Asia/Shanghai

# 重启php-fpm服务
[root@Server ~]# ps -ef | grep fpm
[root@Server ~]# pkill -9 fpm
[root@Server ~]# /usr/local/php/sbin/php-fpm

2、创建用户账户

对于所有的Zabbix守护进程,都需要一个非特权用户。如果Zabbix守护进程从非特权用户帐户启动,它将以该用户身份运行。

[root@Server ~]# groupadd zabbix
[root@Server ~]# useradd -g zabbix -s /sbin/nologin zabbix

3、安装Zabbix依赖包

[root@Server ~]# yum -y install net-snmp-devel libevent libevent-devel libcurl-devel

[root@Server ~]# wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
[root@Server ~]# tar zxvf libevent-2.1.8-stable.tar.gz -C /usr/src/
[root@Server ~]# cd /usr/src/libevent-2.1.8-stable/
[root@Server libevent-2.1.8-stable]# ./configure
[root@Server libevent-2.1.8-stable]# make && make install

4、编译安装Zabbix包

# 下载
[root@Server ~]# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.8/zabbix-3.4.8.tar.gz/download

# 解压
[root@Server ~]# tar zxvf zabbix-3.4.8.tar.gz -C /usr/src/
[root@Server ~]# cd /usr/src/zabbix-3.4.8/

# 查看所有受支持的配置选项
[root@Server zabbix-3.4.8]# ./configure –help

# 编译安装
[root@Server zabbix-3.4.8]# ./configure --prefix=/usr/local/zabbix --with-mysql=/usr/local/mysql57/bin/mysql_config --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy

[root@Server zabbix-3.4.8]# make
[root@Server zabbix-3.4.8]# make install
**configure编译配置参数说明:**
--prefix   # 指定安装路径
--with-mysql   # 指定本机数据库路径
--with-net-snmp   # 开启snmp协议采集功能(备:snmp用于采集网络设备:如交换机,路由器,防火墙)
--with-libcurl   # 开启链接监控功能
--enable-server   # 开启服务端
--enable-agent   # 开启代理端
--enable-proxy   # 开启数据代理收集端

5、修改Zabbix配置文件

Zabbix的配置文件在/usr/local/zabbix/etc/目录,有如下三个:

  • zabbix_server.conf 负责服务器端的设定
  • zabbix_agent.conf 用来设置客户端代理参数
  • zabbix_proxy.conf 用来设定分布式的部署

修改Zabbix的zabbix_server.conf配置文件,添加Zabbix数据库密码

[root@Server ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
# 修改以下内容
38 LogFile=/var/log/zabbix/zabbix_server.log   # 指定zabbix日志文件
68 PidFile=/var/run/zabbix/zabbix_server.pid   # 指定zabbix的pid文件
85 DBHost=localhost   # 指定登陆数据库的地址
95 DBName=zabbix   # 指定数据库名称
111 DBUser=zabbix   # 指定登陆数据库的用户名
119 DBPassword=123456   # 指定登陆数据库密码(自定义)
126 DBSocket=/var/lib/mysql57/mysql57.socket   # 指定连接数据库的socket文件
134 DBPort=3306   # 指定连接数据库的端口
# 根据需求,可对如下参数进行设置
158 # StartPollers=5   # 轮询的初始值(0-1000)
167 # StartIPMIPollers=0   # IPMI轮询的初始值(0-1000)
186 # StartPollersUnreachable=1   # 轮询不可达的主机数(包括IPMI 0-1000)
197 # StartTrappers=5   # 捕获的初始值(0-1000)
205 # StartPingers=1   # ping的初始值(0-1000)
213 # StartDiscoverers=1   # 自动发现的初始值(0-250)
377 # CacheSize=8M   # 缓存大小
385 # CacheUpdateFrequency=60   # 缓存更新的频率
393 # StartDBSyncers=4   # 数据库同步时间
420 # TrendCacheSize=4M   # 总趋势缓存大小
480 # AlertScriptsPath=${datadir}/zabbix/alertscripts   # 脚本的存放位置
524 LogSlowQueries=3000   # 日志慢查询设定

验证配置是否正确

[root@Server ~]# cat /usr/local/zabbix/etc/zabbix_server.conf |grep -v "#" |grep -v ^$
LogFile=/var/log/zabbix/zabbix_server.log
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123456
DBSocket=/var/lib/mysql57/mysql57.socket
DBPort=3306
Timeout=4
LogSlowQueries=3000

# 创建、修改相关文件权限
[root@Server ~]# mkdir -p /var/log/zabbix/ /var/run/zabbix
[root@Server ~]# chown -R zabbix.zabbix /var/log/zabbix  /var/run/zabbix

6、创建、导入Zabbix数据库

(1)创建Zabbix数据库

# 登陆MySQL数据库
[root@Server ~]# /usr/local/mysql57/bin/mysql -uroot -p123

# 创建zabbix数据库,并指定字符集为utf8
mysql> create database zabbix default charset utf8;
Query OK, 1 row affected (0.00 sec)

# 添加zabbix_user用户并指定使用zabbix库
mysql> grant all on zabbix.* to zabbix@'localhost' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> grant all on zabbix.* to zabbix@'192.168.8.55' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

# 完成执行刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)

# 退出
mysql> quit
Bye

(2)导入Zabbix数据库

[root@Server ~]# cd /usr/src/zabbix-3.4.8/
[root@Server zabbix-3.4.8]# /usr/local/mysql57/bin/mysql -uroot -p123 < database/mysql/schema.sql zabbix;
[root@Server zabbix-3.4.8]# /usr/local/mysql57/bin/mysql -uroot -p123 < database/mysql/ zabbix;
[root@Server zabbix-3.4.8]# /usr/local/mysql57/bin/mysql -uroot -p123 < database/mysql/data.sql zabbix;

7、配置Web站点

添加Zabbix安装文件到httpd家目录,用于安装Zabbix

[root@Server ~]# cd /usr/src/zabbix-3.4.8/frontends/
[root@Server frontends]# cp -rf ./php /web/   # 复制php目录到/web目录下(php目录是zabbix系统的操作界面)
[root@Server ~]# mv /web/php/ /web/zabbix   # 将php目录改名为zabbix
[root@Server ~]# chown -R zabbix:zabbix /web/zabbix   # 更改所属用户为zabbix
[root@Server ~]# chmod 757 -R /web/zabbix   # 将权限改为757

8、启动Zabbix服务端

启动Zabbxi服务端命令:

[root@Server ~]# /usr/local/zabbix/sbin/zabbix_server

关闭Zabbix,需要用ps -ef | grep zabbix 查出来,然后用kill -9 杀死
Zabbix服务端默认端口是10051,代理端默认端口是10050

使用:netstat -anlp | grep 10051 查看是否有10051端口
如果没有则启动失败,此时需要去看日志
日志位置:/var/log/zabbix/zabbix_server.log

错误一:

/usr/local/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
# 解决方法
[root@Server ~]# echo "/usr/local/mysql57/lib" >>/etc/ld.so.conf
[root@Server ~]# ldconfig

错误二:

/usr/local/zabbix/sbin/zabbix_server: error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory
# 解决方法
[root@Server ~]# echo "/usr/local/lib" >>/etc/ld.so.conf
[root@Server ~]# ldconfig

启动成功过后,在浏览器中访问测试:

http://192.168.8.55/zabbix

Zabbix监控系统部署
Zabbix监控系统部署
Zabbix监控系统部署
Zabbix监控系统部署
Zabbix监控系统部署
Zabbix监控系统部署
Zabbix监控系统部署
Zabbix监控系统部署

哇!一看全是英文的,那我们可以把它设置为中文界面。
Zabbix监控系统部署

嗯,这样看着就比较舒服了!
Zabbix监控系统部署

五、安装Zabbix-3.4.8服务代理端

1、编译安装Zabbix包

# 下载
[root@Agent ~]#  wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.8/zabbix-3.4.8.tar.gz/download

# 解压
[root@Server ~]# tar zxvf zabbix-3.4.8.tar.gz -C /usr/src/
[root@Server ~]# cd /usr/src/zabbix-3.4.8/

# 编译安装(因为这台是代理端,所以在编译时指定为代理 --enable-agent)
[root@Agent zabbix-3.4.8]# ./configure --prefix=/usr/local/zabbix/ --enable-agent
[root@Agent zabbix-3.4.8]# make && make install

2、修改Agentd配置文件

[root@Agent ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
# 修改以下内容
11 PidFile=/var/run/zabbix/zabbix_agentd.pid   # 指定进程pid记录文件
30 LogFile=/var/log/zabbix/zabbix_agentd.log   # 指定日志记录
93 Server=192.168.8.55   # 被动模式下,连接Zabbix服务器的IP
134 ServerActive=192.168.8.55   # 主动模式下,连接Zabbix服务器的IP
145 Hostname=192.168.8.66   # 代理端的本机的IP(被监控机)

说明:
Server和ServerActive都指定Zabbix Server的IP地址,不同的是,前者是被动后者是主动。也就是说Server这个配置是用来允许192.168.8.55这个IP来我这取数据。而serverActive的192.168.8.55的意思是,代理端主动提交数据给它。

3、启动Zabbix代理端

# 创建用户
[root@Agent ~]# groupadd zabbix
[root@Agent ~]# useradd -g zabbix -s /sbin/nologin zabbix

# 创建、修改相关文件权限
[root@Agent ~]# mkdir -p /var/run/zabbix  /var/log/zabbix
[root@Agent ~]# chown -R zabbix.zabbix /var/run/zabbix  /var/log/zabbix

# 启动Zabbxi代理端
[root@Agent ~]# /usr/local/zabbix/sbin/zabbix_agentd

# 查询10050端口有没有被监听
[root@Agent ~]# lsof -i:10050
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 97087 zabbix    4u  IPv4 673478      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 97088 zabbix    4u  IPv4 673478      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 97089 zabbix    4u  IPv4 673478      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 97090 zabbix    4u  IPv4 673478      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 97091 zabbix    4u  IPv4 673478      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 97092 zabbix    4u  IPv4 673478      0t0  TCP *:zabbix-agent (LISTEN)

关闭Zabbix,需要用ps -ef | grep zabbix 查出来,然后用kill -9 杀死

Zabbix服务端默认端口是10051,代理端默认端口是10050
使用:netstat -anlp | grep 10050 查看是否有10050端口

如果没有则启动失败,此时需要去看日志
日志位置:/var/log/zabbix/zabbix_agentd.log

至此,Zabbix安装图解教程完成。