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 时从 Zabbix 服务器请求配置数据。 |
|
| history_cache_clear=target | 清除由其 ID 指定的监控项的历史缓存。 影响该监控项的所有值,但第一个值和最后一个值除外。 |
target - 监控项的 ID |
| diaginfo[=<section>] | 在 proxy 日志文件中收集诊断信息。 | historycache - 历史缓存统计信息 preprocessing - 预处理管理器统计信息 locks - 互斥锁列表(在 BSD 系统上为空) |
| snmp_cache_reload | 重新加载 SNMP 缓存——清除所有主机的 SNMP 引擎属性(engine time、engine boots、engine id、credentials)。在排查 SNMP 问题时,可用于强制执行全局缓存清除。 | |
| housekeeper_execute | 启动清理过程。如果清理过程当前正在进行,则忽略该操作。 | |
| log_level_increase[=<target>] | 提高日志级别;如果未指定 target,则影响所有进程。 在 BSD 系统上不受支持。 |
process type - 指定类型的所有进程(例如,poller) 请参见所有proxy 进程类型。 process type,N - 进程类型和编号(例如,poller,3) pid - 进程标识符(1 到 65535)。对于更大的值,请将 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 - 进程标识符(1 到 65535)。对于更大的值,请将 target 指定为“process type,N”。 scope - rwlock、mutex、processing 可与进程类型和编号一起使用(例如,history syncer,1,processing),也可用于某类型的所有进程(例如,history syncer,rwlock) |
| prof_disable[=<target>] | 禁用性能分析。 如果未指定 target,则影响所有进程。 |
process type - 指定类型的所有进程(例如,history syncer) 请参见所有proxy 进程类型。 process type,N - 进程类型和编号(例如,history syncer,1) pid - 进程标识符(1 到 65535)。对于更大的值,请将 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 用户身份运行。
因此,您可以将 proxy 作为任何非 root 用户运行,而不会有任何问题。
如果您尝试以“root”身份运行它,它将切换到硬编码的“zabbix”用户,该用户必须存在于您的系统中。
只有在您相应修改 proxy 配置文件中的 “AllowRoot” 参数后,才能以“root”身份运行 proxy。
配置文件
有关配置 zabbix_proxy 的详细信息,请参见配置文件选项。
Proxy 进程类型和线程
agent poller- 用于被动检查的异步轮询器进程,带有一个工作线程availability manager- 用于更新主机可用性的进程browser poller- 用于浏览器监控项检查的轮询器configuration syncer- 用于管理配置数据内存缓存的进程data sender- proxy 数据发送器discovery manager- 用于发现设备的管理进程discovery worker- 用于处理来自 discovery manager 的发现任务的进程history syncer- 历史数据库写入器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 的 trappertask manager- 用于远程执行其他组件请求的任务的进程(例如关闭问题、确认问题、立即检查监控项值、远程命令功能)trapper- 用于主动检查、trap 和 proxy 通信的 trapperunreachable 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 决定,而每个周期的删除限制由 ProxyLocalBuffer 和 ProxyOfflineBuffer 决定。
与 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 参数)。
在 hybrid 模式下,如果 proxy 停止、缓冲区已满或数据过旧,未发送的数据会被刷新到数据库中,从而保护缓冲区中的数据不丢失。 当所有值都已刷新到数据库后,proxy 会恢复使用内存缓冲区。
在 memory 模式下,将使用内存缓冲区,但没有防止数据丢失的保护机制。 如果 proxy 停止,或者内存已满,未发送的数据将被丢弃。
自 Zabbix 7.0 起,hybrid 模式(ProxyBufferMode=hybrid)适用于所有新安装。
其他参数,例如 ProxyMemoryBufferSize 和 ProxyMemoryBufferAge,分别定义内存缓冲区大小以及缓冲区中数据的最大保留时间。
请注意,如果配置存在冲突,proxy 将输出错误并启动失败,例如:
- ProxyBufferMode 设置为 "hybrid" 或 "memory",且 ProxyMemoryBufferSize 为 "0";
- ProxyBufferMode 设置为 "hybrid" 或 "memory",且 ProxyLocalBuffer 不为 "0"。
区域设置
请注意,proxy 需要 UTF-8 区域设置,以便某些文本监控项能够被正确解析。 大多数现代类 Unix 系统默认使用 UTF-8 区域设置,但在某些系统中,可能需要专门进行设置。
维护期间队列的计算
Zabbix proxy 不会感知维护期;详情请参见维护期间队列的计算。