目录
简介
在 IT 运维领域,监控系统如同 “千里眼” 与 “顺风耳”,是保障业务稳定运行的核心支柱。据行业经验,监控工作在运维环节中占比可达 30%,构建一套高效的监控告警系统更是运维工程师的核心能力。本文将从监控系统的基础原理出发,讲解 Zabbix 的功能特性,并完成 Zabbix 企业级分布式监控的部署与配置。
一、监控系统基础
1.1 监控的价值
监控(Monitoring)的本质是 “检测与预防”,通过对 IT 系统全链路的指标采集、分析与告警,提前发现潜在问题,避免故障扩散。在复杂的 IT 架构中,监控需覆盖从底层硬件到上层业务的全栈场景。
1.2 监控的 5 大类型与 5 大层次
- 5 大监控类型:应用性能监控、业务交易监控、网络性能监控、操作系统监控(文档中列 4 项,实际涵盖全场景)。
- 5 大逻辑层次(从底层到上层):
- 基础设施监控:网络设备(交换机、路由器)的流量、丢包率、连接数等,由运维负责,保障底层稳定性。
- 系统层监控:物理机 / 虚拟机 / 操作系统的 CPU 使用率、内存占用、磁盘 IO、网络带宽等核心指标。
- 应用层监控:接口响应时间、调用量、错误率、慢 SQL、缓存命中率等服务相关指标。
- 业务监控:用户登录、下单、支付等核心业务流程数据,为运营决策和战略调整提供数据支撑。
- 端用户体验监控:用户端(APP、H5、PC)的性能、错误码、地域 / 运营商访问情况等,直接反映用户感知。
1.3 监控系统的实现原理
一个完整的监控系统需包含数据采集与数据处理(存储、分析、告警、展示) 两大部分,核心组件与工作模式如下:
- 采集协议:分为专用客户端(如 Zabbix Agent)和公用协议(SNMP、IPMI、SSH、Telnet 等)。
- 工作模式:
- 被动模式:服务器主动向客户端采集数据(对服务器开销大,适合小规模场景)。
- 主动模式:客户端主动向服务器上报数据(对服务器开销小,适合大规模场景)。
- 代理架构:在大规模 / 跨地域场景中,通过 C/S/P(Client/Proxy/Server)架构分摊服务器压力,支持分布式监控。
二、Zabbix:企业级监控方案
2.1 Zabbix 简介
Zabbix 是一款开源的企业级分布式监控系统,支持从服务器、网络设备到 Web 应用、数据库的全场景监控。其优势在于:
- 跨平台适配:可运行于 Linux、Windows、AIX 等主流系统。
- 开源免费:基于 GPLv2 协议,源代码公开可定制。
- 功能全面:覆盖数据采集、告警、可视化、自动化等全流程。
2.2 Zabbix 核心功能特性
- 数据收集:支持 SNMP、IPMI、自定义检测,可按自定义间隔采集数据,包含 Server、Proxy、Agent 三种角色。
- 灵活告警:通过 “触发器(trigger)” 定义阈值,支持告警升级、多渠道通知(邮件、短信等),可结合宏变量自定义告警信息,甚至通过远程命令实现自动化修复。
- 可视化与报告:内置实时绘图、网络拓扑图、自定义面板,支持生成监控报告,助力数据可视化分析。
- 历史数据管理:数据存储于数据库,支持配置保留周期,内置自动清理机制。
- 自动化能力:支持网络设备自动发现、Agent 自动注册、模板继承(减少重复配置)。
- 高扩展性:通过 API 支持第三方集成,Agent 轻量可扩展,支持大规模分布式部署(Proxy 架构)。
2.3 Zabbix 角色与架构
Zabbix 采用分布式架构,核心角色包括:
- Zabbix Server:核心组件,负责接收、存储、分析数据,触发告警。
- Zabbix Proxy:代理节点,用于大规模场景,分摊 Server 压力,支持跨网络监控。
- Zabbix Agent:部署在被监控节点,负责采集本地数据(主动 / 被动模式)。
- Zabbix Web:基于 PHP 的 Web 界面,用于配置、管理和查看监控数据。
架构示意图如下:
Client(Agent)<--> Proxy <--> Server(数据存储/分析/告警)<--> Web界面
三、Zabbix 部署案例
3.1 资源清单
本次部署采用 4 台 openEuler 24.03 主机,配置如下:
操作系统 |
配置 |
主机名 |
IP 地址 |
角色 |
openEuler 24.03 |
2C4G |
zabbix |
192.168.207.137 |
Zabbix Server |
openEuler 24.03 |
2C4G |
proxy |
192.168.207.138 |
Zabbix Proxy |
openEuler 24.03 |
2C4G |
server01 |
192.168.207.139 |
被监控节点 |
openEuler 24.03 |
2C4G |
server02 |
192.168.207.140 |
被监控节点 |
3.2 基础环境配置
所有节点需完成以下预处理(以 root 用户操作):
(1)关闭防火墙
防火墙可能拦截 Zabbix 通信,需关闭并禁用自启动:
systemctl stop firewalld # 临时关闭防火墙
systemctl disable firewalld # 永久禁用防火墙(生产环境可按需配置规则)
(2)关闭 SELinux
SELinux 可能限制进程权限,临时关闭并永久禁用:
setenforce 0 # 临时关闭(立即生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 永久禁用(需重启)
(3)时间同步
确保所有节点时间一致(避免日志与监控数据时间错乱):
timedatectl set-timezone Asia/Shanghai # 设置时区为上海
chronyc sources -v # 同步时间(需安装chrony:dnf install -y chrony)
(4)修改主机名
按资源清单设置主机名,便于识别角色:
# 在zabbix节点执行
hostnamectl set-hostname zabbix
# 在proxy节点执行
hostnamectl set-hostname proxy
# 在server01节点执行
hostnamectl set-hostname server01
# 在server02节点执行
hostnamectl set-hostname server02
3.3 部署 Zabbix Server
Zabbix Server 是核心节点,负责数据存储与分析,需关联数据库(本次用 MySQL)。
(1)添加 Zabbix 源
Zabbix 官方源提供稳定版本,适用于 RHEL 系系统(openEuler 兼容):
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
dnf clean all # 清理缓存,确保源生效
(2)安装依赖软件
需安装 Zabbix Server、Web 组件、MySQL 及 SNMP 库:
# 安装Zabbix Server核心组件
dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
# 安装MySQL数据库(Zabbix 6.4要求MySQL 8.0.30+)
dnf -y install mysql-server-8.0.41 mysql
# 安装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
(3)配置 MySQL 数据库
Zabbix 需数据库存储监控数据,需创建库、用户并授权:
- 启动 MySQL 并设置开机自启:
systemctl enable mysqld --now # --now表示立即启动
- 登录 MySQL 并配置(默认无密码,首次登录直接回车):
mysql -uroot
- 执行 SQL 语句(设置 root 密码、创建 Zabbix 库和用户):
-- 设置root本地登录密码(示例为123456,生产环境需复杂密码)
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库(Proxy需连接Server的数据库)
create user zabbix@'%' identified by 'zabbix';
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;
quit; # 退出MySQL
(4)导入 Zabbix 初始数据
Zabbix 提供预设 SQL 脚本,需导入主数据库:
# 导入Server初始数据(输入密码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;
(5)配置 Zabbix Server
修改配置文件,关联数据库密码:
vim /etc/zabbix/zabbix_server.conf
# 找到129行左右,取消注释并设置数据库密码
DBPassword=zabbix # 与之前创建的zabbix用户密码一致
(6)配置 Nginx(Web 服务)
Zabbix Web 通过 Nginx 提供访问,需设置监听端口:
vim /etc/nginx/conf.d/zabbix.conf
# 找到并修改监听端口(避免与其他服务冲突,示例用8080)
listen 8080;
server_name _; # 保持默认
(7)启动服务并设置自启
# 重启相关服务
systemctl restart zabbix-server zabbix-agent nginx php-fpm
# 设置开机自启
systemctl enable zabbix-server zabbix-agent nginx php-fpm
3.4 Zabbix Web 界面配置
通过 Web 界面完成 Zabbix 初始化,步骤如下:
(1)访问登录页面
在浏览器输入 Server 节点 IP + 端口:http://192.168.207.137:8080/
(2)语言与许可协议
选择 “中文”(支持多语言),同意 GPLv2 许可协议,点击 “下一步”。
(3)环境检查
系统会自动检测依赖(如 PHP 版本、数据库驱动等),全部通过后点击 “下一步”。
(4)配置数据库连接
- 数据库类型:MySQL
- 服务器:localhost(数据库与 Server 同机)
- 端口:3306(MySQL 默认)
- 数据库名:zabbix
- 用户名:zabbix
- 密码:zabbix(与之前配置一致)
点击 “下一步”。
(5)设置 Server 名称与时区
- Zabbix 主机名称:保持默认(或自定义)
- 时区:选择 “Asia/Shanghai”(上海时区)
点击 “下一步”。
(6)完成安装
确认配置无误后,点击 “下一步”,提示 “Zabbix 前端已配置好” 即完成。
(7)登录验证
默认账号:Admin
,默认密码:zabbix
(首次登录建议修改密码)。
3.5 部署 Zabbix Proxy(分布式监控)
Proxy 用于分担 Server 压力,适合大规模监控场景,部署步骤如下:
(1)添加 Zabbix 源(同 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
(2)安装 Proxy 组件
dnf -y install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql
# 安装SNMP依赖(同Server)
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
(3)导入 Proxy 初始数据
Proxy 数据需存储在之前创建的zabbix_proxy
库(在 Proxy 节点执行):
# 输入zabbix用户密码(zabbix)
zcat /usr/share/zabbix-sql-scripts/mysql/proxy.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy -h 192.168.207.137
(4)配置 Proxy
vim /etc/zabbix/zabbix_proxy.conf
# 修改以下参数:
Server=192.168.207.137 # 指向Zabbix Server的IP
Hostname=Zabbix proxy # 与Web添加时的名称一致
DBHost=192.168.207.137 # 数据库主机(Server节点IP)
DBPassword=zabbix # 数据库密码
(5)启动 Proxy 并设置自启
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
(6)Web 界面添加 Proxy
- 登录 Zabbix Web,进入 “管理”→“Agent 代理程序”→“创建代理”
- 代理名称:与
zabbix_proxy.conf
中Hostname
一致(Zabbix proxy) - 代理类型:主动式(Proxy 主动向 Server 汇报)
- 点击 “添加”。
3.6 部署 Zabbix Agent(被监控节点)
在被监控节点(server01、server02)部署 Agent,步骤如下:
(1)添加 Zabbix 源(同 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
(2)安装 Agent
dnf -y install zabbix-agent
(3)配置 Agent
vim /etc/zabbix/zabbix_agentd.conf
# 修改以下参数:
Server=192.168.207.137 # 被动模式:允许哪个节点采集数据(Server或Proxy)
ServerActive=192.168.207.137 # 主动模式:向哪个节点上报数据(与Server一致)
Hostname=server01 # 与Web添加的主机名一致(server01节点用此名,server02改为server02)
(4)启动 Agent 并设置自启
systemctl start zabbix-agent
systemctl enable zabbix-agent
(5)Web 界面添加主机
- 进入 “数据采集”→“主机”→“创建主机”
- 主机名称:与 Agent 配置的
Hostname
一致(如 server01) - 主机群组:选择或创建(如 “Linux 服务器”)
- 接口:添加 “Agent”,IP 地址填写被监控节点 IP(192.168.207.139)
- 模板:链接 “Template OS Linux by Zabbix agent”(系统自带模板)
- (若通过 Proxy 监控)在 “由代理程序监测” 中选择之前创建的 Proxy
- 点击 “添加”。
四、常见问题:解决 Zabbix 字体显示乱码
默认情况下,Zabbix 图表可能因缺少中文字体导致乱码,解决方法如下:
- 查找字体配置:
# 查找字体路径定义
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
)到/usr/share/zabbix/assets/fonts/
- 创建软链接替换默认字体:
cd /usr/share/zabbix/assets/fonts
ln -snf msyh.ttc graphfont.ttf # 让系统识别为默认字体
- 刷新页面:字体生效,中文正常显示。
总结
Zabbix 作为企业级监控方案,凭借灵活的架构、丰富的功能和开源免费的优势,被广泛应用于各行业。本文从原理到实战,详细讲解了 Zabbix 的部署流程,涵盖 Server、Proxy、Agent 全组件。实际生产中,还可结合模板自定义、自动发现、告警升级等功能,进一步提升监控效率。
监控系统的核心价值不仅在于 “发现问题”,更在于 “预防问题”。通过 Zabbix 构建全链路监控体系,可为业务稳定运行提供坚实保障。