使用 proxy 进行分布式监控
概述
Zabbix proxy 可用于创建高效且可靠的分布式监控架构。
proxy 部署在本地,用于收集性能和可用性数据。然后,这些数据会报告给集中式服务器。
Zabbix proxy 可用于:
- 监控远程位置
- 监控通信不稳定的位置
- 在监控数千台设备时减轻 Zabbix 服务器的负载

proxy 只需要与 Zabbix 服务器建立一个 TCP 连接。 这样更容易绕过防火墙,因为你只需要配置一条防火墙规则。
Zabbix proxy 必须使用单独的数据库。 如果将其指向 Zabbix 服务器数据库,将会破坏配置。
proxy 收集的所有数据都会先保存在本地,然后再传输到服务器。
这样即使与服务器之间出现临时通信问题,也不会丢失数据。
proxy 配置文件中的 ProxyLocalBuffer 和 ProxyOfflineBuffer 参数控制数据在本地保留的时长。
可能会出现这样的情况:某个 proxy 直接从 Zabbix 服务器数据库接收最新配置变更,因此其配置比 Zabbix 服务器更为最新;而由于 CacheUpdateFrequency 的值,Zabbix 服务器的配置更新速度可能没有那么快。 结果,proxy 可能开始收集数据并将其发送给 Zabbix 服务器,而 Zabbix 服务器会忽略这些数据。
Zabbix proxy 是一个数据收集器。 它不会计算触发器、处理事件或发送告警。 有关 proxy 功能概览,请参阅下表:
| Function | Supported by proxy | |
|---|---|---|
| Items | ||
| Zabbix agent checks | Yes | |
| Zabbix agent checks (active) | Yes 1 | |
| Simple checks | Yes | |
| Trapper items | Yes | |
| SNMP checks | Yes | |
| SNMP traps | Yes | |
| IPMI checks | Yes | |
| JMX checks | Yes | |
| Log file monitoring | Yes | |
| Internal checks | Yes | |
| SSH checks | Yes | |
| Telnet checks | Yes | |
| External checks | Yes | |
| Dependent items | Yes | |
| Script items | Yes | |
| Browser items | Yes | |
| Built-in web monitoring | Yes | |
| Item value preprocessing | Yes | |
| Network discovery | Yes | |
| Active agent autoregistration | Yes | |
| Low-level discovery | Yes 2 | |
| Remote commands | Yes | |
| Calculating triggers | No | |
| Processing events | No | |
| Event correlation | No | |
| Sending alerts | No | |
[1] 为确保 agent 向 proxy(而不是服务器)请求主动检查,proxy 必须列在 agent 配置文件中的 ServerActive 参数里。
[2] 对于 LLD,Zabbix proxy 只收集并预处理数据,然后将其发送到 Zabbix 服务器进行进一步处理。
proxy 功能
在选择是否使用 proxy 时,需要考虑多个因素。
| Proxy | |
|---|---|
| 轻量级 | 是 |
| GUI | 否 |
| 独立运行 | 是 |
| 易于维护 | 是 |
| 自动创建数据库 | 是1 |
| 本地管理 | 否 |
| 适用于嵌入式硬件 | 是 |
| 单向 TCP 连接 | 是 |
| 集中式配置 | 是 |
| 生成通知 | 否 |
1 自动创建数据库功能仅适用于 SQLite。 其他受支持的数据库需要手动设置。
Zabbix proxy 不会感知维护周期;有关详细信息,请参见维护期间队列的计算。
防止过载
如果 Zabbix 服务器曾经停机一段时间,而 proxy 已收集了大量数据,随后服务器启动时,可能会发生过载(history cache 使用率会在一段时间内保持在 95-100%)。 这种过载可能会导致性能下降,使检查的处理速度低于应有水平。 为避免由于 history cache 过载而引发的问题,已实现对此场景的保护机制。
当 Zabbix 服务器 history cache 已满时,会对 history cache 的写入访问进行限流,从而阻塞服务器的数据采集进程。 最常见的 history cache 过载场景是服务器停机后,proxy 正在上传已采集的数据。 为避免这种情况,已添加 proxy 限流机制(当前无法禁用)。
当 history cache 使用率达到 80% 时,Zabbix 服务器进入限流模式。 在限流模式下,服务器仅在 history cache 使用率低于 60% 时接受 proxy 数据,并轮换接收的 proxy。 一旦 history cache 使用率降至 20% 以下,服务器会切换回正常模式。
此外,在正常模式下,如果 history cache 使用率超过 60%,Zabbix 服务器会对发送非常大数据包(10,000+ 条记录)的单个 proxy 进行限流。
此决策是在服务器评估 proxy 上传的瞬间应用的,因此可能不会立即反映在 history cache 使用率图表中(zabbix[wcache,history,pused] 内部监控项及其更新间隔可能会错过短暂的峰值)。
此限流模式将持续,直到缓存使用率再次达到 80%、降至 20%,或者限流列表为空。 在第一种情况下,服务器将再次停止接受 proxy 数据。 在另外两种情况下,服务器将恢复正常工作,接受来自所有 proxy 的数据。
上述信息可在下表中说明:
| History write cache usage |
Zabbix server mode | Zabbix server action |
|---|---|---|
| 达到 80% | 等待 | 停止接受 proxy 数据,但保留一个 throttling list(稍后联系的优先级 proxy 列表)。 |
| 达到 60% | 正常,但已准备进入限流 | 在决定是否接受数据时,可能拒绝非常大的 proxy 上传(超过 1 万条记录);继续接受其他 proxy 数据。 |
| 降至 20% | 正常 | 清除限流列表,并开始正常接受 proxy 数据。 |
您可以使用 zabbix[wcache,history,pused] 内部监控项,将 Zabbix 服务器的这种行为与某个指标进行关联。
配置
在你已经安装并配置了 proxy 之后,就可以在 Zabbix 前端中对其进行配置了。
添加 proxy
要在 Zabbix 前端中配置 proxy:
- 转到 Administration > Proxies。
- 单击 Create proxy。
- 在表单中输入 proxy 参数。

| Parameter | Description | |
|---|---|---|
| Proxy name | 输入 proxy 名称。该名称必须与 proxy 配置文件中 Hostname 参数的值相同。 | |
| Proxy group | 选择一个 proxy 组,用于 proxy 负载均衡/高可用。 | |
| Address for active agents | 输入受监控的 active agent 或 sender 必须连接到的地址。仅支持 Zabbix 7.0 或更高版本的 agent。 此地址用于连接 active 和 passive proxy。仅当在 Proxy group 字段中选择了 proxy 组时,此字段才可用。 |
|
| Address | 要连接到的 IP 地址/DNS 名称。 | |
| Port | 要连接到的 TCP 端口号(默认为 10051)。支持用户宏。 | |
| Proxy mode | 选择 proxy 模式。 Active - proxy 将连接到 Zabbix 服务器并请求配置数据 Passive - Zabbix 服务器连接到 proxy 请注意,在使用 active proxy 时,如果未进行身份验证,或未在 Proxy address 字段中限制 proxy 地址,则在未加密通信的情况下,拥有 Zabbix 服务器 trapper 端口访问权限的各方可能会获取 proxy 配置数据。这是因为任何人都可以伪装成 active proxy 并请求配置数据。 |
|
| Proxy address | 如果指定,则仅接受来自此逗号分隔的 IP 地址列表(可选用 CIDR 表示法)或 active Zabbix proxy 的 DNS 名称的 active proxy 请求。 仅当在 Proxy mode 字段中选择了 active proxy 时,此字段才可用。不支持宏。 |
|
| Interface | 输入 passive proxy 的接口详细信息。 仅当在 Proxy mode 字段中选择了 passive proxy 时,此字段才可用。 |
|
| Address | passive proxy 的 IP 地址/DNS 名称。 | |
| Port | passive proxy 的 TCP 端口号(默认为 10051)。支持用户宏。 | |
| Description | 输入 proxy 描述。 | |
Encryption 选项卡允许你要求与 proxy 建立加密连接。
| Parameter | Description |
|---|---|
| Connections to proxy | 服务器连接到 passive proxy 的方式:不加密(默认)、使用 PSK(预共享密钥)或证书。 |
| Connections from proxy | 选择允许 active proxy 使用的连接类型。可以同时选择多种连接类型(便于测试和切换到其他连接类型)。默认为“不加密”。 |
| Issuer | 允许的证书颁发者。证书首先由 CA(证书颁发机构)进行验证。如果证书有效且由 CA 签名,则可以使用 Issuer 字段进一步限制允许的 CA。此字段为可选字段,适用于 Zabbix 安装使用来自多个 CA 的证书的情况。 |
| Subject | 允许的证书主题。证书首先由 CA 进行验证。如果证书有效且由 CA 签名,则可以使用 Subject 字段仅允许一个 Subject 字符串值。如果此字段为空,则接受由已配置 CA 签名的任何有效证书。 |
| PSK identity | 预共享密钥身份字符串。 请勿在 PSK identity 中放置敏感信息,因为该信息会以未加密的形式通过网络传输,用于告知接收方应使用哪个 PSK。 |
| PSK | 预共享密钥(十六进制字符串)。如果 Zabbix 使用 GnuTLS 或 OpenSSL 库,最大长度为 512 个十六进制数字(256 字节 PSK);如果 Zabbix 使用 mbed TLS (PolarSSL) 库,最大长度为 64 个十六进制数字(32 字节 PSK)。示例:1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952 |
Timeouts 选项卡允许你覆盖支持此功能的监控项类型的全局超时。

| Parameter | Description |
|---|---|
| Timeouts for item types | 根据监控项类型设置监控项超时: Global - 使用全局超时(显示在每种监控项类型对应的灰显 Timeout 字段中); Override - 设置自定义超时(在每种监控项类型对应的 Timeout 字段中)。允许范围:1 - 600s(默认值:继承自全局超时)。支持时间后缀,例如 30s、1m,以及用户宏。 单击 Global timeouts 链接可以配置全局超时。请注意,只有具有 Super admin 类型且拥有 Administration > General 前端部分权限的用户才能看到 Global timeouts 链接。 请注意,虽然 proxy 级别的超时会覆盖全局超时,但如果为单个监控项配置了超时,则该超时会覆盖 proxy 级别的超时。 |
如果 proxy 的主版本与服务器的主版本不匹配,则会在 Timeouts for item types 旁显示
图标,并在悬停时显示消息“由于 proxy 和服务器版本不匹配,超时已禁用”。
在这种情况下,proxy 将使用 proxy 配置文件中的 Timeout 参数。
现有 proxy 的编辑表单还包含以下按钮:
- Refresh configuration - 刷新 proxy 的配置;
- Clone - 根据现有 proxy 的属性创建新的 proxy;
- Delete - 删除 proxy。
主机配置
您可以在 主机配置 表单中,通过 Monitored by 字段指定某个单独的主机应由 proxy 或 proxy group 监控。

主机 批量更新 也是指定主机应由 proxy 或 proxy group 监控的另一种方式。