Esta página incluye contenido traducido automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

2 Detalles de preprocesamiento

Descripción general

Esta sección proporciona detalles sobre el preprocesamiento de valores de ítems. El preprocesamiento de valores de ítems permite definir y ejecutar reglas de transformación para los valores de ítems recibidos.

El preprocesamiento es gestionado por el proceso del gestor de preprocesamiento junto con los trabajadores de preprocesamiento que realizan los pasos de preprocesamiento. Todos los valores con preprocesamiento (antes de Zabbix 7.0.17, todos los valores), recibidos de diferentes recolectores de datos, pasan por el gestor de preprocesamiento antes de ser añadidos a la caché de historial. Se utiliza comunicación IPC basada en sockets entre los recolectores de datos (pollers, trappers, etc.) y el proceso de preprocesamiento. Tanto el servidor Zabbix como el proxy Zabbix (para los ítems monitorizados por el proxy) realizan los pasos de preprocesamiento.

Procesamiento del valor del item

Para visualizar el flujo de datos desde la fuente de datos hasta la base de datos de Zabbix, podemos utilizar el siguiente diagrama simplificado:

El diagrama anterior muestra solo los procesos, objetos y acciones relacionados con el procesamiento del valor del item en forma simplificada. El diagrama no muestra cambios condicionales de dirección, manejo de errores o bucles. Tampoco se muestra la caché de datos local del gestor de preprocesamiento porque no afecta directamente al flujo de datos. El objetivo de este diagrama es mostrar los procesos involucrados en el procesamiento del valor del item y la forma en que interactúan.

  • La recopilación de datos comienza con datos sin procesar de una fuente de datos. En este punto, los datos contienen solo ID, marca de tiempo y valor (también pueden ser múltiples valores).
  • No importa qué tipo de recolector de datos se utilice, la idea es la misma para comprobaciones activas o pasivas, para items trapper, etc., ya que solo cambia el formato de los datos y el iniciador de la comunicación (ya sea que el recolector de datos esté esperando una conexión y datos, o el recolector de datos inicie la comunicación y solicite los datos). Los datos sin procesar se validan, la configuración del item se recupera de la caché de configuración (los datos se enriquecen con los datos de configuración).
  • Se utiliza un mecanismo IPC basado en sockets para pasar los datos de los recolectores de datos al gestor de preprocesamiento. En este punto, el recolector de datos continúa recopilando datos sin esperar la respuesta del gestor de preprocesamiento.
  • Se realiza el preprocesamiento de datos. Esto incluye la ejecución de pasos de preprocesamiento y el procesamiento de items dependientes.

Un item puede cambiar su estado a NO SOPORTADO mientras se realiza el preprocesamiento si alguno de los pasos de preprocesamiento falla.

  • Los datos históricos de la caché de datos local del gestor de preprocesamiento se vacían en la caché de historial.
  • En este punto, el flujo de datos se detiene hasta la siguiente sincronización de la caché de historial (cuando el proceso de sincronización de historial realiza la sincronización de datos).
  • El proceso de sincronización comienza con la normalización de datos antes de almacenar los datos en la base de datos de Zabbix. La normalización de datos realiza conversiones al tipo de item deseado (tipo definido en la configuración del item), incluida la truncación de datos textuales según los tamaños predefinidos permitidos para esos tipos (HISTORY_STR_VALUE_LEN para string, HISTORY_TEXT_VALUE_LEN para text y HISTORY_LOG_VALUE_LEN para valores de log). Los datos se envían a la base de datos de Zabbix después de que se completa la normalización.

Un item puede cambiar su estado a NO SOPORTADO si la normalización de datos falla (por ejemplo, cuando un valor textual no se puede convertir a número).

  • Los datos recopilados se procesan: se comprueban los triggers, se actualiza la configuración del item si el item pasa a NO SOPORTADO, etc.
  • Esto se considera el final del flujo de datos desde el punto de vista del procesamiento del valor del item.

Preprocesamiento del valor del ítem

El preprocesamiento de datos se realiza en los siguientes pasos:

  • Si el ítem no tiene preprocesamiento ni ítems dependientes, su valor se agrega a la caché de historial o se envía al gestor de LLD. De lo contrario, el valor del ítem se pasa al gestor de preprocesamiento utilizando un mecanismo IPC basado en sockets UNIX (antes de Zabbix 7.0.17, todos los valores se pasan a través del gestor de preprocesamiento antes de agregarse a la caché de historial o enviarse al gestor de LLD).
  • Se crea una tarea de preprocesamiento y se añade a la cola, y se notifica a los trabajadores de preprocesamiento sobre la nueva tarea.
  • En este punto, el flujo de datos se detiene hasta que haya al menos un trabajador de preprocesamiento desocupado (es decir, que no esté ejecutando ninguna tarea).
  • Cuando un trabajador de preprocesamiento está disponible, toma la siguiente tarea de la cola.
  • Una vez finalizado el preprocesamiento (tanto si la ejecución de los pasos de preprocesamiento falla como si tiene éxito), el valor preprocesado se añade a la cola de tareas finalizadas y se notifica al gestor sobre una nueva tarea finalizada.
  • El gestor de preprocesamiento convierte el resultado al formato deseado (definido por el tipo de valor del ítem) y lo agrega a la caché de historial o lo envía al gestor de LLD.
  • Si hay ítems dependientes para el ítem procesado, entonces los ítems dependientes se agregan a la cola de preprocesamiento con el valor preprocesado del ítem maestro. Los ítems dependientes se ponen en cola omitiendo las solicitudes normales de preprocesamiento de valores, pero solo para ítems maestros con el valor establecido y que no estén en estado NO SOPORTADO.

Tenga en cuenta que en el diagrama el preprocesamiento del ítem maestro está ligeramente simplificado al omitir la caché de preprocesamiento.

Cola de preprocesamiento

La cola de preprocesamiento está organizada como:

  • la lista de tareas pendientes:
    • tareas creadas directamente a partir de solicitudes de preprocesamiento de valor en el orden en que fueron recibidas.
  • la lista de tareas inmediatas (procesadas antes de las tareas pendientes):
    • tareas de comprobación (creadas en respuesta a solicitudes de comprobación de métricas/preprocesamiento por parte del frontend)
    • tareas de métricas dependientes
    • tareas de secuencia (tareas que deben ejecutarse en un orden estricto):
      • tener pasos de preprocesamiento utilizando el último valor:
        • cambiar
        • throttling
        • JavaScript (almacenamiento en caché de código de bytes)
      • almacenamiento en caché de preprocesamiento de métricas dependientes
  • la lista de tareas terminadas

Almacenamiento en caché de preprocesamiento

El almacenamiento en caché del preprocesamiento se introdujo para mejorar el rendimiento del preprocesamiento de múltiples métricas dependientes que tienen pasos de preprocesamiento similares (que es un resultado LLD común).

El almacenamiento en caché se realiza preprocesando una métrica dependiente y reutilizando algunos de los datos de preprocesamiento interno para el resto de las métricas dependientes. La caché de preprocesamiento solo se admite para el primer paso de preprocesamiento de los siguientes tipos:

  • Patrón Prometheus (índices ingresados por métricas)
  • JSONPath (analiza los datos en el árbol de objetos e indexa la primera expresión [?(@.path == "value")])

Trabajadores de preprocesamiento

El archivo de configuración del servidor Zabbix permite a los usuarios establecer la cantidad de hilos de trabajo de preprocesamiento. El parámetro de configuración StartPreprocessors debe utilizarse para definir el número de instancias preiniciadas de trabajadores de preprocesamiento, que al menos debe coincidir con el número de núcleos de CPU disponibles.

Si las tareas de preprocesamiento no están limitadas por la CPU e implican solicitudes de red frecuentes, se recomienda configurar trabajadores adicionales. El número óptimo de trabajadores de preprocesamiento puede determinarse por muchos factores, incluyendo la cantidad de elementos "preprocesables" (elementos que requieren ejecutar cualquier paso de preprocesamiento), la cantidad de procesos de recopilación de datos, el número promedio de pasos para el preprocesamiento de elementos, etc. Un número insuficiente de trabajadores puede llevar a un alto uso de memoria. Para solucionar el uso excesivo de memoria en su instalación de Zabbix, consulte Perfilado del uso excesivo de memoria con tcmalloc.

Pero suponiendo que no haya operaciones de preprocesamiento pesadas como el análisis de grandes fragmentos XML/JSON, el número de trabajadores de preprocesamiento puede coincidir con el número total de recolectores de datos. De este modo, en la mayoría de los casos (excepto cuando los datos del recolector llegan en bloque) habrá al menos un trabajador de preprocesamiento desocupado para los datos recopilados.

Demasiados procesos de recopilación de datos (sondeadores, sondeadores inalcanzables, sondeadores ODBC, sondeadores HTTP, sondeadores Java, pingers, trappers, proxypollers) junto con el gestor IPMI, el receptor SNMP y los trabajadores de preprocesamiento pueden agotar el límite de descriptores de archivos por proceso para el gestor de preprocesamiento.

Agotar el límite de descriptores de archivos por proceso hará que el servidor Zabbix se detenga, normalmente poco después del inicio, aunque a veces puede tardar más. Para evitar estos problemas, revise el archivo de configuración del servidor Zabbix para optimizar el número de comprobaciones y procesos concurrentes. Además, si es necesario, asegúrese de que el límite de descriptores de archivos esté configurado lo suficientemente alto comprobando y ajustando los límites del sistema.

Canal de procesamiento de valor

El procesamiento del valor del artículo se ejecuta en múltiples pasos (o fases) mediante múltiples procesos. Esto puede causar:

  • Un artículo dependiente puede recibir valores, mientras que EL valor maestro no. Esto se puede lograr mediante el siguiente caso de uso:
    • El elemento maestro tiene el tipo de valor "UINT" (se puede usar el elemento trampero), El elemento dependiente tiene el tipo de valor "TEXTO".
    • No se requieren pasos de preprocesamiento tanto para el maestro como para el elementos dependientes.
    • El valor textual (por ejemplo, "abc") debe pasarse al elemento maestro.
    • Como no hay pasos de preprocesamiento que ejecutar, el preprocesamiento El administrador verifica si el elemento maestro no está en estado NO SOPORTADO y si se establece el valor (ambos son verdaderos) y pone en cola el elemento dependiente con el mismo valor que el elemento maestro (ya que no hay preprocesamiento pasos).
    • Cuando tanto los elementos maestros como los dependientes llegan al historial fase de sincronización, el elemento maestro pasa a ser NO SOPORTADO debido al error de conversión de valor (los datos textuales no pueden ser convertido a entero sin signo).

Como resultado, el artículo dependiente recibe un valor, mientras que el artículo maestro cambia su estado es NO SOPORTADO.

  • Un artículo dependiente recibe un valor que no está presente en el artículo maestro. historia. El caso de uso es muy similar al anterior, excepto para el tipo de elemento maestro. Por ejemplo, si se utiliza el tipo "CHAR" para elemento maestro, entonces el valor del elemento maestro se truncará en el historial fase de sincronización, mientras que los elementos dependientes recibirán su valores del valor inicial (no truncado) del elemento maestro.