2160 字
11 分钟
10-Zabbix-Porxy-分布式代理

Zabbix 6.4 分布式企业级性能监控平台#

Zabbix Porxy 分布式代理
官网:https://www.zabbix.com/cn

一、了解:Zabbix Proxy 分布式代理#

<Zabbix Proxy 分布式代理>是实现<分布式监控>的<重要环节>,它可以代表 Zabbix Server 来收集<性能数据>,并予以本地缓存,然后将<性能数据>发送给 Zabbix Server,从而大大减轻了 Zabbix Server 上的 CPU 和磁盘 I/O 的开销。
Zabbix Proxy 需要使用独立的数据库,可以是<MySQL 数据库>、<PostgreSQL 数据库>、<sqlite3 数据库>三选一。
Zabbix Proxy 和 Zabbix Server 不能使用同一个<用户数据库>, 如需安装在同一台主机上,则须各自拥有不同的<用户数据库名>。
Zabbix proxy 的应用场景图:

Zabbix Proxy 仅仅负责<数据收集>,无需负责<触发器计算、事件处理、警报发送>。
Zabbix Proxy 支持的具体功能(见下表):
功能proxy 支持列表
Items
Zabbix agent checksYes
Zabbix agent checks (active)Yes
Simple checksYes
Trapper itemsYes
SNMP checksYes
SNMP trapsYes
IPMI checksYes
JMX checksYes
Log file monitoringYes
Internal checksYes
SSH checksYes
Telnet checksYes
External checksYes
Dependent itemsYes
Script itemsYes
Built-in web monitoringYes
Item value preprocessingYes
Network discoveryYes
Active agent autoregistrationYes
Low-level discoveryYes
Remote commandsYes
Calculating triggersNo
Processing eventsNo
Event correlationNo
Sending alertsNo

二、实验环境#

节点角色IP 地址操作系统:硬件规格
rocky-9-16MySQL 数据库(版本:8.0) 加装:Zabbix Agent 客户端代理192.168.168.16/24Rocky Linux 91 vCPU、2GB 内存
rocky-9-17Nginx + PHP Web 前端 加装:Zabbix Agent 客户端代理192.168.168.17/24Rocky Linux 91 vCPU、2GB 内存
rocky-9-18Zabbix Server 核心服务(版本:6.4)192.168.168.18/24Rocky Linux 91 vCPU、2GB 内存
rocky-9-19被监控主机 安装:Zabbix Agent 客户端代理192.168.168.19/24Rocky Linux 91 vCPU、2GB 内存
rocky-9-20Zabbix Proxy 代理服务(版本:6.4) 安装:MySQL 数据库(版本:8.0) 安装:Zabbix Agent 客户端代理192.168.168.20/24Rocky Linux 91 vCPU、2GB 内存

三、部署:Zabbix Proxy 分布式代理#

1. 安装部署:MySQL 数据库#

##
## 安装:MySQL 数据库,并创建<zabbix 用户数据库>
##
Terminal window
dnf install -y mysql-server mysql
systemctl enable mysqld
systemctl restart mysqld
mysqladmin -uroot password 'a123456!'
mysql -uroot -p'a123456!' <<EOF
create database if not exists zabbixproxy character set utf8mb4 collate utf8mb4_bin;
create user if not exists root@'%' identified by 'a123456!';
grant all privileges on *.* to root@'%';
create user if not exists zabbix@localhost identified by 'a123456!';
grant all privileges on zabbixproxy.* to zabbix@localhost;
create user if not exists zabbix@'%' identified by 'a123456!';
grant all privileges on zabbixproxy.* to zabbix@'%';
set global log_bin_trust_function_creators = 1;
EOF
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

2. 安装部署:Zabbix Proxy 分布式代理#

##
## (1) 禁用:EPEL 源中的 Zabbix
##
Terminal window
vi /etc/yum.repos.d/ustc_epel_9.repo ## 这是:一个国内的 EPEL YUM 镜像源
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=https://mirrors.ustc.edu.cn/epel/$releasever//Everything/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
excludepkgs=zabbix*
##
## (2) 获取:<Zabbix 软件包>的<repo 源配置文件>
##
Terminal window
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm
yum clean all
yum makecache
##
## (3) 安装:Zabbix Proxy 分布式代理服务
##
Terminal window
dnf install -y zabbix-proxy-mysql zabbix-sql-scripts
##
## (4) 针对 MySQL 数据库,导入:初始架构和数据
##
Terminal window
dnf install -y mysql
cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | \
mysql --default-character-set=utf8mb4 -uzabbix -p'a123456!' -h 192.168.168.20 zabbixproxy
##
## (5) 在导入数据库架构之后,针对 MySQL 数据库,禁用:log_bin_trust_function_creators 选项。
##
Terminal window
mysql -uroot -p'a123456!' -h 192.168.168.20 <<EOF
set global log_bin_trust_function_creators = 0;
use zabbixproxy;
show tables;
EOF
##
## (6) 针对 Zabbix Proxy 代理服务,配置:数据库连接参数
##
Terminal window
test -f /etc/zabbix/zabbix_proxy.conf.bak || cp /etc/zabbix/zabbix_proxy.conf /etc/zabbix/zabbix_proxy.conf.bak
vi /etc/zabbix/zabbix_proxy.conf
## --------------------------------------------------------------------------
## Zabbix Proxy 工作模式
## --------------------------------------------------------------------------
## 设置:Zabbix Proxy 工作模式
## 0 表示:主动模式(默认模式)
## 1 表示:被动模式
ProxyMode=0
## 设置:Zabbix Proxy 如何与 Zabbix Server 交互
## 如果是<主动模式>,则 Server=address1:port;address2:port
## 如果是<被动模式>,着 Server=address1;address2
Server=192.168.168.18:10051
## 设置:Zabbix Proxy 在<被动模式>下的<侦听端口>(默认值 10051)
## 在<被动模式>下,<ListenPort>用于:接收 Zabbix Server 用于采集<Zabbix Proxy 样本缓存数据>的<主动轮询>
## 在<被动模式>下,<ListenPort>用于:接收 Zabbix Agent 在<主动模式>下发起的<数据汇报>
ListenPort=10051
## 设置:在<Zabbix Server Web 控制台>上的<Zabbix Proxy 选择菜单>中的<显示名称>(注意:不是 Host 主机标识名)
Hostname=Zabbix_Proxy01
## 设置:在<主动模式>下,Proxy 从 Server 获知<配置数据>的<时间间隔>(取值范围:1-3600*24*7,默认值 3600,单位:秒)
ConfigFrequency=60
## 设置:在<主动模式>下,Proxy 向 Server 发送<采样数据>的<时间间隔>(取值范围:1-3600,默认值 1,单位:秒)
DataSenderFrequency=1
## 设置:当 Server 可以连接时,Proxy 本机保存<采样数据>的<保存时长>(取值范围:0-720,默认值 0,单位:小时)
ProxyLocalBuffer=0
## 设置:当 Server 无法连接时,Proxy 本机保存<采样数据>的<保存时长>(取值范围:1-720,默认值 1,单位:小时)
ProxyOfflineBuffer=1
## 设置:监控数据的<缓存区容量>,根据监控主机数量适当调整(取值范围:256K-2G,默认值 8M)
CacheSize=8M
## --------------------------------------------------------------------------
## Zabbix Proxy 数据库连接参数
## --------------------------------------------------------------------------
## 设置:DB 数据库连接参数
DBHost=192.168.168.20
DBName=zabbixproxy
DBUser=zabbix
DBPassword=a123456!
DBPort=3306
## --------------------------------------------------------------------------
## Zabbix Proxy 其他默认参数
## --------------------------------------------------------------------------
## 设置:Proxy 的日志文件
LogFile=/var/log/zabbix/zabbix_proxy.log
## 设置:Proxy 日志文件的最大大小,一旦超过,则日志旋转
## 0 表示:禁止日志旋转,即:日志文档会一直增长下去
LogFileSize=0
## 设置:Proxy 的 PID 文件
PidFile=/run/zabbix/zabbix_proxy.pid
## 设置:Proxy 的 Socket 套接字文件目录
SocketDir=/run/zabbix
## 设置:SNMP Trapper 陷阱的日志文件
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
## 设置:<数据慢查询>的<衡量标准>(取值范围:1-3600000,默认值 0,单位:毫秒),一旦达到标准,就会计入日志
## 0 表示:不记录<数据慢查询>
LogSlowQueries=3000
## 设置:允许接收<哪些 IP 地址>发起的<stat 状态请求>,格式:StatsAllowedIP=address1;address2
StatsAllowedIP=127.0.0.1
## 设置:针对<Trapper 陷阱>的数据处理,所需等待的<最大时间>(取值范围:1-300,默认值 300,单位:秒)
TrapperTimeout=300
## 设置:针对<Agent、SNMP、External check>的数据处理,所需等待的<最大时间>(取值范围:1-30,默认值 3,单位:秒)
Timeout=3
Terminal window
cat /etc/zabbix/zabbix_proxy.conf | grep -vE "^\s*(#|$)"
ProxyMode=0
Server=192.168.168.18:10051
ListenPort=10051
Hostname=Zabbix_Proxy01
ConfigFrequency=60
DataSenderFrequency=1
ProxyLocalBuffer=0
ProxyOfflineBuffer=1
CacheSize=8M
DBHost=192.168.168.20
DBName=zabbixproxy
DBUser=zabbix
DBPassword=a123456!
DBPort=3306
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
Timeout=3
##
## (7) 启动:Zabbix Proxy 服务进程
##
Terminal window
systemctl enable zabbix-proxy.service
systemctl restart zabbix-proxy.service
firewall-cmd --permanent --zone=public --add-port=10051/tcp ## 防火墙放行:<Zabbix Server 核心服务>的<侦听端口>
firewall-cmd --reload
## 禁用:SElinux
if ! [[ $(getenforce) == "Disabled" ]]; then
sed -r -i 's/^\s*SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
reboot
fi

3. 安装部署:Zabbix Agent 客户端代理(用于:采集 Proxy 自身数据)#

Terminal window
dnf install -y zabbix-agent
vi /etc/zabbix/zabbix_agentd.conf
... ...
## 设置:<超时阈值>为<最大值>,从而应对耗时较长的<数据收集>操作
Timeout=30
... ...
## 针对<被被模式>,设置:<Zabbix Agent 侦听端口>
## ♦ 功能说明:
## ♢ 在<指定端口>侦听<数据采集请求>
ListenPort=10050
## 针对<被被模式>,设置:<Zabbix Server 核心服务器>的<IP 地址> 或者 <Zabbix Proxy 分布式代理服务器>的<IP 地址>
## ♦ 功能说明:
## ♢ 控制:<本机 Zabbix Agent 程序>在<10050/tcp 端口>上,应该接收谁的<数据采集请求>?
Server=127.0.0.1
## 针对<主动模式>,设置:<Zabbix Server 核心服务器>的<IP 地址> 或者 <Zabbix Proxy 分布式代理服务器>的<IP 地址>
## ♦ 功能说明:
## ♢ 控制:应该向谁主动汇报<采集数据>?
ServerActive=127.0.0.1:10051
##
## 针对<自动注册>,设置:唯一性的<主机注册名称>
##
Hostname=zabbix_proxy_rocky_9_20
... ...
Terminal window
cat /etc/zabbix/zabbix_agentd.conf | grep -vE "^\s*(#|$)"
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
ListenPort=10050 ## 针对<被动模式>,设置:<Zabbix Agent 侦听端口>
Server=127.0.0.1 ## 针对<被动模式>,设置:接收<指定 IP 地址>发来的<度量查询请求>
ServerActive=127.0.0.1:10051 ## 针对<主动模式>,设置:向<指定 IP 地址>主动汇报<度量采集数据>
Hostname=zabbix_proxy_rocky_9_20 ## 针对<自动注册>,设置:唯一性的<主机注册名称>
Timeout=30 ## 设置:<超时阈值>为<最大值>,从而应对耗时较长的<数据收集>操作
Include=/etc/zabbix/zabbix_agentd.d/*.conf
systemctl enable zabbix-agent.service
systemctl restart zabbix-agent.service
systemctl status zabbix-agent.service
firewall-cmd --permanent --zone=public --add-port=10050/tcp ## 防火墙放行:<Zabbix Agent 客户端代理>的<侦听端口>
firewall-cmd --reload
## 禁用:SElinux
if ! [[ $(getenforce) == "Disabled" ]]; then
sed -r -i 's/^\s*SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
reboot
fi

四、在Zabbix Server 上,创建:Zabbix Proxy 代理程序#

五、配置:Zabbix Agent 使用 Zabbix Proxy 分布式代理#

1. 配置:Zabbix Agent 使用 Zabbix Proxy#

Terminal window
vi /etc/zabbix/zabbix_agentd.conf
... ...
## 设置:<超时阈值>为<最大值>,从而应对耗时较长的<数据收集>操作
Timeout=30
... ...
## 针对<被被模式>,设置:<Zabbix Agent 侦听端口>
## ♦ 功能说明:
## ♢ 在<指定端口>侦听<数据采集请求>
ListenPort=10050
## 针对<被被模式>,设置:<Zabbix Proxy 分布式代理服务器>的<IP 地址>
## ♦ 功能说明:
## ♢ 控制:<本机 Zabbix Agent 程序>在<10050/tcp 端口>上,应该接收谁的<数据采集请求>?
Server=192.168.168.20
## 针对<主动模式>,设置:<Zabbix Proxy 分布式代理服务器>的<IP 地址>
## ♦ 功能说明:
## ♢ 控制:应该向谁主动汇报<采集数据>?
ServerActive=192.168.168.20:10051
##
## 针对<自动注册>,设置:唯一性的<主机注册名称>
##
Hostname=rocky_9_19
... ...
Terminal window
cat /etc/zabbix/zabbix_agentd.conf | grep -vE "^\s*(#|$)"
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
ListenPort=10050
Server=192.168.168.20 ## 针对<被动模式>,设置:接收<指定 Proxy 的 IP 地址>发来的<度量查询请求>
ServerActive=192.168.168.20:10051 ## 针对<主动模式>,设置:向<指定 Proxy 的 IP 地址>主动汇报<度量采集数据>
Hostname=rocky-9-19
Timeout=30
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1
systemctl restart zabbix-agent.service

2. 配置:Zabbix Server 通过 Zabbix Proxy 来采集 Zabbix Agent 数据#

10-Zabbix-Porxy-分布式代理
https://fuwari.vercel.app/posts/zabbix监控/10-zabbix-porxy-分布式代理/
作者
肥猫少杰
发布于
2026-06-03
许可协议
CC BY-NC-SA 4.0