目录
一、zabbix监控系统
1.1 监控的五大核心类型
1.2 监控的五层逻辑架构
(1)基础设施监控
(2)系统层监控
(3)应用层监控
(4)业务监控
(5)端用户体验监控
二、监控系统的技术原理
2.1 监控系统的核心模块
2.2 数据采集协议分类
2.3 数据采集模式
(1)被动模式
(2)主动模式
2.4 分布式代理架构
三、主流开源监控系统对比
3.1 Zabbix
3.2 Prometheus+Grafana
3.3 Nagios
3.4 Cacti
3.5 其他工具
四、Zabbix 系统深度解析
4.1 Zabbix 简介
4.2 Zabbix 核心功能特性
(1)数据收集
(2)阈值管理与告警
(3)可视化与报表
(4)配置管理
(5)扩展性
4.3 Zabbix 架构组件
(1)Zabbix Server
(2)Zabbix Agent
(3)Zabbix Proxy
(4)Zabbix Web
(5)数据库
五、Zabbix 企业级部署实战(基于 openEuler 24.03)
5.1 环境准备
(1)节点规划
(2)基础环境配置(所有节点执行)
① 关闭防火墙
② 关闭 SELinux
③ 时间同步
④ 修改主机名
⑤ 配置 hosts 解析
5.2 部署 Zabbix Server
(1)添加 Zabbix 官方源
(2)安装依赖包及组件
(3)配置 MySQL 数据库
① 启动 MySQL 并设置开机自启
② 初始化数据库配置
(4)导入 Zabbix 初始化数据
(5)配置 Zabbix Server
(6)配置 Web 界面(Nginx)
(7)启动服务并设置开机自启
5.3 Zabbix Web 界面初始化配置
(1)访问 Web 界面
(2)初始化配置步骤
① 欢迎页面
② 环境检查
③ 数据库配置
④ Server 设置
⑤ 安装汇总
⑥ 登录界面
(3)首次登录后配置
5.4 部署 Zabbix Proxy
(1)添加 Zabbix 源(同 Server 节点)
(2)安装 Proxy 组件
(3)导入 Proxy 数据库初始化数据
(4)配置 Zabbix Proxy
(5)启动 Proxy 服务
(6)在 Web 界面添加 Proxy
5.5 部署 Zabbix Agent(被监控节点)
(1)添加 Zabbix 源
(2)安装 Zabbix Agent
(3)配置 Agent
(4)启动 Agent 服务
(5)在 Web 界面添加被监控主机
从逻辑层次划分,监控可分为由下至上的五个层级,形成完整的监控体系:
基础设施监控是整个监控体系的基石,主要面向网络设备(交换机、路由器、防火墙)、物理机房环境(温度、湿度、电源)等底层设施。核心监控指标包括:
这类监控通常由运维团队负责,直接影响上层服务的稳定性。例如,核心交换机端口故障可能导致整个业务网段瘫痪,因此需配置实时告警。
系统层监控覆盖物理机、虚拟机及操作系统,是最基础也是应用最广泛的监控类型。主要监控指标包括:
应用层监控与业务服务紧密相关,需结合具体应用类型定制监控方案。典型监控对象包括:
业务监控聚焦核心业务流程,直接反映业务运营状态,是企业管理层最关注的监控维度。以电商平台为例,关键监控指标包括:
业务监控数据通常通过埋点采集,可直观展示业务健康度,为运营决策提供依据。
端用户体验监控从最终用户视角出发,跟踪应用在用户侧的实际表现。核心监控内容包括:
通过这类监控,可及时发现特定用户群体面临的体验问题,例如某地区联通用户访问缓慢。
任何监控系统都离不开两大核心模块,共同构成数据处理闭环:
监控系统的数据采集协议可分为私有协议和公有协议两类:
协议类型 | 典型实现 | 适用场景 |
---|---|---|
私有协议 | Zabbix Agent、Prometheus Exporter | 深度定制化监控,需安装专用客户端 |
公有协议 | SNMP、IPMI、SSH、Telnet | 通用设备监控(如网络设备、服务器),无需安装客户端 |
监控系统的数据采集分为两种模式,各有适用场景:
在超大规模监控场景(如上万节点),单靠主动模式仍难以应对,需引入代理架构(C/S/P 架构:Client/Proxy/Server):
代理架构的优势:
目前开源监控工具种类繁多,各具特色,选择时需结合业务需求:
Zabbix 是一款企业级开源监控解决方案,由 Alexei Vladishev 创建,目前由 Zabbix SIA 公司主导开发。其核心优势包括:
Zabbix 的功能覆盖监控全流程,主要特性包括:
Zabbix 采用分布式架构,主要由以下组件构成:
Zabbix Server 是整个系统的核心,负责:
默认监听 10051 端口,用于接收数据。
部署在被监控节点上的客户端程序,支持主动 / 被动两种模式:
Agent 负责采集本地系统指标(CPU、内存等)和应用数据。
代理服务器,作为 Server 和 Agent 之间的中间层:
基于 PHP 开发的 Web 管理界面,提供:
通常与 Server 部署在同一台服务器,默认通过 80 端口访问(可自定义)。
存储监控系统的所有配置数据和历史指标,支持多种数据库:
本次部署采用分布式架构,包含 1 个 Server 节点、1 个 Proxy 节点、2 个被监控节点,具体配置如下:
节点角色 | 操作系统 | 硬件配置 | 主机名 | IP 地址 |
---|---|---|---|---|
Zabbix Server | openEuler 24.03 | 2C4G | zabbix | 192.168.207.137 |
Zabbix Proxy | openEuler 24.03 | 2C4G | proxy | 192.168.207.138 |
被监控节点 1 | openEuler 24.03 | 2C4G | server01 | 192.168.207.139 |
被监控节点 2 | openEuler 24.03 | 2C4G | server02 | 192.168.207.140 |
# 停止防火墙服务
systemctl stop firewalld
# 禁止开机自启
systemctl disable firewalld
# 临时关闭(立即生效)
setenforce 0
# 永久关闭(重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 设置时区为上海
timedatectl set-timezone Asia/Shanghai
# 安装chrony时间同步工具
dnf install -y chrony
# 启动并设置开机自启
systemctl enable --now chronyd
# 验证同步状态
chronyc sources -v
# 在Zabbix Server节点执行
hostnamectl set-hostname zabbix
# 在Proxy节点执行
hostnamectl set-hostname proxy
# 在被监控节点1执行
hostnamectl set-hostname server01
# 在被监控节点2执行
hostnamectl set-hostname server02
cat >> /etc/hosts << EOF
192.168.207.137 zabbix
192.168.207.138 proxy
192.168.207.139 server01
192.168.207.140 server02
EOF
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
# 清理缓存
dnf clean all
# 生成缓存
dnf makecache
Zabbix Server 需要安装的核心组件包括:
执行安装命令:
# 安装Zabbix组件
dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
# 安装MySQL 8.0
dnf -y install mysql-server-8.0.41 mysql
# 安装net-snmp依赖(解决监控SNMP设备的依赖问题)
dnf -y install https://www.rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/net-snmp-libs-5.9.1-17.el9.x86_64.rpm
版本说明:Zabbix 6.4.8 对依赖组件的版本要求如下:
- MySQL:8.0.30-8.1.x
- MariaDB:10.5.0-11.1.x
- Nginx:1.20 或更高版本
- PHP:7.4.0-8.2.x
bash
systemctl enable --now mysqld
# 验证状态
systemctl status mysqld
bash
# 登录MySQL(初始无密码,直接回车)
mysql -uroot
# 执行以下SQL语句(逐条执行)
# 设置root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
# 创建Zabbix主数据库(字符集utf8mb4支持中文)
create database zabbix character set utf8mb4 collate utf8mb4_bin;
# 创建Zabbix用户(本地访问)
create user zabbix@localhost identified by 'zabbix';
# 授权
grant all privileges on zabbix.* to zabbix@localhost;
# 创建Proxy数据库(用于后续Proxy节点存储数据)
create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
# 创建允许远程访问的Zabbix用户(供Proxy节点连接)
create user zabbix@'%' identified by 'zabbix';
# 授权Proxy数据库权限
grant all privileges on zabbix_proxy.* to zabbix@localhost;
grant all privileges on zabbix_proxy.* to zabbix@'%';
# 允许创建存储函数(导入初始化数据需要)
set global log_bin_trust_function_creators=1;
# 退出MySQL
quit;
Zabbix 的数据库初始化脚本位于/usr/share/zabbix-sql-scripts/mysql/server.sql.gz
,执行以下命令导入:
# 导入数据(输入密码zabbix)
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
# 导入完成后,关闭存储函数创建权限
mysql -uroot -p
# 输入root密码123456后执行
set global log_bin_trust_function_creators=0;
quit;
修改 Zabbix Server 的主配置文件/etc/zabbix/zabbix_server.conf
:
# 编辑配置文件
vim /etc/zabbix/zabbix_server.conf
# 找到以下配置项,取消注释并修改密码
DBPassword=zabbix # 大约在129行
其他核心配置项说明:
DBHost=localhost
:数据库主机(默认本地)DBName=zabbix
:数据库名DBUser=zabbix
:数据库用户ListenPort=10051
:Server 监听端口Zabbix 的 Web 界面通过 Nginx 提供服务,配置文件为/etc/nginx/conf.d/zabbix.conf
:
vim /etc/nginx/conf.d/zabbix.conf
# 取消以下配置的注释(修改监听端口为8080,避免与其他服务冲突)
listen 8080;
server_name _;
# 重启相关服务
systemctl restart zabbix-server zabbix-agent nginx php-fpm
# 设置开机自启
systemctl enable zabbix-server zabbix-agent nginx php-fpm
# 验证服务状态
systemctl status zabbix-server zabbix-agent nginx php-fpm
通过浏览器访问 Zabbix Server 的 IP: 端口(本文为http://192.168.207.137:8080/
)
点击 "Next step" 进入下一步。
系统会自动检查依赖组件是否满足要求,全部通过后点击 "Next step"。
点击 "Next step"。
点击 "Next step"。
确认配置信息无误后,点击 "Next step" 完成安装。
默认账号:Admin,默认密码:zabbix(注意大小写)。
Proxy 节点作为中间层,负责收集被监控节点的数据并转发给 Server,适合分布式环境。
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
dnf makecache
# 安装Proxy(MySQL支持)及依赖
dnf -y install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql
# 安装net-snmp依赖
dnf -y install https://www.rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/net-snmp-libs-5.9.1-17.el9.x86_64.rpm
Proxy 需要使用之前在 Server 节点创建的zabbix_proxy
数据库:
# 先在Server节点开启存储函数创建权限
mysql -uroot -p
set global log_bin_trust_function_creators=1;
quit;
# 在Proxy节点执行导入(输入密码zabbix)
mysql -uzabbix -p -h 192.168.207.137 zabbix_proxy < /usr/share/zabbix-sql-scripts/mysql/proxy.sql
# 导入完成后,在Server节点关闭权限
mysql -uroot -p
set global log_bin_trust_function_creators=0;
quit;
修改 Proxy 配置文件/etc/zabbix/zabbix_proxy.conf
:
vim /etc/zabbix/zabbix_proxy.conf
# 修改以下配置项
Server=192.168.207.137 # Zabbix Server的IP(约32行)
Hostname=Zabbix proxy # Proxy名称(约42行,需与Web界面配置一致)
DBHost=192.168.207.137 # 数据库主机(Server节点IP,约157行)
DBPassword=zabbix # 数据库密码(约194行)
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
# 验证状态
systemctl status zabbix-proxy
以 server01 节点为例,部署步骤如下:
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all
dnf makecache
dnf -y install zabbix-agent
修改配置文件/etc/zabbix/zabbix_agentd.conf
:
vim /etc/zabbix/zabbix_agentd.conf
# 修改以下配置项
Server=192.168.207.137 # 被动模式:Server或Proxy的IP(约118行)
ServerActive=192.168.207.138 # 主动模式:Proxy的IP(约171行)
Hostname=server01 # 本机主机名(约182行,需与Web界面配置一致)
systemctl start zabbix-agent
systemctl enable zabbix-agent
# 验证状态
systemctl status zabbix-agent
重复以上步骤添加 server02 节点。
Zabbix 默认字体不支持中文,需替换字体文件:
# 查找定义字体的PHP文件
find / -name defines.inc.php
# 输出:/usr/share/zabbix/include/defines.inc.php
# 查看字体路径和名称
grep "ZBX_FONTPATH" /usr/share/zabbix/include/defines.inc.php
# 输出:define('ZBX_FONTPATH', realpath('assets/fonts'));
grep "ZBX_GRAPH_FONT_NAME" /usr/share/zabbix/include/defines.inc.php
# 输出:define('ZBX_GRAPH_FONT_NAME', 'graphfont');
# 上传中文字体文件(如msyh.ttc,微软雅黑)到字体目录
cd /usr/share/zabbix/assets/fonts/
# 备份原字体
mv graphfont.ttf graphfont.ttf.bak
# 创建软链接(将中文字体链接为默认字体)
ln -s msyh.ttc graphfont.ttf
刷新 Zabbix Web 界面,查看图表中的中文是否正常显示。
以监控服务器的 TCP 连接数为例,创建自定义监控项:
vim /etc/zabbix/zabbix_agentd.d/custom.conf
# 添加以下内容
UserParameter=tcp.established,netstat -ant | grep ESTABLISHED | wc -l
systemctl restart zabbix-agent
为 TCP 连接数设置阈值告警(超过 1000 时告警):
本文详细讲解了 Zabbix 企业级分布式监控系统的部署过程,从监控体系架构到实际操作步骤,涵盖了 Server、Proxy、Agent 的完整部署流程。通过本文的步骤,可搭建一套支持多节点、跨网络的分布式监控平台。