Предварительная обработка значений элементов данных позволяет задать и выполнять правила преобразований для полученных значений элементов данных.
Предварительная обработка управляется процессом менеджером предобработки, который добавлен в Zabbix с 3.4 версии, вместе с “workers” препроцессорами, которые выполняют шаги предобработки. Все значения (с и без предобработкой) с различных сборщиков данных проходят через менеджера предобработки перед тем, как добавляются в кэш истории. Для связи между сборщиками данных (поллерами, трапперами и т.д.) и процессами предобработки используется межпроцессорное взаимодействие (IPC) на основе сокета. Шаги предварительной обработки выполняются Zabbix сервером или Zabbix прокси (по элементам данных, которые обрабатываются этим прокси).
Для визуализации потока данных от источника данных к базе данных Zabbix мы можем использовать следующую упрощённую диаграмму:
Диаграмма выше показывает только процессы, объекты и действия, которые связаны с предварительной обработкой значений элементов данных в упрощенной форме. Диаграмма не отображает изменения направлений при различных условиях, обработку ошибок или циклы. Локальный кэш данных в менеджере предобработки не отображается, так как он не влияет напрямую на поток данных. Целью этой диаграммы является отображение процессов, которые вовлечены в предобработку значений элементов данных, а также способ их взаимодействия.
Для визуализации процесса предобработки данных мы можем использовать следующую упрощенную диаграмму:
Диаграмма выше показывает только процессы, объекты и основные действия, которые связаны с предварительной обработкой значений элементов данных, в упрощенной форме. Диаграма не отображает изменения направлений при различных условиях, обработку ошибок или циклы. На диаграмме отображён только один “worker” предварительной обработки (в реальных сценариях могут использоваться несколько “workers” предобработки), обрабатывается только одно значение элемента днных и мы предполагаем, что этот элемент данных требует выполнения по крайней мере одного шага предварительной обработки. Цель этой диаграммы состоит в том, чтобы показать идею ниже потока предварительной обработки значения элемента данных.
Предварительная обработка значения элемента данных выполняется в несколько шагов (или фаз) несколькими процессами. Что может привести к:
UINT
, (можно использовать элемент данных траппер), у зависимого элемента данных тип значения TEXT
.В результате зависимый элемент данных получает значение, тогда как основной элемент данных меняет свое состояние на НЕПОДДЕРЖИВАЕТСЯ.
CHAR
, тогда значение основного элемента данных будет обрезано на стадии синхронизации истории, в то время как зависимые элементы данных получат свои значения с изначального (не обрезанного) значения основного элемента данных.Очередь предварительной обработки это FIFO структура данных, в которой хранятся значения в соответствии с порядком в которым эти значения получены менеджером предобработки. Существует несколько исключений логики FIFO:
Для визуализации логики очереди предобработки мы можем использовать следующую диаграмму:
Значения из очереди предобработки сбрасываются начиная с начала очереди до первого необработанного значения. Таким образом, пример, менеджер предобработки сбросит значения 1, 2 и 3, но не сбросит значение 5, так как значение 4 ещё не обработано:
После сброса в очереди останутся только два значения (4 и 5), значения добавляются в локальный кэш данных менеджера предобработки и, затем значения перемещаются из локального кэша в кэш истории. Менеджер предвариетельной обработки может сбросить значения из локального кэша данных в режиме одного элемента данных или в массовом режиме (используется для зависимых элементов данных и значений, которые получены массово).
Файл конфигурации Zabbix сервера позволяет пользователям указать количество процессов “worker” предварительной обработки. Необходимо использовать параметр конфигурации StartPreprocessors, чтобы задать количество экземпляров пре-форков “workers” предобработки. Оптимальное количество “workers” предобработки может определяться многими факторами, включая количество “нуждающихся в предобработке” элементов данных (элементов данных, которые требуют выполнение любых шагов предварительной обработки), количество процессов сбора данных, среднее количество шагов при предобработке и так далее.
Но, предполагая, что тяжелые операции предобработки отсутствуют, такие как разбор больших кусков XML / JSON, количество “worker” предобработки может совпадать с количеством сборщиков данных. Таким образом, будет по крайней мере один незанятый “worker” предобработки (за исключением случаев, когда данные от сборщиков поступают массово) для собранных данных.