Esta seção fornece detalhes de pré-processamento de valor de item. O pré-processamento de valor de item permite definir e executar regras de transformação para os valores de item recebidos.
O pré-processamento é gerenciado por um processo gerenciador de pré-processamento, o qual foi adicionado no Zabbix 3.4, junto com operadores de pré-processamento que executam as etapas de pré-processamento. Todos os valores (com ou sem pré-processamento) de diferentes coletores de dados passam através dos gerenciadores de pré-processamento antes de serem adicionados ao cache histórico. Comunicação IPC baseada em socket é usada entre os coletores de dados (pollers, trappers, etc.) e o processo de pré-processamento. Ou o Zabbix Server ou o Zabbix Proxy (para itens monitorados pelo proxy) está executando etapas de pré-processamento.
Para visualizar o fluxo de dados de sua origem para o banco de dados do Zabbix, nós podemos usar o seguinte diagrama simplificado:
O diagrama acima mostra apenas processos, objetos e ações relacionadas ao processamento do valor do item em uma forma simplificada. O diagrama não mostra mudanças de direção condicionais, manipulação de erros ou loops. O cache de dados local do gerenciador de pré-processamento também não é mostrado devido não afetar o fluxo de dados diretamente. O objetivo deste diagrama é mostrar os processos envolvidos no processamento de valor do item e o modo como eles interagem.
O item pode alterar seu estado para NÃO SUPORTADO enquanto o pré-processamento é executado se quaisquer etapas do pré-processamento falhar.
O item pode alterar seu estado para NÃO SUPORTADO se a normalização de dados falhar (por exemplo, quando um valor textual não pode ser convertido para número).
Para visualizar o processo de pré-processamento de dados, nós podemos usar o seguinte diagrama simplificado:
O diagrama acima mostra somente processos, objetos e ações principais relacionadas ao pré-processamento do valor do item em uma forma simplificada. O diagrama não mostra alterações de direção condicionais, manipulação de erro ou loops. Apenas um operador de pré-processamento é mostrado neste diagrama (múltiplos operadores de pré-processamento podem ser usados em cenários da vida real), apenas um valor de item está sendo processado e nós assumimos que este item requer a execução de ao menos uma etapa de pré-processamento. O objetivo deste diagrama é mostrar a ideia por detrás da diretiva de pré-processamento do valor do item.
O item pode ser colocado no fim ou no início da fila de pré-processamento. Os itens internos do Zabbix são sempre colocados no início da fila de pré-processamento, enquanto outros tipos de itens são enfileirados no fim.
O processamento de valor de item é executado em múltiplas etapas (ou fases) por múltiplos processos. Isto pode causar:
UINT
, (item trapper pode ser usado), item dependente tem tipo de valor TEXT
.Como resultado, o item dependente recebe um valor, enquanto o item principal altera seu estado para NÃO SUPORTADO.
CHAR
é usado para o item principal, então o valor do item principal será truncado na fase de sincronização do histórico, enquanto os itens dependentes receberão seu valor do valor inicial (não truncado) do item principal.A fila de pré-processamento é uma estrutura de dados FIFO (primeiro a entrar é o primeiro a sair) que armazena valores preservando a ordem na qual os valores são recebidos pelo gerenciador de pré-processamento. Há múltiplas exceções à lógica FIFO:
Para visualizar a lógica da fila de pré-processamento, nós podemos usar o seguinte diagrama:
Valores da fila de pré-processamento são liberados do início da fila para o primeiro valor não processado. Então, por exemplo, o gerenciador de pré-processamento liberará os valores 1, 2 e 3, mas não liberará o valor 5 pois o valor 4 ainda não foi processado:
Apenas dois valores serão deixados na fila (4 e 5) após a liberação, os valores são adicionados ao cache de dados local do gerenciador de pré-processamento e então os valores são transferidos do cache local para dentro do cache histórico. O gerenciador de pré-processamento pode liberar valores do cache de dados local no modo de item único ou no modo volume (usado para itens dependentes e valores recebidos em volume (bulk)).
O arquivo de configuração do Zabbix Server permite aos usuários definir o número de processos de operador de pré-processamento. O parâmetro de configuração StartPreprocessors deve ser usado para definir o número de instâncias paralelas (pre-forked) de operadores de pré-processamento. O número ideal de operadores de pré-processamento pode ser determinado por vários fatores, incluindo o número de itens "pré-processáveis" (itens que requerem a execução de quaisquer etapas de pré-processamento), número de processos de coleta de dados, média do número de etapas de pré-processamento para item, etc.
Mas assumindo que não há operações de pré-processamento pesadas como análise de grandes conjuntos XML / JSON, o número de operadores de pré-processamento pode corresponder ao número de coletores de dados. Deste modo, haverá na maioria das vezes (exceto para os casos quando os dados do coletor vierem em volume) ao menos um operador de pré-processamento desocupado para os dados coletados.
O excesso de processos de coleta de dados (pollers, pollers inalcançáveis, pollers ODBC, pollers HTTP, pollers Java, operadores de ping, trappers, pollers de proxy) junto com gerenciador IPMI, trapper SNMP e operadores de pré-processamento podem exaurir o limite de descritores de arquivo por processo para o gerenciador de pré-processamento. Isto causará a parada do Zabbix server (usualmente logo após o início, mas algumas vezes isto pode levar um pouco mais de tempo). O arquivo de configuração deve ser revisado ou o limite deve ser elevado para evitar esta situação.