Этот раздел предоставляет подробности предобработки элементов данных. Предварительная обработка значений элементов данных позволяет задать и выполнять правила преобразований к полученным значениям элементов данных.
Предварительная обработка управляется процессом preprocessing manager (менеджер предобработки), который добавлен в Zabbix 3.4, вместе с процессами preprocessing worker (рабочими процессами предобработки), которые выполняют шаги предварительной обработки. Все значения (с и без наличия предварительной обработки) от различных сборщиков данных проходят через менеджера предобработки перед тем, как попасть в кэш истории. Для связи между сборщиками данных (поллерами, трапперами и т.д.) и процессами предварительной обработки используется взаимодействие между процессами (IPC) на основе сокета. Шаги предварительной обработки выполняются либо Zabbix сервером, либо Zabbix прокси (для элементов данных, которые наблюдаются через прокси).
Для визуализации потока данных от источника данных к базе данных Zabbix мы можем использовать следующую упрощённую диаграмму:
Диаграмма выше показывает только процессы, объекты и действия, которые связаны с предварительной обработкой значений элементов данных в упрощенной форме. Диаграмма не отображает изменения направлений при различных условиях, обработку ошибок или циклы. Локальный кэш данных в менеджере предобработки тоже не показан, так как он не влияет напрямую на поток данных. Цель этой диаграммы - показать процессы, вовлеченные в обработку значений элементов данных, а также способ их взаимодействия.
Элемент данных может изменить свое состояние на НЕ ПОДДЕРЖИВАЕТСЯ в процессе выполнения предварительной обработки, если какой-либо шаг предварительной обработки завершается с ошибкой.
Элемент данных может изменить своё состояние на НЕ ПОДДЕРЖИВАЕТСЯ, если процесс нормализации завершится с ошибкой (например, когда текстовое значение не удалось преобразовать в число).
Для визуализации процесса предобработки данных мы можем использовать следующую упрощённую диаграмму:
Диаграмма выше показывает только процессы, объекты и основные действия, связанные с предварительной обработкой значений элементов данных, в упрощенной форме. Диаграмма не отображает изменения направлений при различных условиях, обработку ошибок или циклы. На диаграмме показан только один рабочий процесс ("preprocessing worker") предварительной обработки (в реальных сценариях могут использоваться несколько таких процессов), обрабатывается только одно значение элемента данных и мы предполагаем, что этот элемент данных требует выполнения по крайней мере одного шага предварительной обработки. Цель этой диаграммы — показать идею конвейера предварительной обработки значений элемента данных.
Элементы данных могут помещаться в конец и начало очереди предварительной обработки. Внутренние элементы данных Zabbix всегда помещаются в начало очереди предварительной обработки, тогда как другие элементы данных помещаются в конец.
Предварительная обработка значения элемента данных выполняется в несколько шагов (или фаз) несколькими процессами. Это может привести к тому, что:
В результате зависимый элемент данных получает значение, тогда как основной элемент данных меняет свое состояние на НЕ ПОДДЕРЖИВАЕТСЯ.
CHAR
, то значение основного элемента данных будет усечено на стадии синхронизации истории, в то время как зависимые элементы данных получат свои значения с изначального (не усеченного) значения основного элемента данных.Очередь предварительной обработки - это структура данных FIFO, где накопленные значения сохраняют порядок, в котором они получены менеджером предварительной обработки. Существует несколько исключений логики FIFO:
Для визуализации логики очереди предварительной обработки мы можем использовать следующую диаграмму:
Значения из очереди предварительной обработки сбрасываются, начиная с начала очереди до первого необработанного значения. Таким образом, к примеру, менеджер предварительной обработки сбросит значения 1, 2 и 3, но не сбросит значение 5, так как значение 4 ещё не обработано:
После сброса в очереди останутся только два значения (4 и 5), значения добавляются в локальный кэш данных менеджера предварительной обработки, и затем значения перемещаются из локального кэша в кэш истории. Менеджер предварительной обработки может сбросить значения из локального кэша данных в режиме одного элемента данных или в массовом режиме (используется для зависимых элементов данных и значений, которые получены массово).
Preprocessing caching was introduced to improve the preprocessing performance for multiple dependent items having similar preprocessing steps (which is a common LLD outcome).
Caching is done by preprocessing one dependent item and reusing some of the internal preprocessing data for the rest of the dependent items. The preprocessing cache is supported only for the first preprocessing step of the following types:
[?(@.path == "value")]
)Файл конфигурации Zabbix сервера позволяет пользователям указать количество рабочих процессов предварительной обработки ("preprocessing worker"). Чтобы задать количество экземпляров рабочих процессов предварительной обработки, нужно использовать параметр конфигурации StartPreprocessors. Оптимальное количество рабочих процессов предварительной обработки может определяться многими факторами, включая количество "предобрабатываемых" элементов данных (элементов данных, требующих выполнения каких-либо шагов предварительной обработки), количество процессов сбора данных, среднее количество шагов для предварительной обработки и так далее.
Но, предполагая, что тяжелые операции предварительной обработки (вроде разбора больших кусков XML / JSON) отсутствуют, количество процессов "preprocessing worker" может совпадать с количеством сборщиков данных. Таким образом, для полученных данных будет по крайней мере один незанятый рабочий процесс предварительной обработки (за исключением случаев, когда данные от сборщиков поступают массово).
Слишком большое количество процессов сбора данных (поллеров, поллеров недоступных устройств, ODBC и HTTP поллеров, Java поллеров, пингеров, трапперов, прокси поллеров) всесте с менеджером IPMI, SNMP траппером и рабочими процессами предобработки могут исчерпать ограничение количества файловых дескрипторов на процесс для менеджера предварительной обработки. Это приведёт к останову Zabbix сервера (обычно вскоре после запуска, но иногда это может занять более длительное время). Чтобы избежать подобной ситуации, файл конфигурации необходимо пересмотреть или лимит должен быть увеличен.