proxy

概述

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

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

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

Zabbix proxy 需要单独的数据库。

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

另请参见:

运行 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 一起使用:

Parameter Description
-c --config <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 时向 Zabbix 服务器请求配置数据。
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 启动housekeeping 过程。如果 housekeeping 过程当前正在进行,则忽略。
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/mutex 的详细信息。
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'。

当将某个进程类型指定为运行时控制的 target 时,该命令仅适用于该类型的正在运行的进程。 如果当前没有该类型的进程在运行,命令将返回错误:

zabbix_proxy -R log_level_increase='data sender'
Cannot redirect signal: "data sender" process does not exist

使用运行时控制重新加载 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 前端更新 SNMPv3 接口时,在大多数情况下,Zabbix 会自动为该接口重新加载新的 SNMPv3 credentials;仅当更改 credentials 后轮询仍然失败时(例如由于 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 用户身份运行。 因此,您可以让 proxy 以任意非 root 用户身份运行,不会有任何问题。

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

配置文件

配置文件的默认路径取决于操作系统和 Zabbix 的安装方式:

  • 对于从源代码安装:/usr/local/etc/zabbix_proxy.conf,或者由 编译时 变量 --sysconfdir--prefix 设置。
  • 对于从软件包安装:/etc/zabbix/zabbix_proxy.conf

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

proxy 进程类型和线程

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

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

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 有一个 housekeeper 进程,用于删除过期的监控项历史数据和趋势数据。 它按周期运行,运行频率由 HousekeepingFrequency 决定,而每个周期的删除上限由 ProxyLocalBufferProxyOfflineBuffer 决定。 与 Zabbix 服务器的 清理过程 不同,proxy 的 housekeeper 进程不使用 housekeeper 表——它会在每个清理周期一次性删除所有过期数据。

支持的平台

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 不会感知维护周期;有关详细信息,请参见 维护期间队列的计算

在 proxy 后使用 Zabbix 前端

如果 Zabbix 前端运行在 proxy 服务器后面,则需要重写 proxy 配置文件中的 cookie 路径,以匹配反向代理后的路径。请参见下面的示例。如果未重写 cookie 路径,用户在尝试登录 Zabbix 前端时可能会遇到授权问题。

NGINX 配置示例
# ..
location / {
# ..
proxy_cookie_path /zabbix /;
proxy_pass http://192.168.0.94/zabbix/;
# ..
Apache 的示例配置
# ..
ProxyPass "/" http://host/zabbix/
ProxyPassReverse "/" http://host/zabbix/
ProxyPassReverseCookiePath /zabbix /
ProxyPassReverseCookieDomain host zabbix.example.com
# ..