Этот раздел предоставляет подробности предобработки элементов данных. Предварительная обработка значений элементов данных позволяет задать и выполнять правила преобразований к полученным значениям элементов данных.
Предварительная обработка управляется процессом preprocessing manager (менеджер предобработки), вместе с процессами preprocessing worker (рабочими процессами предобработки), которые выполняют шаги предварительной обработки. Все значения (с и без наличия предварительной обработки) от различных сборщиков данных проходят через менеджер предобработки перед тем, как попасть в кэш истории. Для связи между сборщиками данных (поллерами, трапперами и т.д.) и процессами предварительной обработки используется взаимодействие между процессами (IPC) на основе сокета. Шаги предварительной обработки выполняются либо Zabbix сервером, либо Zabbix прокси (для элементов данных, которые наблюдаются через прокси).
Для визуализации потока данных от источника данных к базе данных Zabbix мы можем использовать следующую упрощённую диаграмму:
Диаграмма выше в упрощённой форме показывает только процессы, объекты и действия, которые связаны с предварительной обработкой значений элементов данных. Диаграмма не отображает изменения направлений при различных условиях, обработку ошибок или циклы. Локальный кэш данных в менеджере предобработки тоже не показан, так как он не влияет напрямую на поток данных. Цель этой диаграммы — показать процессы, вовлечённые в обработку значений элементов данных, а также способ их взаимодействия.
В процессе выполнения предварительной обработки элемент данных может изменить свое состояние на НЕ ПОДДЕРЖИВАЕТСЯ, если какой-либо шаг предварительной обработки завершается с ошибкой.
Элемент данных может изменить своё состояние на НЕ ПОДДЕРЖИВАЕТСЯ, если процесс нормализации завершится с ошибкой (например, когда текстовое значение не удалось преобразовать в число).
Предварительная обработка данных выполняется следующим образом:
Обратите внимание, что на диаграмме предварительная обработка основного элемента данных немного упрощена за счёт пропуска кэширования предварительной обработки.
Предварительная обработка значения элемента данных выполняется в несколько шагов (или фаз) несколькими процессами. Это может привести к тому, что:
UINT
(можно использовать элемент данных траппер), у зависимого элемента данных тип значения TEXT
.В результате зависимый элемент данных получает значение, тогда как основной элемент данных меняет свое состояние на НЕ ПОДДЕРЖИВАЕТСЯ.
CHAR
, то значение основного элемента данных будет усечено на стадии синхронизации истории, в то время как зависимые элементы данных получат свои значения с изначального (не усечённого) значения основного элемента данных.Очередь предварительной обработки организована следующим образом:
Кэширование предварительной обработки было введено для повышения производительности предварительной обработки для нескольких зависимых элементов данных, имеющих схожие шаги предварительной обработки (что является распространённым результатом LLD).
Кэширование выполняется путём предварительной обработки одного зависимого элемента данных и повторного использования некоторых внутренних данных предварительной обработки для остальных зависимых элементов данных. Кэширование предварительной обработки поддерживается только для первого шага предварительной обработки следующих типов:
[?(@.path == "значение")]
)Файл конфигурации Zabbix сервера позволяет пользователям указать количество потоков рабочих процессов предварительной обработки («preprocessing worker»). Параметр конфигурации StartPreprocessors следует использовать, чтобы задать количество экземпляров рабочих процессов предварительной обработки, которое должно как минимум соответствовать количеству доступных ядер CPU. Если задачи предварительной обработки не привязаны к CPU и включают частые сетевые запросы, рекомендуется настроить дополнительные рабочие процессы. Оптимальное количество рабочих процессов предварительной обработки может определяться многими факторами, включая количество «предобрабатываемых» элементов данных (элементов данных, требующих выполнения каких-либо шагов предварительной обработки), количество процессов сбора данных, среднее количество шагов для предварительной обработки элементов данных и так далее.
Но, предполагая, что тяжелые операции предварительной обработки (вроде разбора больших кусков XML/JSON) отсутствуют, количество процессов «preprocessing worker» может совпадать с количеством сборщиков данных. Таким образом, для полученных данных будет по крайней мере один незанятый рабочий процесс предварительной обработки (за исключением случаев, когда данные от сборщиков поступают массово).
Слишком большое количество процессов сбора данных (поллеров, поллеров недоступных устройств, ODBC и HTTP поллеров, Java поллеров, пингеров, трапперов, прокси поллеров) вместе с менеджером IPMI, SNMP траппером и рабочими процессами предобработки могут исчерпать ограничение количества файловых дескрипторов на процесс для менеджера предварительной обработки.
Исчерпание лимита дескрипторов файлов на процесс приведёт к останову Zabbix сервера (обычно вскоре после запуска, но иногда это может занять более длительное время). Чтобы избежать подобной ситуации, проанализируйте файл конфигурации Zabbix сервера, чтобы оптимизировать количество одновременных проверок и процессов. Кроме того, при необходимости путём проверки и настройки системных ограничений убедитесь, что лимит дескрипторов файлов установлен достаточно высоким.