概述
Zabbix 支持两种主要的工作模式:被动模式(Passive) 和 主动模式(Active)。这两种模式是站在 Zabbix Agent 角度来说的工作模式。
被动模式
工作原理
在被动模式下,Zabbix Agent 被动接受 Zabbix Server 周期性发送过来的数据收集指令:
- Zabbix Server 根据主机关联的模板中的监控项和数据采集间隔时间,周期性打开随机端口
- 向 Zabbix Agent 服务器的 10050 端口发起 TCP 连接
- 发送获取监控项数据的指令
- Zabbix Agent 接收到指令后采集数据并返回
特点:
- Zabbix Server 发送什么指令,Zabbix Agent 就收集什么数据
- Zabbix Server 什么时候发送,Zabbix Agent 就什么时候采集
- Zabbix Server 不发送,Zabbix Agent 就一直不响应
被动模式的优点
- ✅ 配置简单,安装后即可使用
- ✅ Zabbix 的默认工作模式
- ✅ 无需额外配置
被动模式的缺点
- ❌ 会加大 Zabbix Server 的工作量
- ❌ 在数百甚至数千台服务器的环境下,Zabbix Server 需要轮询向每个 Agent 发送数据采集指令
- ❌ Zabbix Server 负载高时可能导致不能及时获取最新数据
被动模式端口状态
Zabbix Server (随机端口) → Zabbix Agent:10050Server 端会产生大量随机端口连接。
被动模式配置
Zabbix Agent 默认即为被动模式,只需配置 Server 参数:
# /etc/zabbix/zabbix_agent2.conf
Server=192.168.5.3主动模式
工作原理
在主动模式下,Zabbix Agent 主动向 Zabbix Server 的 10051 端口发起 TCP 连接请求:
- Zabbix Agent 主动连接到 Zabbix Server
- 获取自己的监控项和数据采集间隔周期时间
- 根据监控项主动采集数据
- 将数据返回给 Zabbix Server
特点:
- 必须配置
ServerActive指定 Zabbix Server 的 IP 或主机名 - Agent 主动获取监控项列表并定期上报数据
- 不再需要 Server 向 Agent 发起连接请求
主动模式的优点
- ✅ 减轻 Zabbix Server 打开的本地随机端口和进程数
- ✅ 在一定程度上减轻 Zabbix Server 的压力
- ✅ 适合大规模监控环境
- ✅ 支持 NAT/防火墙后的主机监控
主动模式的缺点
- ❌ 配置相对复杂
- ❌ Zabbix 6.0 及以下版本主动模式主机可用性显示灰色(Zabbix 6.2+ 已修复)
- ❌ 某些监控项不支持主动模式
主动模式配置
编辑 /etc/zabbix/zabbix_agent2.conf:
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=192.168.5.3
ServerActive=192.168.5.3
Hostname=192.168.5.134
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf关键配置项:
| 配置项 | 说明 |
|---|---|
Server | 被动模式服务端地址(建议同时配置,用于远程命令等) |
ServerActive | 主动模式服务端地址 |
Hostname | 本机标识,必须与 Zabbix Server 配置的主机名一致 |
版本注意事项
重要:Zabbix 6.0 及以下版本使用主动模式时,主机可用性可能一直显示为灰色。建议升级到 Zabbix 6.2 或更高版本。
模式对比
| 特性 | 被动模式 | 主动模式 |
|---|---|---|
| 连接方向 | Server → Agent | Agent → Server |
| Server 端口 | 随机端口 | 10051 |
| Agent 端口 | 10050 | 随机端口 |
| 配置复杂度 | 简单 | 较复杂 |
| Server 负载 | 高 | 低 |
| 适用规模 | 中小规模 | 大规模 |
| NAT/防火墙支持 | 受限 | 良好 |
| 监控项支持 | 全部 | 部分不支持 |
Zabbix Proxy
架构图
Zabbix Agent → Zabbix Proxy → Zabbix Server
↓
Proxy DatabaseZabbix Proxy vs Zabbix Server
| 功能 | Zabbix Proxy | Zabbix Server |
|---|---|---|
| 轻量级 | ✅ 是 | 相对重量级 |
| 图形界面 | ❌ 无 | ✅ 带图形控制界面 |
| 独立工作 | ✅ 可以独立采集数据并存储 | ✅ 数据采集、存储、分析、展示于一体 |
| 易维护 | ✅ 设置完成后基本无需管理 | 维护也不难 |
| 独立数据库 | 保留少量最近数据 | 保留指定时间内的所有数据 |
| 报警通知 | ❌ 不发送邮件通知 | ✅ 支持邮件、短信等告警机制 |
版本要求
重要:Zabbix Proxy 的大版本必须和 Zabbix Server 版本一致,否则会导致兼容性问题。
安装方式
方式一:YUM 安装
# 安装依赖
yum -y install OpenIPMI-libs fping libevent net-snmp-libs unixODBC pcre2
# 安装 Zabbix Proxy
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-proxy-mysql-6.0.38-release2.el7.x86_64.rpm方式二:编译安装
# 创建用户
useradd zabbix -s /usr/sbin/nologin
# 编译配置
cd /usr/local/src/zabbix-6.0.x
./configure --prefix=/usr/sbin/zabbix_proxy \
--enable-proxy --enable-agent \
--with-mysql --with-net-snmp \
--with-libcurl --with-libxml2
make install创建 Systemd 服务文件
cat > /lib/systemd/system/zabbix-proxy.service << 'EOF'
[Unit]
Description=Zabbix Proxy
After=syslog.target network.target mysqld.service
[Service]
Environment="CONFFILE=/etc/zabbix/zabbix_proxy.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-proxy
Type=forking
Restart=on-failure
PIDFile=/run/zabbix/zabbix_proxy.pid
KillMode=control-group
ExecStart=/usr/sbin/zabbix_proxy -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
EOF部署数据库
# 创建数据库(主动模式)
create database zabbix_proxy_active character set utf8 collate utf8_bin;
# 创建数据库(被动模式)
create database zabbix_proxy_passive character set utf8 collate utf8_bin;
# 创建用户
grant all on zabbix_proxy_active.* to 'proxy'@'%' identified by 'zzjjhh123';导入数据库
# 主动模式数据库导入
zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz | \
mysql -uproxy -p123456 -h172.31.0.104 zabbix_proxy_activeProxy 配置文件
被动模式配置
# /etc/zabbix/zabbix_proxy.conf
# 0为主动,1为被动
ProxyMode=1
# Zabbix Server 服务器的地址或主机名
Server=172.31.0.101
# 代理服务器名称,需要与 Zabbix Server 添加代理时的 proxy name 一致
Hostname=magedu-jiege-proxy-passive
# Zabbix Proxy 监听端口
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_proxy.log
# 允许 Zabbix Server 执行远程命令
EnableRemoteCommands=1
# 数据库配置
DBHost=172.31.0.104
DBName=zabbix_proxy_passive
DBUser=proxy
DBPassword=123456
DBPort=3306
# 数据保留时间(小时)
ProxyLocalBuffer=720
ProxyOfflineBuffer=720
# 心跳检测间隔(秒)
HeartBeatFrequency=60
# 从 Zabbix Server 获取监控项信息的间隔(秒)
ConfigFrequency=5
# 数据发送的时间间隔(秒)
DataSenderFrequency=5
# 启动的数据采集器数量
StartPollers=20
StartPingers=3
# Java Gateway 配置(如需监控 Java)
JavaGateway=172.31.0.104
JavaGatewayPort=10052
StartJavaPollers=20
# 缓存配置
CacheSize=2G
HistoryCacheSize=2G
HistoryIndexCacheSize=128M
# 超时设置
Timeout=30
LogSlowQueries=3000主动模式配置
# 0为主动,1为被动
ProxyMode=0
# 其他配置与被动模式类似
Server=172.31.0.101
ServerPort=10051
Hostname=magedu-jiege-proxy-active
...启动 Proxy
systemctl enable zabbix-proxy
systemctl start zabbix-proxy
systemctl status zabbix-proxy选择建议
| 场景 | 推荐模式 |
|---|---|
| 监控主机 < 100 台 | 被动模式 |
| 监控主机 > 500 台 | 主动模式 |
| 跨地域/跨机房监控 | 主动模式 + Proxy |
| NAT/防火墙后主机 | 主动模式 |
| 高安全要求环境 | 主动模式 |
| 快速部署测试 | 被动模式 |