前言
在大型监控场景中,单一的Zabbix Server往往难以应对跨地域、大规模的监控需求。网络延迟、带宽限制、设备数量等因素都可能成为监控系统的瓶颈。本文将详细介绍Zabbix Proxy的部署与应用,通过实际案例演示如何构建分布式监控架构,实现跨地域数据中心的统一监控。
一、为什么需要Zabbix Proxy
1.1 什么是Zabbix Proxy
Zabbix Proxy是Zabbix Server的代理服务,它能够代替Zabbix Server采集数据,然后将数据统一发送给Zabbix Server。它的功能和Zabbix Server非常类似,主要作用是作为Zabbix Server的代理,分担监控压力。
1.2 Zabbix Proxy的组成
Zabbix Proxy主要由两部分组成:
Zabbix Proxy服务:负责数据采集和转发
Proxy数据库:临时存储采集数据(非永久存储)
重要说明:Zabbix Proxy的数据库必须与Zabbix Server的数据库分开部署。虽然可以在同一台机器上创建两个数据库,但建议物理分离以保证性能。
1.3 数据库的缓存机制
Proxy的数据库不用于永久存储采集数据,而是作为数据中转缓存:
临时存放采集到的监控数据(防止Proxy向Server传输数据失败)
存储从Zabbix Server拉取的监控配置信息
数据成功发送到Server后,本地临时数据会被自动清理
1.4 适用场景
Zabbix Proxy主要适用于以下场景:
| 场景 | 说明 |
|---|---|
| 远程区域监控 | 监控分布在不同地理位置的数据中心或分支机构 |
| 网络不稳定环境 | 监控本地网络连接不稳定的区域,Proxy可在断网时缓存数据 |
| 大规模监控 | Zabbix监控上千台设备时,使用Proxy减轻Server压力 |
| 简化分布式维护 | 统一管理分布在不同网络的监控节点 |
1.5 核心优势
+------------------+ +------------------+ +------------------+ | 远程监控区域 | | 代理节点 | | 监控中心 | | (上海机房) | ---> | Zabbix Proxy | ---> | Zabbix Server | | 192.168.38.0/24 | | 双网卡 | | 192.168.38.30 | +------------------+ +------------------+ +------------------+
降低Server负载,提高系统扩展性
网络中断时本地缓存数据,保证数据不丢失
简化防火墙配置,只需Proxy与Server互通
支持加密传输,提高安全性
二、分布式监控案例实战
2.1 案例背景
本案例模拟北京监控中心与上海数据中心的联合监控场景:
北京机房:监控中心部署Zabbix Server(192.168.38.30)
上海机房:大量服务器和业务需要监控
网络隔离:两个机房网络无法直接互通
解决方案:在上海机房部署Zabbix Proxy作为数据中转
2.2 网络拓扑
+-----------------------------------------+ | 北京监控中心 | | Zabbix Server (192.168.38.30) | +-----------------------------------------+ ↑ │ (数据上报) │ +-----------------------------------------+ | 上海中转服务器 (Zabbix Proxy) | | 内网IP: 192.168.38.129 | | 外网IP: 192.168.38.160 | +-----------------------------------------+ ↑ ↑ │ │ +------+-------+ +-------+-------+ | 上海服务器1 | | 上海服务器2 | | 192.168.38.130| | 192.168.38.131| +--------------+ +---------------+
2.3 环境规划
| 主机名 | IP地址 | 操作系统 | 角色 |
|---|---|---|---|
| zabbix-server | 192.168.38.30 | AlmaLinux 9.1 | Zabbix Server(北京) |
| zabbix-proxy | 192.168.38.129 / 192.168.38.160 | CentOS 7.9 | Zabbix Proxy(上海中转) |
| shanghai-server1 | 192.168.38.130 | CentOS 7.9 | 被监控服务器(上海) |
网络说明:Zabbix Proxy配置双网卡,内网地址192.168.38.129用于连接上海机房Agent,外网地址192.168.38.160用于与北京Server通信。
三、Zabbix Proxy安装与配置
3.1 安装Zabbix Proxy软件
在Zabbix Proxy服务器(192.168.38.129/160)上执行以下操作:
# 1. 添加Zabbix官方仓库 [root@zabbix-proxy ~]# rpm -ivh https://repo.zabbix.com/zabbix/6.4/rhel/7/x86_64/zabbix-release-latest.el7.noarch.rpm # 2. 安装Zabbix Proxy和Agent2 [root@zabbix-proxy ~]# yum install -y zabbix-proxy-mysql zabbix-sql-scripts zabbix-agent23.2 部署MySQL数据库
Zabbix Proxy需要独立的数据库存储缓存数据,这里采用二进制方式部署MySQL:
# 下载并安装MySQL(以二进制方式为例) [root@zabbix-proxy ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz [root@zabbix-proxy ~]# tar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz -C /usr/local/ [root@zabbix-proxy ~]# mv /usr/local/mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql # 创建MySQL用户和数据目录 [root@zabbix-proxy ~]# useradd -r -s /sbin/nologin mysql [root@zabbix-proxy ~]# mkdir -p /data/mysql [root@zabbix-proxy ~]# chown -R mysql:mysql /data/mysql # 初始化数据库 [root@zabbix-proxy ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql3.3 创建Proxy数据库
# 登录MySQL [root@zabbix-proxy ~]# /usr/local/mysql/bin/mysql -uroot -p Enter password: # 创建数据库和用户 mysql> CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; mysql> CREATE USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password BY 'zabbix123'; mysql> GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; mysql> SET GLOBAL log_bin_trust_function_creators = 1; mysql> FLUSH PRIVILEGES; mysql> QUIT;3.4 导入Proxy表结构
[root@zabbix-proxy ~]# cd /usr/share/zabbix-sql-scripts/mysql/ [root@zabbix-proxy mysql]# cat proxy.sql | /usr/local/mysql/bin/mysql --default-character-set=utf8mb4 -uzabbix -p zabbix Enter password: zabbix1233.5 配置Zabbix Proxy
编辑/etc/zabbix/zabbix_proxy.conf配置文件:
# /etc/zabbix/zabbix_proxy.conf # Zabbix Server地址(北京监控中心) Server=192.168.38.30 # Proxy主机名(在Web界面添加时需要保持一致) Hostname=shanghai-proxy # 数据库连接配置 DBHost=127.0.0.1 DBName=zabbix DBUser=zabbix DBPassword=zabbix123 # 可选配置:数据发送频率(秒) ProxyLocalBuffer=0 ProxyOfflineBuffer=1 HeartbeatFrequency=60 ConfigFrequency=3600 DataSenderFrequency=13.6 配置Zabbix Agent2(Proxy自身监控)
编辑/etc/zabbix/zabbix_agent2.conf:
# /etc/zabbix/zabbix_agent2.conf # 被动模式Server地址 Server=192.168.38.30 # 主动模式Server地址 ServerActive=192.168.38.30 # 主机名 Hostname=192.168.38.160注意:这里的Hostname建议使用Proxy的外网IP,方便在Zabbix Server端识别。
四、被监控服务器配置
4.1 安装Zabbix Agent2
在上海被监控服务器(192.168.38.130)上安装Agent2:
[root@shanghai-server1 ~]# rpm -ivh https://repo.zabbix.com/zabbix/6.4/rhel/7/x86_64/zabbix-release-latest.el7.noarch.rpm [root@shanghai-server1 ~]# yum install -y zabbix-agent24.2 配置Agent指向Proxy
编辑/etc/zabbix/zabbix_agent2.conf:
# /etc/zabbix/zabbix_agent2.conf # 被动模式:指向Zabbix Proxy的内网IP Server=192.168.38.129 # 主动模式:指向Zabbix Proxy的内网IP ServerActive=192.168.38.129 # 主机名(唯一标识) Hostname=192.168.38.130关键点:Agent配置的Server地址必须是Zabbix Proxy的地址,而不是直接指向Zabbix Server。
五、启动服务
5.1 启动Zabbix Proxy
# 设置开机自启 [root@zabbix-proxy ~]# systemctl enable zabbix-proxy [root@zabbix-proxy ~]# systemctl enable zabbix-agent2 # 启动服务 [root@zabbix-proxy ~]# systemctl start zabbix-proxy [root@zabbix-proxy ~]# systemctl start zabbix-agent2 # 检查服务状态 [root@zabbix-proxy ~]# systemctl status zabbix-proxy [root@zabbix-proxy ~]# systemctl status zabbix-agent25.2 启动被监控服务器Agent
[root@shanghai-server1 ~]# systemctl enable zabbix-agent2 [root@shanghai-server1 ~]# systemctl start zabbix-agent2 [root@shanghai-server1 ~]# systemctl status zabbix-agent2六、Zabbix Web界面配置
6.1 添加Proxy代理
登录Zabbix Web界面
导航到管理 → Proxy → 创建Proxy
配置参数如下:
| 参数 | 填写内容 |
|---|---|
| Proxy名称 | shanghai-proxy(必须与配置文件中的Hostname一致) |
| Proxy模式 | 主动式(推荐)或被动式 |
| IP地址/DNS | 192.168.38.160(Proxy外网IP) |
| 端口 | 10051 |
6.2 添加被监控主机
导航到配置 → 主机 → 创建主机
填写主机信息:
| 参数 | 填写内容 |
|---|---|
| 主机名称 | shanghai-server1 |
| 可见名称 | 上海服务器-1 |
| 主机IP | 192.168.38.130 |
| 主机组 | 选择"Shanghai Servers"或自定义组 |
| 监控代理 | shanghai-proxy(必须选择刚创建的Proxy) |
| 模板 | 选择"Linux by Zabbix agent"等模板 |
6.3 验证监控数据
配置完成后,等待几分钟(主动模式默认60秒刷新一次),检查:
主机状态是否变为"已启用"
最新数据中是否开始显示监控指标
可用性是否显示为绿色(ZBX)
七、验证与排障
7.1 检查Proxy日志
# 查看Proxy日志,确认与Server连接正常 [root@zabbix-proxy ~]# tail -f /var/log/zabbix/zabbix_proxy.log # 正常日志示例: # 2023-05-13 11:12:34.567 [Z3001] connection to database 'zabbix' succeeded # 2023-05-13 11:12:35.123 [Z4006] sending list of active checks to [192.168.38.30] succeeded7.2 检查Agent日志
# 查看Agent日志,确认与Proxy连接正常 [root@shanghai-server1 ~]# tail -f /var/log/zabbix/zabbix_agent2.log # 正常日志示例: # 2023-05-13 11:12:34.567 [Z3001] connection to database 'zabbix' succeeded # 2023-05-13 11:12:35.123 [Z4006] sending list of active checks to [192.168.38.129] succeeded7.3 常见问题排查
| 问题 | 排查方法 |
|---|---|
| Proxy无法连接Server | 检查防火墙是否开放10051端口,网络是否互通 |
| Agent无法连接Proxy | 检查防火墙是否开放10050端口,Agent配置是否正确 |
| 数据未上报 | 检查Proxy数据库连接是否正常,查看日志错误信息 |
| 主机状态不可用 | 检查Proxy与Agent的连通性,确认主机配置正确 |
防火墙配置参考:
# Zabbix Proxy上开放端口 [root@zabbix-proxy ~]# firewall-cmd --permanent --add-port=10051/tcp [root@zabbix-proxy ~]# firewall-cmd --reload # 被监控服务器上开放端口 [root@shanghai-server1 ~]# firewall-cmd --permanent --add-port=10050/tcp [root@shanghai-server1 ~]# firewall-cmd --reload八、Proxy模式对比
8.1 主动模式 vs 被动模式
| 特性 | 主动模式 | 被动模式 |
|---|---|---|
| 数据流向 | Proxy主动从Server获取配置,推送数据 | Server主动连接Proxy拉取数据 |
| 网络要求 | Proxy能访问Server即可 | Server需能访问Proxy |
| 适用场景 | Proxy在NAT后面,Server无法直连 | Server可直接访问Proxy |
| 配置参数 | ProxyMode=1 | ProxyMode=0(默认) |
生产环境建议:如果Proxy部署在NAT网络或防火墙后,推荐使用主动模式。
8.2 配置主动模式
如需配置主动模式,在zabbix_proxy.conf中添加:
ProxyMode=1同时需要在Server端配置:
管理 → Proxy → 选择Proxy → 修改
将Proxy模式改为"主动式"
总结
通过本文的实践,我们成功完成了以下工作:
理解Proxy应用场景:明确了Proxy在分布式监控中的定位和价值
搭建Proxy环境:完整部署了Zabbix Proxy及其数据库
配置网络互通:实现了跨网段监控数据的采集和转发
Web界面配置:完成了Proxy和主机的添加与验证
关键要点回顾
✅ Zabbix Proxy需独立数据库,不能与Server共用
✅ Agent配置的Server地址是Proxy地址,而非Server地址
✅ Web端添加主机时必须选择对应的Proxy
✅ 主动模式更适合Proxy部署在NAT环境下的场景
✅ Proxy数据库只做缓存,数据发送后自动清理
Zabbix Proxy是构建大规模、跨地域监控系统的重要组件,合理利用可以极大提升监控系统的可扩展性和稳定性。希望本文能为您的分布式监控建设提供有价值的参考。
参考资料:
Zabbix官方文档:4 Proxy
Zabbix Proxy配置详解:2 Zabbix proxy