本节提供监控项值预处理的详细信息。监控项值预处理允许定义和执行转换规则,用于接收的监控项值。
预处理由预处理管理器进程管理,预处理工作者执行预处理步骤。 所有值(经过预处理或未经预处理)从不同的数据收集器传递到预处理管理器,然后再添加到历史缓存中。数据收集器(轮询程序、捕获器等)和预处理进程之间使用基于套接字的 IPC 通信。无论是 Zabbix server还是 Zabbix proxy(对于由proxy 监视的监控项)都执行预处理步骤。
为了可视化从数据源到 Zabbix 数据库的数据流,我们可以使用下面的简化图:
上图仅以简化形式显示了与监控项值处理相关的流程、对象和操作。 该图没有显示有条件的方向变化、错误处理或循环。 预处理管理器的本地数据缓存也没有显示,因为它不直接影响数据流。 此图的目的是显示监控项价值处理中涉及的流程及其交互方式。
如果任何预处理步骤失败,则在执行预处理时,监控项可以将其状态更改为不支持。
如果数据规范化失败(例如,当文本值无法转换为数字时),监控项可以将其状态更改为不支持。
数据预处理按以下步骤进行:
请注意,在图表中,主监控项的预处理略有简化,跳过了预处理缓存的步骤。
监控项值处理分多个步骤(或阶段)在多个进程中执行。 这可能导致:
UINT
,(可以使用陷阱监控项),依赖项具有值类型TEXT
。因此,依赖项收到一个值,而主要监控项状态将变为不支持。
CHAR
类型,则主要监控项值将在历史同步阶段被截断,而依赖项将从主要监控项的初始(未截断)值接收它们的值。预处理队列组织如下:
预处理缓存被引入,以改善具有相似预处理步骤的多个依赖监控项(这是常见的LLD结果)的预处理性能。
通过对一个依赖监控项进行预处理,并重用一些内部预处理数据,来为其余的依赖监控项提供缓存。预处理缓存仅支持以下类型的第一个预处理步骤:
[?(@.path == "value")]
)Zabbix server 配置文件允许用户设置预处理工作进程的数量。StartPreprocessors配置参数应用于设置预处理进程的预分配实例数。 预处理进程的最佳数量可以由许多因素决定,包括“可预处理”监控项(需要执行任何预处理步骤的监控项)的数量、数据收集过程的数量、监控项预处理的平均步骤数等。
但是假设没有像解析大型 XML/JSON 块这样的繁重的预处理操作,预处理进程的数量可以匹配数据收集器的总数。 这样,大多数情况下(除了来自收集器的数据大量进入的情况)至少有一个空闲的预处理进程来处理收集的数据。
太多的数据收集进程(轮询器、无法访问的轮询器、ODBC 轮询器、HTTP 轮询器、Java 轮询器、pingers、陷阱器、代理轮询器)连同 IPMI 管理器、SNMP 陷阱器和预处理进程可能会耗尽预处理管理器的每个进程的文件描述符限制。 这将导致 Zabbix server停止(通常在启动后不久,但有时可能需要更多时间)。 应修改配置文件或提高限制以避免出现这种情况。