4 Proxy

概述

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

部署 proxy 是可选的,但可以非常有助于分担单个 Zabbix server 的负载。
如果只有 proxies 来收集数据,服务器上的处理将减少对 CPU 和磁盘 I/O 的需求。

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

Zabbix proxy 需要一个单独的数据库。

请注意,Zabbix proxy 支持的数据库包括 SQLite、MySQL 和 PostgreSQL。
使用 Oracle 是在您自担风险的情况下进行的,并可能存在某些限制,例如在低级别自动发现规则的 概述 中。

另请参阅:Using proxies in a distributed environment

运行 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>              path to the configuration file
       -f --foreground                 run Zabbix proxy in foreground
       -R --runtime-control <option>   perform administrative functions
       -T --test-config                validate configuration file and exit
       -h --help                       give this help
       -V --version                    display version number

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

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

运行时控制选项:

选项 描述 目标
config_cache_reload 重新加载configuration cache。若缓存正在加载则忽略此操作。
主动式Zabbix proxy将连接Zabbix server并请求配置数据。
被动式Zabbix proxy将在服务器下次连接proxy时向Zabbix server请求配置数据。
diaginfo[=<section>] 在proxy日志file中收集诊断信息。 historycache - history cache统计信息
preprocessing - 预处理管理器统计信息
locks - 互斥锁列表(在BSD系统上为空)
snmp_cache_reload 重新加载SNMP缓存 — 为所有主机clearSNMP引擎属性(引擎时间、引擎启动次数、引擎ID、凭据)。用于在排查SNMP问题时强制全局缓存clear。
housekeeper_execute 启动管家程序。若管家程序正在运行则忽略此操作。
log_level_increase[=<target>] 提高日志级别,若未指定目标则影响所有进程。
BSD系统不支持此功能。
process type - 指定类型的所有进程(如poller)
查看所有proxy进程类型
process type,N - 进程类型及编号(如poller,3)
pid - 进程标识符(1至65535)。对于更大值需指定为'process type,N'格式。
log_level_decrease[=<target>] 降低日志级别,若未指定目标则影响所有进程。
BSD系统不支持此功能。
prof_enable[=<target>] 启用性能分析。
若未指定目标则影响所有进程。
启用后可按函数名提供所有读写锁/互斥锁的详细信息。
process type - 指定类型的所有进程(如history syncer)
查看所有proxy进程类型
process type,N - 进程类型及编号(如history syncer,1)
pid - 进程标识符(1至65535)。对于更大值需指定为'process type,N'格式。
scope - 可搭配进程类型和编号使用rwlockmutexprocessing(如history syncer,1,processing),或搭配类型所有进程使用(如history syncer,rwlock)
prof_disable[=<target>] 禁用性能分析。
若未指定目标则影响所有进程。
process type - 指定类型的所有进程(如history syncer)
查看所有proxy进程类型
process type,N - 进程类型及编号(如history syncer,1)
pid - 进程标识符(1至65535)。对于更大值需指定为'process type,N'格式。

使用运行时控制重新加载proxyconfiguration cache的示例:

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

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

# Gather all available diagnostic information in the proxy log file:
       zabbix_proxy -R diaginfo
       
       # Gather history cache statistics in the proxy log file:
       zabbix_proxy -R diaginfo=historycache

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

zabbix_proxy -R snmp_cache_reload

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

使用运行时控制触发管家程序执行的示例:

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

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

# Increase log level of all processes:
       zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R log_level_increase
       
       # Increase log level of second poller process:
       zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R log_level_increase=poller,2
       
       # Increase log level of process with PID 1234:
       zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R log_level_increase=1234
       
       # Decrease log level of all http poller processes:
       zabbix_proxy -c /usr/local/etc/zabbix_proxy.conf -R log_level_decrease="http poller"
进程用户

Zabbix proxy 被设计为以非 root 用户身份运行 run。 它将以任何非root用户身份启动时的身份run。 因此,您可以以任何非 root 用户身份执行 run proxy,而无需任何 问题。

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

配置文件

有关配置 zabbix_proxy 的详细信息,请参见 configuration file 选项。

Proxy 进程类型与线程

  • agent poller - 用于被动检查的异步轮询进程,带有工作线程
  • availability manager - 用于主机可用性更新的进程
  • browser poller - 浏览器监控项检查的轮询器
  • configuration syncer - 管理配置数据的 in-memory 缓存的进程
  • data sender - proxy 数据发送器
  • discovery manager - 设备发现的管理进程
  • discovery worker - 处理来自发现管理器的发现任务的进程
  • history syncer - 历史数据库写入器
  • housekeeper - 删除旧历史数据的进程
  • http agent poller - 用于 HTTP 检查的异步轮询进程,带有工作线程
  • http poller - 网络监控轮询器
  • 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 陷阱的接收器
  • task manager - 执行其他组件请求的任务的远程执行进程(例如,关闭问题、acknowledge问题、立即检查监控项值、远程命令功能)
  • trapper - 主动检查、陷阱、proxy通信的接收器
  • unreachable poller - 不可达设备的轮询器
  • vmware collector - 负责从 VMware 服务收集数据的 VMware 数据收集器

proxy 日志 file 可用于观察这些进程类型。

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

支持平台

Zabbix proxy 与 Zabbix server 运行在相同的 支持平台 列表上。

内存缓冲区

memory 缓冲区允许将新数据(监控项值、网络发现、主机 自动注册)存储在缓冲区中,并上传到 Zabbix server,而无需访问数据库。
memory 缓冲区自 Zabbix 7.0 起引入用于 proxy。

在 Zabbix 7.0 之前的安装中,收集的数据在上传到 Zabbix server 之前存储在数据库中。
对于这些安装,默认行为在升级到 Zabbix 7.0 后保持不变。

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

在 hybrid 模式下,如果 proxy 停止、缓冲区已满或数据过旧,未发送的数据将被刷新到数据库,从而保护数据不丢失。
当所有值都被刷新到数据库后,proxy 将重新使用 memory 缓冲区。

在 memory 模式下,将使用 memory 缓冲区,但无法防止数据丢失。
如果 proxy 停止或 memory 缓冲区溢出,未发送的数据将被丢弃。

自 Zabbix 7.0 起,所有新安装均采用 hybrid 模式(ProxyBufferMode=hybrid)。

其他参数如 proxymemorybuffersizeproxymemorybufferage 分别定义了 memory 缓冲区的大小以及缓冲区中数据的最大保留时间。

注意:如果配置冲突,proxy 将打印错误并无法启动,例如:

  • ProxyBufferMode 设置为 "hybrid" 或 "memory",而 ProxyMemoryBufferSize 为 "0";
  • ProxyBufferMode 设置为 "hybrid" 或 "memory",而 ProxyLocalBuffer 不为 "0"。

区域设置

请注意,proxy需要一个UTF-8的区域设置,以便某些文本监控项可以被正确解释。
大多数现代类Unix系统默认使用UTF-8的区域设置,但也有某些系统可能需要特别设置。

维护期间队列计算

Zabbix proxy 不了解维护周期;详细信息请参见 维护期间队列计算