1 Server

概述

Zabbix 服务器是 Zabbix 软件的核心进程。

服务器负责轮询和捕获数据,计算触发器,并向用户发送通知。
它是 Zabbix agent 和 proxy 上报系统可用性和完整性数据的中心组件。
服务器本身也可以使用简单的服务检查,远程检查网络服务(例如 Web 服务器和邮件服务器)。

服务器是存储所有配置、统计和运行数据的中央存储库,也是 Zabbix 中在任何受监控系统出现问题时会主动向管理员发出告警的实体。

基本 Zabbix 服务器的运行分为三个不同的组件;它们是:Zabbix 服务器、web 前端和数据库存储。

Zabbix 的所有配置信息都存储在数据库中,服务器和 web 前端都会与其交互。
例如,当你使用 web 前端(或 API)创建一个新的监控项时,它会被添加到数据库中的 items 表。
然后,大约每分钟一次,Zabbix 服务器会查询 items 表,获取处于活动状态的监控项列表,并将其存储在 Zabbix 服务器内部的缓存中。
这就是为什么在 Zabbix 前端中所做的任何更改,最多可能需要两分钟才会显示在最新数据部分。

服务进程

如果以软件包方式安装

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

systemctl start zabbix-server

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

/etc/init.d/zabbix-server start

类似地,如需停止/重启/查看状态,请使用以下命令:

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

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

zabbix_server

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

-c --config <file>              配置文件的路径(默认值为 /usr/local/etc/zabbix_server.conf)
-f --foreground                 在前台运行 Zabbix 服务器
-R --runtime-control <option>   执行管理功能
-T --test-config                验证配置文件并退出
-h --help                       显示此帮助
-V --version                    显示版本号

使用命令行参数运行 Zabbix 服务器的示例:

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

运行控制选项:

Option Description Target
config_cache_reload 重新加载配置缓存。如果缓存当前正在加载,则忽略。
history_cache_clear=target 清除由其 ID 指定的监控项的历史缓存。
会影响该监控项的所有值,除第一个和最后一个值外。
target - 监控项的 ID
diaginfo[=<section>] 在服务器日志文件中收集诊断信息。 historycache - 历史缓存统计信息;
valuecache - 值缓存统计信息;
preprocessing - 预处理管理器统计信息;
alerting - 告警管理器统计信息;
lld - LLD 管理器统计信息;
locks - 互斥锁列表(在 BSD 系统上为空);
connector - 队列最长的 connector 统计信息。
ha_status 记录高可用性(HA)集群状态。
ha_remove_node=target 删除由名称或 ID 指定的高可用性(HA)节点。
请注意,不能删除 active/standby 节点。
target - 节点的名称或 ID(可通过运行 ha_status 获取)。
ha_set_failover_delay=delay 设置高可用性(HA)故障切换延迟。
支持时间后缀,例如 10s、1m。
proxy_config_cache_reload[=<target>] 重新加载 proxy 配置缓存。 target - 以逗号分隔的 proxy 名称列表。
如果未指定 target,则重新加载所有 proxy 的配置。
secrets_reload 从 Vault 重新加载密钥。
service_cache_reload 重新加载服务管理器缓存。
snmp_cache_reload 重新加载 SNMP 缓存 — 清除所有主机的 SNMP 引擎属性(引擎时间、引擎启动次数、引擎 ID、凭据)。用于在排查 SNMP 问题时强制全局清除缓存。
housekeeper_execute 启动housekeeping 过程
如果 housekeeping 过程当前正在进行,则忽略。
trigger_housekeeper_execute 启动触发器housekeeping 过程
如果触发器 housekeeping 过程当前正在进行,则忽略。
log_level_increase[=<target>] 提高日志级别;如果未指定 target,则影响所有进程。
BSD 系统不支持。
process type - 指定类型的所有进程(例如 poller)。
参见所有服务器进程类型
process type,N - 进程类型和编号(例如 poller,3)。
pid - 进程标识符(165535)。对于更大的值,请将 target 指定为 'process type,N'。
log_level_decrease[=<target>] 降低日志级别;如果未指定 target,则影响所有进程。
BSD 系统不支持。
prof_enable[=<target>] 启用性能分析。
如果未指定 target,则影响所有进程。
启用性能分析后,可按函数名提供所有 rwlock/mutex 的详细信息。
process type - 指定类型的所有进程(例如 history syncer
支持作为性能分析目标的进程类型:alerteralert manageravailability managerconfiguration syncerdiscovery managerescalatorhistory pollerhistory syncerhousekeeperhttp pollericmp pingeripmi manageripmi pollerjava pollerlld managerlld workerodbc pollerpollerpreprocessing managerpreprocessing workerproxy pollerself-monitoringservice managersnmp trappertask managertimertrapperunreachable pollervmware collector
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)。
支持作为性能分析目标的进程类型:参见 prof_enable
process type,N - 进程类型和编号(例如 history syncer,1)。
pid - 进程标识符(165535)。对于更大的值,请将 target 指定为 'process type,N'。

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

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

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

# 重新加载所有 proxy 的配置:
zabbix_server -R proxy_config_cache_reload

# 重新加载 Proxy1 和 Proxy2 的配置:
zabbix_server -R proxy_config_cache_reload=Proxy1,Proxy2

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

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

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

# 在服务器日志文件中收集所有可用的诊断信息:
zabbix_server -R diaginfo

# 在服务器日志文件中收集历史缓存统计信息:
zabbix_server -R diaginfo=historycache

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

zabbix_server -R snmp_cache_reload

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

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

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

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

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

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

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

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

将 HA 故障切换延迟设置为最小值 10 秒的示例:

zabbix_server -R ha_set_failover_delay=10s
进程用户

Zabbix 服务器被设计为以非 root 用户身份运行。
它将以启动它时所使用的任意非 root 用户身份运行。
因此,您可以将服务器作为任意非 root 用户运行,而不会有任何问题。

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

如果 Zabbix 服务器和 agent 在同一台机器上运行,建议为服务器和 agent 使用不同的运行用户。
否则,如果两者以同一用户身份运行,agent 就可以访问服务器配置文件,而 Zabbix 中任何 Admin 级别的用户都可以相当容易地获取例如数据库密码等信息。

配置文件

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

启动脚本

这些脚本用于在系统启动/关闭期间自动启动/停止 Zabbix 进程。
这些脚本位于 misc/init.d 目录下。

服务器进程类型和线程

  • agent poller - 用于被动检查的异步轮询器进程,带有一个工作线程;
  • alert manager - 告警队列管理器;
  • alert syncer - 告警数据库写入器;
  • alerter - 用于发送通知的进程;
  • availability manager - 用于主机可用性更新的进程;
  • browser poller - 用于浏览器监控项检查的轮询器;
  • configuration syncer - 用于管理配置数据内存缓存的进程;
  • configuration syncer worker - 用于解析并同步监控项名称中的用户宏值的进程;
  • connector manager - 用于连接器的管理进程;
  • connector worker - 用于处理来自 connector manager 请求的进程;
  • discovery manager - 用于设备发现的管理进程;
  • discovery worker - 用于处理来自 discovery manager 的发现任务的进程;
  • escalator - 用于动作升级处理的进程;
  • ha manager - 用于管理高可用性的进程;
  • history poller - 用于处理需要数据库连接的计算检查的进程;
  • history syncer - 历史数据库写入器;
  • housekeeper - 用于删除过期数据(监控项历史和趋势、用户会话、事件等)以及已删除对象遗留数据的进程;
  • http agent poller - 用于 HTTP 检查的异步轮询器进程,带有一个工作线程;
  • http poller - Web 监控轮询器;
  • icmp pinger - 用于 icmpping 检查的轮询器;
  • internal poller - 用于内部检查的轮询器;
  • ipmi manager - IPMI 轮询器管理器;
  • ipmi poller - 用于 IPMI 检查的轮询器;
  • java poller - 用于 Java 检查的轮询器;
  • lld manager - 低级别发现任务的管理进程;
  • lld worker - 低级别发现任务的工作进程;
  • odbc poller - 用于 ODBC 检查的轮询器;
  • poller - 用于被动检查的普通轮询器;
  • preprocessing manager - 带有预处理工作线程的预处理任务管理器;
  • preprocessing worker - 数据预处理线程;
  • proxy poller - 用于被动 proxy 的轮询器;
  • proxy group manager - 用于 proxy 负载均衡和高可用性的管理器;
  • report manager- 定时报告生成任务的管理器;
  • report writer - 用于生成定时报告的进程;
  • self-monitoring - 用于收集服务器内部统计信息的进程;
  • service manager - 通过接收来自 history syncer、task manager 和 alert manager 的问题、问题标签以及问题恢复信息来管理服务的进程;
  • snmp poller - 用于 SNMP 检查的异步轮询器进程,带有一个工作线程(仅 walk[OID]get[OID] 监控项);
  • snmp trapper - 用于 SNMP trap 的 trapper;
  • task manager - 用于远程执行其他组件请求的任务的进程(例如,关闭问题、确认问题、立即检查监控项值、远程命令功能);
  • timer - 用于处理维护的定时器;
  • trapper - 用于主动检查、trap 和 proxy 通信的 trapper;
  • trigger housekeeper - 用于删除由已被删除的触发器生成的问题和事件的进程;
  • unreachable poller - 用于不可达设备的轮询器;
  • vmware collector - 负责从 VMware 服务收集数据的 VMware 数据收集器。

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

服务器日志文件以仅文件所有者可读写的权限创建。此外,该文件对所有者所属组可读。其他所有权限均被拒绝。

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

历史同步器事务统计

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

205182 ?        S      0:00  zabbix_server: history syncer #2 [processed 0 values, 0+0 triggers in 0.000021 (0.000000,0.000000,0.000000,0.000000,0.000000) sec, idle 1 sec]
205183 ?        S      0:00  zabbix_server: history syncer #3 [processed 18 values, 7+0 triggers in 0.002612 (0.001108,0.000000,0.000000,0.001208,0.000014) sec, idle 1 sec]
205184 ?        S      0:00  zabbix_server: history syncer #4 [processed 0 values, 0+0 triggers in 0.000027 (0.000000,0.000000,0.000000,0.000000,0.000000) sec, idle 1 sec]

在 “A+B triggers” 中:

  • A - 因历史值而处理的触发器;
  • B - 因定时器而处理的触发器。

processed...in N (<timings>) sec 中的各项耗时如下:

  • 将监控项值写入数据库所花费的时间;
  • 更新监控项数据(状态、错误、主机库存等)所花费的时间;
  • 将趋势数据刷新到数据库所花费的时间;
  • 计算触发器所花费的时间;
  • 处理事件和动作所花费的时间。
Housekeeping 过程

housekeeper 进程会定期删除过期数据(监控项历史和趋势、用户会话、事件等),以及已删除对象遗留的数据。 它按周期运行,其执行频率和每个周期的删除上限分别由 HousekeepingFrequencyMaxHousekeeperDelete 决定。 在一个周期中未删除的任何数据都会延续到下一个周期。 可在 Administration > Housekeeping 中启用并配置自动 housekeeping。

对于删除对象后遗留的数据清理,housekeeper 进程依赖于 housekeeper 表中的任务;该表会在对象被删除时填充。 例如,当你删除一个主机时,Zabbix 也会删除其监控项,但不会删除这些监控项的历史、趋势或问题。 相反,数据库触发器会将以下字段组成的任务填充到 housekeeper 表中:

  • housekeeperid - 任务 ID
  • object - 对象类型(0 - 监控项;1 - 触发器;2 - 服务;3 - 已发现主机;4 - 已发现服务)
  • objectid - 对象 ID(帮助 housekeeper 查找与对象相关的数据)

例如,删除一个包含两个监控项和一个触发器的主机后,housekeeper 表会填充如下:

+---------------+--------+----------+
| housekeeperid | object | objectid |
+---------------+--------+----------+
|             1 |      1 |    28724 |
|             2 |      0 |    59396 |
|             3 |      0 |    59397 |
+---------------+--------+----------+

数据库触发器在填充 housekeeper 表时不会检查是否存在与对象相关的数据;该检查由 housekeeper 进程完成。

每个任务都会根据对象类型触发一个或多个 housekeeper 操作:

  • 对于监控项(包括 LLD 规则)- 从所有包含这些监控项值的历史和趋势表(historyhistory_strhistory_loghistory_uinthistory_texthistory_binhistory_jsontrendstrends_uint)中删除数据。 同时,还会检查 problems 表,并删除与这些监控项相关的过期内部事件。

  • 对于触发器 - 检查与事件相关的表(problemevent_symptomevent_recoveryevents),删除与这些触发器相关的过期事件,并通知 service manager 进程已删除的事件。

单独的 trigger housekeeper 进程负责一个更窄的任务——删除没有已知源触发器的问题和事件。 其运行频率由 ProblemHousekeepingFrequency 控制。

在触发器 housekeeping 过程启动之前,由已被删除的触发器引起的问题仍可能生成服务问题并将其分配给服务。如果你的环境中有许多基于频繁发现/取消发现触发器的服务状态计算规则,请考虑通过调整服务器配置参数 ProblemHousekeepingFrequency 来提高 housekeeping 过程的频率。

  • 对于服务 - 检查 problems 表并删除过期的服务事件,以及过期的服务问题,从而在 housekeeping 时将其解决。

  • 对于网络发现 - 从 problems 表中删除过期的发现事件。

housekeeper 只会删除那些未与问题关联的事件。 例如,如果一个过期的问题/恢复事件与一个未关闭的问题相关联,则不会被删除。 当 housekeeper 删除过期实体时,会先删除问题,再删除事件。

使用 partition 模式(TimescaleDB 分区表)的表会被跳过;仅处理使用 regular 模式的表。

支持的平台

由于服务器运行对安全性的要求以及其任务关键型特性,只有 UNIX 操作系统才能持续提供所需的性能、容错能力和弹性。 Zabbix 可运行于市场主流版本之上。

Zabbix 服务器已在以下平台上进行测试:

  • Linux
  • Solaris
  • AIX
  • HP-UX
  • Mac OS X
  • FreeBSD
  • OpenBSD
  • NetBSD
  • SCO Open Server

Zabbix 也可能在其他类 Unix 操作系统上运行。

区域设置

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