4 Proxy

概述

Zabbix proxy 是一个进程,可从一个或多个被监控设备收集监控数据,并将这些信息发送到 Zabbix 服务器,本质上是代表服务器执行工作的。 所有收集到的数据都会先在本地缓冲,然后再传输到该 proxy 所属的 Zabbix 服务器。

部署 proxy 是可选的,但对于分担单个 Zabbix 服务器的负载可能非常有帮助。 如果仅由 proxy 收集数据,服务器上的处理对 CPU 和磁盘 I/O 的消耗会更少。

对于远程位置、分支机构以及没有本地管理员的网络的集中式监控,Zabbix proxy 是理想的解决方案。

Zabbix proxy 需要单独的数据库。

请注意,Zabbix proxy 支持的数据库包括 SQLite、MySQL 和 PostgreSQL。

另请参见:在分布式环境中使用 proxy

运行Proxy

如果作为软件包安装

Zabbix proxy 作为守护进程运行。 可以通过执行以下命令启动 proxy:

systemctl start zabbix-proxy

这适用于大多数 GNU/Linux 系统。 在其他系统上,您可能需要运行:

/etc/init.d/zabbix-proxy start

类似地,要停止/重启/查看 Zabbix proxy 的状态,请使用以下命令:

systemctl stop zabbix-proxy
systemctl restart zabbix-proxy
systemctl status zabbix-proxy
手动启动

如果上述方法不起作用,您需要手动启动它。 找到 zabbix_proxy 二进制文件的路径并执行:

zabbix_proxy

您可以将以下命令行参数与 Zabbix proxy 一起使用:

-c --config <file>              配置文件的路径
-f --foreground                 在前台运行 Zabbix proxy
-R --runtime-control <option>   执行管理功能
-T --test-config                验证配置文件并退出
-h --help                       显示此帮助
-V --version                    显示版本号

使用命令行参数运行 Zabbix proxy 的示例:

zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf
zabbix_proxy --help
zabbix_proxy -V
运行时控制

运行时控制选项:

Option Description Target
config_cache_reload 重新加载配置缓存。如果缓存当前正在加载,则忽略。
活动的 Zabbix proxy 将连接到 Zabbix 服务器并请求配置数据。
被动的 Zabbix proxy 将在服务器下次连接到 proxy 时请求配置数据。
history_cache_clear=target 清除由其 ID 指定的监控项的历史缓存。
会影响该监控项的所有值,但不包括第一个和最后一个值。
target - 监控项的 ID。
diaginfo[=<section>] 在 proxy 日志文件中收集诊断信息。 historycache - 历史缓存统计信息;
preprocessing - 预处理管理器统计信息;
locks - mutex 列表(在 BSD 系统上为空)。
snmp_cache_reload 重新加载 SNMP 缓存 - 清除所有主机的 SNMP 引擎属性(engine time、engine boots、engine id、credentials)。用于在排查 SNMP 问题时强制全局清除缓存。
housekeeper_execute 启动 housekeeper 过程。如果 housekeeper 过程当前正在进行,则忽略。
log_level_increase[=<target>] 提高日志级别,如果未指定 target,则影响所有进程。
BSD 系统不支持。
process type - 指定类型的所有进程(例如 poller)。
参见所有 proxy 进程类型
process type,N - 进程类型和编号(例如 poller,3)。
pid - 进程标识符(165535)。对于更大的值,请将 target 指定为 'process type,N'。
log_level_decrease[=<target>] 降低日志级别,如果未指定 target,则影响所有进程。
BSD 系统不支持。
prof_enable[=<target>] 启用性能分析。
如果未指定 target,则影响所有进程。
启用性能分析后,可按函数名提供所有 rwlocks/mutexes 的详细信息。
process type - 指定类型的所有进程(例如 history syncer)。
参见所有 proxy 进程类型
process type,N - 进程类型和编号(例如 history syncer,1
pid - 进程标识符(165535)。对于更大的值,请将 target 指定为 'process type,N'。
scope - rwlockmutexprocessing 可与进程类型和编号一起使用(例如 history syncer,1,processing),也可用于该类型的所有进程(例如 history syncer,rwlock)。
prof_disable[=<target>] 禁用性能分析。
如果未指定 target,则影响所有进程。
process type - 指定类型的所有进程(例如 history syncer)。
参见所有 proxy 进程类型
process type,N - 进程类型和编号(例如 history syncer,1)。
pid - 进程标识符(165535)。对于更大的值,请将 target 指定为 'process type,N'。

使用运行时控制重新加载 proxy 配置缓存的示例:

zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R config_cache_reload

使用运行时控制清除某个监控项历史缓存的示例:

zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R history_cache_clear=42243

使用运行时控制收集诊断信息的示例:

# 在 proxy 日志文件中收集所有可用的诊断信息:
zabbix_proxy -R diaginfo

# 在 proxy 日志文件中收集历史缓存统计信息:
zabbix_proxy -R diaginfo=historycache

使用运行时控制重新加载 SNMP 缓存的示例:

zabbix_proxy -R snmp_cache_reload

当通过 Zabbix UI 更新 SNMPv3 接口时,在大多数情况下,Zabbix 会自动为该接口重新加载新的 SNMPv3 凭据;仅当更改凭据后轮询仍然失败时(例如由于 engineBoots/engineID 不一致或非 RFC 设备),或者需要强制全局清除 SNMP 缓存以进行故障排查时,才使用 -R snmp_cache_reload

使用运行时控制触发执行 housekeeper 的示例:

zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R housekeeper_execute

使用运行时控制更改日志级别的示例:

# 提高所有进程的日志级别:
zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R log_level_increase

# 提高第二个 poller 进程的日志级别:
zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R log_level_increase=poller,2

# 提高 PID 为 1234 的进程的日志级别:
zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R log_level_increase=1234

# 降低所有 http poller 进程的日志级别:
zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R log_level_decrease="http poller"
进程用户

Zabbix proxy 设计为以非 root 用户运行。 它将以启动它的任意非 root 用户身份运行。 因此,您可以以任何非 root 用户运行 proxy,而不会有任何问题。

如果您尝试以 'root' 运行,它将切换到硬编码的 'zabbix' 用户,该用户必须存在于您的系统中。 只有在相应修改 proxy 配置文件中的 AllowRoot 参数后,您才能以 'root' 运行 proxy。

配置文件

有关配置 zabbix_proxy 的详细信息,请参阅配置文件选项。

proxy 进程类型和线程

  • agent poller - 用于被动检查的异步 poller 进程,带有一个工作线程;
  • availability manager - 用于更新主机可用性的进程;
  • browser poller - 用于浏览器监控项检查的 poller;
  • configuration syncer - 用于管理配置数据内存缓存的进程;
  • data sender - proxy 数据发送器;
  • discovery manager - 用于设备发现的管理进程;
  • discovery worker - 用于处理来自 discovery manager 的发现任务的进程;
  • history syncer - 历史数据数据库写入器;
  • housekeeper - 用于删除过期监控项历史数据的进程;
  • http agent poller - 用于 HTTP 检查的异步 poller 进程,带有一个工作线程;
  • http poller - Web 监控 poller;
  • icmp pinger - 用于 icmpping 检查的 poller;
  • internal poller - 用于内部检查的 poller;
  • ipmi manager - IPMI poller 管理器;
  • ipmi poller - 用于 IPMI 检查的 poller;
  • java poller - 用于 Java 检查的 poller;
  • odbc poller - 用于 ODBC 检查的 poller;
  • poller - 用于被动检查的普通 poller;
  • preprocessing manager - 带有预处理工作线程的预处理任务管理器;
  • preprocessing worker - 用于数据预处理的线程;
  • self-monitoring - 用于收集服务器内部统计信息的进程;
  • snmp poller - 用于 SNMP 检查的异步 poller 进程,带有一个工作线程(仅适用于 walk[OID]get[OID] 监控项);
  • snmp trapper - 用于 SNMP trap 的 trapper;
  • task manager - 用于远程执行其他组件请求的任务的进程(例如关闭问题、确认问题、立即检查监控项值、远程命令功能);
  • trapper - 用于主动检查、trap 和 proxy 通信的 trapper;
  • unreachable poller - 用于不可达设备的 poller;
  • vmware collector - 负责从 VMware 服务收集数据的 VMware 数据采集器。

可以使用 proxy 日志文件来观察这些进程类型。

自 Zabbix 7.4.6 起,proxy 日志文件仅为文件所有者创建读写权限。此外,该文件对所有者所属组可读。其他所有权限均被拒绝。

可以使用内部 监控项 zabbix[process,<type>,<mode>,<state>] 来监控各种类型的 Zabbix proxy 进程。

历史同步器事务统计

history syncer 进程标题会显示有关 history syncer 事务的详细统计信息。

205276 ?        S      0:00  zabbix_proxy: history syncer #1 [processed 1 values in 0.001179 (0.001167,0.000000) sec, idle 1 sec]
205277 ?        S      0:00  zabbix_proxy: history syncer #2 [processed 0 values in 0.000022 (0.000000,0.000000) sec, idle 1 sec]

processed...in N (<timings>) sec 中的计时包括:

  • 将监控项值写入数据库所花费的时间。
  • 更新监控项数据(状态、错误)所花费的时间。

支持的平台

Zabbix proxy 可运行在与 Zabbix 服务器相同的支持的平台列表中。

内存缓冲区

内存缓冲区允许将新数据(监控项值、网络发现、主机自动注册)存储在缓冲区中,并在不访问数据库的情况下上传到 Zabbix 服务器。 内存缓冲区是在 Zabbix 7.0 中为 proxy 引入的。

在 Zabbix 7.0 之前的安装中,收集到的数据会先存储在数据库中,然后再上传到 Zabbix 服务器。 对于这些安装,升级到 Zabbix 7.0 后,这仍然是默认行为。

为了获得更优的性能,建议在 proxy 上配置使用内存缓冲区。 这可以通过将 ProxyBufferMode 的值从 disk(现有安装的硬编码默认值)修改为 hybrid(推荐)或 memory 来实现。 同时还需要设置内存缓冲区大小(ProxyMemoryBufferSize 参数)。

在混合模式下,如果 proxy 停止、缓冲区已满或数据过旧,系统会将未发送的数据刷新到数据库,从而保护缓冲区免于数据丢失。 当所有值都已刷新到数据库后,proxy 会重新使用内存缓冲区。

在内存模式下,会使用内存缓冲区,但不会提供数据丢失保护。 如果 proxy 停止,或者内存被填满,未发送的数据将被丢弃。

自 Zabbix 7.0 起,所有新安装默认应用混合模式(ProxyBufferMode=hybrid)。

其他参数,例如 ProxyMemoryBufferSizeProxyMemoryBufferAge,分别定义内存缓冲区大小和缓冲区中数据的最大保留时间。

请注意,如果配置冲突,proxy 将输出错误并无法启动,例如以下情况:

  • ProxyBufferMode 设置为 hybridmemory,且 ProxyMemoryBufferSize0
  • ProxyBufferMode 设置为 hybridmemory,且 ProxyLocalBuffer 不为 0

区域设置

请注意,proxy 需要 UTF-8 区域设置,以便某些文本监控项能够被正确解析。 大多数现代类 Unix 系统默认使用 UTF-8 区域设置,但在某些系统中,可能需要专门进行设置。

维护期间队列的计算

Zabbix proxy 不会感知维护期;详情请参见维护期间队列的计算