部署 Zabbix 企业级分布式监控笔记
部署 Zabbix 企业级分布式监控笔记
一、监控系统基础
(一)监控的定义与类型
- 定义:监控(Monitoring)包含检测和控制,核心是通过检测实现预防,确保 IT 系统稳定运行。
- 计算机领域 5 种监控类型:
- 应用性能监控(监控应用程序响应时间、错误率等)
- 业务交易监控(监控业务流程如订单提交、支付完成等)
- 网络性能监控(监控网络带宽、延迟、丢包等)
- 操作系统监控(监控 OS 的 CPU、内存、磁盘等资源)
- 数据库监控(补充原文,监控数据库连接数、慢查询等)
(二)监控的层次划分(从底层到上层)
- 基础设施监控
- 负责对象:网络设备(交换机、路由器等)、机房环境(电源、温度等)。
- 监控指标:网络流量、丢包率、错包率、设备连接数、硬件状态等。
- 负责角色:运维人员,保障底层硬件稳定性以支撑上层服务。
- 系统层监控
- 负责对象:物理机、虚拟机、操作系统(Linux/Windows 等)。
- 监控指标:CPU 使用率、内存占用率、磁盘 IO 吞吐量、网络带宽利用率等。
- 应用层监控
- 负责对象:Web 服务、API 接口、中间件、数据库等。
- 监控指标:URL 访问延迟、接口调用成功率、慢 SQL 数量、缓存命中率、服务响应时间等。
- 业务监控
- 负责对象:核心业务流程(如电商的登录、注册、下单、支付)。
- 作用:为运营和管理层提供数据支持,辅助战略决策(如用户增长趋势、订单转化率等)。
- 端用户体验监控
- 负责对象:用户端(浏览器、APP、PC 客户端)。
- 监控指标:页面加载时间、返回错误码、不同地区 / 运营商的访问质量、客户端设备 / 浏览器版本分布等。
(三)监控系统实现原理
- 模块组成
- 数据采集部分:通过 Agent、协议(SNMP 等)收集被监控对象的数据。
- 数据处理部分:包含数据存储(数据库)、分析告警(触发阈值判断)、展示(Web 界面)。
- 采集协议
- 专用客户端采集:基于私有协议或专属 Agent(如 Zabbix Agent)。
- 公用协议采集:基于通用协议(SNMP、IPMI、SSH、Telnet 等),适用于无专属 Agent 的设备。
- 监控模式
- 被动模式:Server 主动向 Agent 请求数据,对 Server 开销大,适合小规模环境。
- 主动模式:Agent 主动向 Server 上报数据,对 Server 开销小,适合大规模环境。
- 代理架构(C/S/P 架构)
- 适用场景:大规模、跨地域监控(如多机房、多网段)。
- 作用:通过 Proxy 分摊 Server 压力,Proxy 收集数据后转发给 Server,减少网络传输开销。
(四)常见开源监控产品对比
产品名称 | 核心特点 |
---|---|
Zabbix | 企业级分布式监控,支持多类型设备 / 应用,功能全面(告警、绘图、自动发现等) |
Prometheus+Grafana | 时序数据监控,适合云原生环境,Grafana 负责可视化,社区插件丰富 |
Cacti | 专注网络流量监控,基于 RRDTool 绘图,用户权限管理灵活 |
Nagios | 轻量监控工具,擅长服务状态检测,告警机制成熟,但配置较复杂 |
Checkmk | 高可扩展性,支持自动化配置,分基础版(免费)和企业版(增值功能) |
OpenNMS | 基于 Java/XML,支持多协议数据收集,适合分布式网络监控 |
Netdata | 实时 Linux 性能监控,指标覆盖广,数据采集速度快 |
LibreNMS | 网络设备监控利器,支持自动发现网络拓扑,适配多厂商设备(Cisco、华为等) |
二、Zabbix 系统概述
(一)初识 Zabbix
- 定位:企业级分布式开源监控解决方案,基于 Web 界面,支持网络、服务器、应用等全栈监控。
- 开发背景:由 Alexei Vladishev 创建,目前由 Zabbix SIA 维护,基于 GPL v2 协议开源(免费使用)。
- 核心功能:
- 监控对象:网络参数、服务器资源、虚拟机、数据库、Web 应用等。
- 特性:灵活告警(邮件、短信等)、数据可视化(图表、拓扑图)、历史数据存储(支持容量规划)。
- 适用场景:从小型企业到大型企业的 IT 基础设施监控。
(二)Zabbix 的功能特性
- 数据收集
- 支持可用性 / 性能检测、多协议(SNMP、IPMI 等)、自定义检测规则。
- 角色分工:Server(核心节点)、Proxy(代理节点)、Agent(客户端节点)。
- 灵活的阈值定义
- 通过 “触发器(Trigger)” 自定义告警阈值,阈值规则存储在数据库中。
- 高级告警配置
- 支持告警升级(多次通知未处理时升级接收人)、自定义告警内容(含宏变量)。
- 可联动远程命令实现自动化修复(如重启服务、清理磁盘)。
- 可视化与报告
- 实时绘图:内置绘图工具展示监控指标趋势。
- 自定义视图:支持多指标聚合展示、网络拓扑图、自定义仪表盘。
- 自动化能力
- 网络自动发现:自动识别新设备、新磁盘 / 网卡。
- Agent 自动注册:新节点 Agent 启动后自动接入监控系统。
- 扩展性
- Zabbix API:支持第三方系统集成(如自动化运维平台)。
- 模板机制:通过模板快速批量配置监控项(支持继承)。
(三)Zabbix 角色及架构
- 核心角色
- Zabbix Server:核心组件,接收 Agent/Proxy 的数据,处理告警、存储数据,提供 API 接口。
- Zabbix Agent:部署在被监控节点,采集本地数据(CPU、内存等),支持主动 / 被动模式。
- Zabbix Proxy:代理节点,用于大规模监控,收集数据后转发给 Server,减轻 Server 压力。
- Zabbix Web:Web 管理界面(PHP 开发),用于配置监控、查看告警和图表。
- 整体架构
- 流程:Agent/Proxy 采集数据 → 发送至 Server → Server 存储至数据库 → Web 界面展示 / 触发告警。
- 端口:Server 默认端口 10051(接收数据),Agent 默认端口 10050(发送数据)。
三、Zabbix 部署流程(基于 openEuler 24.03)
(一)资源清单(分布式架构)
操作系统 | 配置 | 主机名 | IP 地址 | 角色 |
---|---|---|---|---|
openEuler 24.03 | 2C4G | zabbix | 192.168.10.105 | Zabbix Server(服务端) |
openEuler 24.03 | 2C4G | proxy | 192.168.10.104 | Zabbix Proxy(代理端) |
openEuler 24.03 | 2C4G | server01 | 192.168.10.101 | 被监控节点 1 |
openEuler 24.03 | 2C4G | server02 | 192.168.10.102 | 被监控节点 2 |
(二)基础环境配置(所有节点执行)
目的:统一环境,避免依赖冲突或通信障碍。
-
关闭防火墙
[root@localhost~]# systemctl stop firewalld # 临时关闭防火墙 [root@localhost ~]# systemctl disable firewalld # 禁用开机自启
- 作用:避免防火墙拦截 Zabbix 组件间的通信(如 Server 与 Agent 的 10050/10051 端口)。
-
关闭 SELinux
[root@localhost ~]# setenforce 0 # 临时关闭(立即生效) [root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 永久关闭(需重启)
- 作用:防止 SELinux 安全策略限制 Zabbix 进程的文件访问或端口通信。
-
时间同步
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai # 设置时区为上海 [root@localhost~]# chronyc sources -v # 同步时间(依赖chrony服务)
- 作用:确保所有节点时间一致,避免日志、告警时间混乱。
-
修改主机名
[root@localhost ~]# hostnamectl set-hostname zabbix # 分别设置为zabbix、proxy、server01、server02
- 作用:通过主机名区分节点角色,便于管理和配置。
(三)部署 Zabbix Server(在 zabbix 节点执行)
目的:安装 Server 核心组件,配置数据库存储监控数据,启动服务并初始化 Web 界面。
-
添加 Zabbix 源
[root@zabbix~]# rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm [root@zabbix ~]# dnf clean all # 清理缓存,确保源生效
- 作用:获取 Zabbix 6.4 版本的官方软件包。
-
安装依赖与 Server 组件
# 安装Zabbix Server、Web界面、数据库驱动等 [root@zabbix ~]# dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent # 安装MySQL数据库(存储监控数据) [root@zabbix ~]# dnf -y install mysql-server-8.0.41 mysql # 安装SNMP依赖(支持SNMP协议监控) [root@zabbix ~]# 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+、Nginx 1.20+、PHP 7.4.0+。
-
配置数据库
[root@zabbix ~]# systemctl enable mysqld --now # 启动MySQL并设置开机自启 [root@zabbix ~]# mysql -uroot # 登录MySQL(初始无密码)
执行以下 SQL 语句(设置密码、创建数据库和用户):
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; # 设置root密码 FLUSH PRIVILEGES; # 刷新权限 create database zabbix character set utf8mb4 collate utf8mb4_bin; # 创建Zabbix主数据库 create user zabbix@localhost identified by '123456'; # 创建Zabbix数据库用户 grant all privileges on zabbix.* to zabbix@localhost; # 授权 create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin; # 创建Proxy数据库(供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; # 允许创建存储函数(导入数据需要) quit;
-
导入 Zabbix 初始化数据
# 导入Server核心数据表结构 [root@zabbix ~]# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix # 导入完成后关闭存储函数创建权限 [root@zabbix ~]# mysql -uroot -p mysql> set global log_bin_trust_function_creators=0; mysql> quit;
- 作用:初始化 Zabbix 所需的表结构(监控项、触发器、历史数据等表)。
-
配置 Zabbix Server
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf # 编辑配置文件
修改以下参数(约 129 行):
DBPassword=zabbix # 填写数据库用户zabbix的密码
- 作用:配置 Server 与数据库的连接密码。
-
配置 Web 界面(Nginx)
[root@zabbix ~]# vim /etc/nginx/conf.d/zabbix.conf # 编辑Nginx配置
取消注释并设置端口(避免与其他服务冲突):
listen 8080; # Web界面端口 server_name 192.168.10.105; # 填写Server节点IP
-
启动服务
[root@zabbix ~]# systemctl restart zabbix-server zabbix-agent nginx php-fpm [root@zabbix ~]# systemctl enable zabbix-server zabbix-agent nginx php-fpm # 设置开机自启
(四)Zabbix Web 界面初始化(浏览器操作)
- 访问 Web 界面
- 地址:http://192.168.10.105:8080/ (Server 节点 IP + 配置的端口)
- 初始化步骤
- 步骤 1:选择语言(如 “Chinese (zh_CN)”)。
- 步骤 2:检查环境(确保所有依赖项满足,如有缺失需修复)。
- 步骤 3:配置数据库连接(数据库类型选 MySQL,密码填 “zabbix”)。
- 步骤 4:设置 Server 名称(默认即可)。
- 步骤 5:确认配置并完成安装。
- 登录
- 默认账号:Admin
- 默认密码:zabbix
(五)部署 Zabbix Proxy(在 proxy 节点执行)
目的:部署代理节点,用于分担 Server 压力,收集被监控节点数据并转发给 Server。
-
添加 Zabbix 源(同 Server 步骤)
[root@proxy~]# rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm [root@proxy ~]# dnf clean all
-
安装 Proxy 组件
[root@proxy ~]# dnf -y install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql [root@proxy~]# 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 节点临时开启存储函数权限:
[root@zabbix ~]# mysql -uroot -p mysql> set global log_bin_trust_function_creators=1; mysql> quit;
-
Proxy 节点导入数据(连接 Server 的数据库):
# 读取 Zabbix Proxy 的数据库初始化 SQL 脚本 cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql # 通过管道符将脚本内容传递给 mysql 命令执行 |# 调用 mysql 客户端工具 mysql # 指定字符集为 utf8mb4(支持emoji等特殊字符) --default-character-set=utf8mb4 # 指定连接数据库的用户名(zabbix_proxy) -uzabbix_proxy # 指定用户密码(123456,命令行显式密码有安全风险) -p123456 # 指定数据库服务器的IP地址(192.168.10.105) -h 192.168.10.105 # 指定要操作的数据库名称(zabbix_proxy) zabbix_proxy
编辑proxy配置文件
DBUser=zabbix_proxy DBPassword=123456 DBHost=192.168.10.105 DBName=zabbix_proxy Server=192.168.10.105
一、参数含义
DBUser=zabbix_proxy
- 含义:Zabbix Proxy 连接数据库时使用的数据库用户名。
- 作用:用于数据库身份验证,该用户需拥有对
DBName
指定数据库的读写权限(如创建表、插入数据等)。
DBPassword=123456
- 含义:上述数据库用户(
zabbix_proxy
)对应的密码。 - 作用:与用户名配合完成数据库登录验证,确保只有授权用户能访问数据库。
- 含义:上述数据库用户(
DBHost=192.168.10.105
- 含义:数据库所在服务器的IP 地址(或主机名)。
- 作用:指定 Proxy 连接数据库的目标地址(这里指向
192.168.10.105
这台机器上的数据库)。
DBName=zabbix_proxy
- 含义:Proxy 专用的数据库名称。
- 作用:明确 Proxy 存储监控数据的数据库,必须与 Zabbix Server 的数据库(通常名为
zabbix
)完全分离。
Server=192.168.10.105
- 含义:Zabbix Server 的IP 地址(或主机名)。
- 作用:指定 Proxy 需要连接的 Server 地址,Proxy 会将收集到的监控数据发送到该 Server,并从 Server 同步配置信息。
二、关键注意事项
1. 数据库与 Server 的独立性
- 数据库隔离:
DBName=zabbix_proxy
必须是 Proxy 专用数据库,绝对不能与 Zabbix Server 的数据库(如zabbix
)共用。两者表结构逻辑不同,共用会触发 “Zabbix proxy cannot work with a Zabbix server database
” 错误(之前日志已出现)。 - Server 与数据库的关系:
Server=192.168.10.105
和DBHost=192.168.10.105
可以指向同一台机器(即 Server 和数据库部署在同一服务器),这是允许的,但数据库本身必须独立(名称不同)。
2. 数据库权限配置
需确保
zabbix_proxy
用户对zabbix_proxy
数据库有完全权限,否则 Proxy 无法初始化表结构或写入数据。
示例(MySQL 授权命令)-- 登录数据库后执行(替换Proxy服务器IP为实际地址) GRANT ALL PRIVILEGES ON zabbix_proxy.* TO 'zabbix_proxy'@'Proxy服务器IP' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
验证连接:在 Proxy 服务器上执行以下命令,测试能否成功登录数据库:
mysql -h 192.168.10.105 -u zabbix_proxy -p123456 zabbix_proxy
3. 与 Zabbix Server 的通信
-
网络可达性:Proxy 服务器必须能访问
Server=192.168.10.105
的10051 端口(Zabbix Server 默认端口),可通过以下命令测试:telnet 192.168.10.105 10051 # 能连接则端口开放
-
Server 端配置:Zabbix Server 需在前端(Web 界面)预先添加该 Proxy,且 Proxy 的
Hostname
参数需与 Server 中配置的 Proxy 名称完全一致(否则 Server 会拒绝 Proxy 的连接)。
4. 安全性与权限
-
密码安全:
DBPassword=123456
为弱密码,生产环境建议修改为复杂密码(含大小写、数字、特殊字符),并限制配置文件权限:chmod 600 /etc/zabbix/zabbix_proxy.conf # 仅root用户可读写 chown zabbix:zabbix /etc/zabbix/zabbix_proxy.conf
-
防火墙规则
:确保 Proxy 服务器的防火墙允许:
- 出站连接
DBHost
的数据库端口(如 MySQL 的 3306); - 出站连接
Server
的 10051 端口; - 入站接收 Agent 的 10050 端口(被动模式)。
- 出站连接
5. 初始化与启动
-
数据库初始化
:首次启动前,必须将 Proxy 专用的 SQL 脚本导入
zabbix_proxy
数据库(否则表结构缺失,启动失败):
# 假设脚本路径为/usr/share/zabbix-sql-scripts/mysql/proxy.sql cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql -h 192.168.10.105 -u zabbix_proxy -p123456 zabbix_proxy
-
重启生效
:修改配置后,需重启 Proxy 服务并检查日志:
systemctl restart zabbix-proxy tail -f /var/log/zabbix/zabbix_proxy.log # 确认无数据库或连接错误
总结
这些配置是 Proxy 正常工作的基础,核心要点是:数据库独立、权限正确、与 Server 通信畅通。按照上述注意事项验证后,若日志中显示 “
Zabbix Proxy started
”,则配置成功。三、验证步骤
- 确认
zabbix_proxy
数据库已创建并初始化表结构。 - 测试 Proxy 服务器到
192.168.10.105
的数据库连接:
mysql -h 192.168.10.105 -u zabbix_proxy -p zabbix_proxy
,输入密码后若能登录则连接正常。 - 重启 Proxy 服务后,查看日志是否仍有错误,若无则配置正确。
关键说明:
- 整个命令的核心是将
proxy.sql
脚本中的表结构和初始数据导入到zabbix_proxy
数据库 - 执行前需确保:
- 目标 MySQL 服务器(192.168.10.105)已启动并可访问
- 已创建
zabbix_proxy
数据库 - 用户
zabbix_proxy
拥有该数据库的读写权限
- 命令行显式输入密码(
-p123456
)会有安全隐患,生产环境建议使用配置文件或交互式输入密码
执行成功后,Zabbix Proxy 所需的数据库表结构就会被创建,可用于后续 Proxy 服务的配置。
-
Server 节点关闭权限:
[root@zabbix ~]# mysql -uroot -p mysql> set global log_bin_trust_function_creators=0; mysql> quit;
-
-
配置 Zabbix Proxy
[root@proxy ~]# vim /etc/zabbix/zabbix_proxy.conf
修改以下参数:
Server=192.168.10.105 # 指向Zabbix Server的IP Hostname=Zabbix proxy # Proxy名称(需与Web界面配置一致) DBHost=192.168.10.105 # 数据库主机(Server节点IP) DBPassword=123456 # 数据库密码
-
启动 Proxy 服务
[root@proxy ~]# systemctl start zabbix-proxy [root@proxy ~]# systemctl enable zabbix-proxy # 开机自启
-
Web 界面添加 Proxy
- 路径:管理 → Proxy → 创建代理
- 配置:名称填 “Zabbix proxy”(与配置文件一致),类型选 “主动式”。
(六)部署 Zabbix Agent(在 server01/server02 节点执行)
目的:在被监控节点部署 Agent,采集本地资源数据并发送给 Server 或 Proxy。
-
添加 Zabbix 源(同 Server 步骤)
[root@server01~]# rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm [root@server01~]# dnf clean all
-
安装 Agent
[root@server01 ~]# dnf -y install zabbix-agent
-
配置 Agent
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf
修改以下参数:
Server=192.168.10.105 # 指向Server或Proxy的IP(直接连Server则填Server IP,通过Proxy则填Proxy IP) ServerActive=192.168.10.105 # 主动模式下的目标IP(同Server) Hostname=server01 # 主机名(需与Web界面添加的主机名一致)
-
启动 Agent 服务
[root@server01 ~]# systemctl start zabbix-agent [root@server01 ~]# systemctl enable zabbix-agent # 开机自启
-
Web 界面添加被监控主机
- 直接连 Server:
路径:数据采集 → 主机 → 创建主机
配置:主机名填 “server01”,群组选 “Linux servers”,接口填 Agent 节点 IP(192.168.207.139),关联模板 “Template OS Linux”。 - 通过 Proxy 连接:
步骤同上,额外在 “由 Proxy 监测” 中选择已配置的 Proxy(Zabbix proxy)。
- 直接连 Server:
四、扩展:解决 Zabbix 图像字体显示问题(中文乱码)
问题:Zabbix 默认字体不支持中文,导致图表中中文显示为方块。
-
查找字体配置文件
[root@zabbix ~]# find / -name defines.inc.php /usr/share/zabbix/include/defines.inc.php # 字体配置核心文件
-
确认默认字体名称
[root@zabbix~]# grep "ZBX_GRAPH_FONT_NAME" /usr/share/zabbix/include/defines.inc.php define('ZBX_GRAPH_FONT_NAME', 'graphfont'); # 默认字体文件名为graphfont.ttf
-
定位字体文件路径
[root@zabbix ~]# find / -name graphfont.ttf /usr/share/zabbix/assets/fonts/graphfont.ttf # 默认字体路径
-
替换为中文字体
-
上传中文字体文件(如 msyh1.ttc,微软雅黑)到
/usr/share/zabbix/assets/fonts/
。 -
创建软链接替换默认字体:
[root@zabbix fonts]# ln -snf msyh1.ttc graphfont.ttf # 软链接指向中文字体
-
-
验证效果
- 刷新 Web 界面,图表中的中文应正常显示。
通过以上步骤,可完成 Zabbix 企业级分布式监控系统的部署,实现对多节点、多类型资源的统一监控与告警。