2 Detalles de preprocesamiento

Descripción general

Esta sección proporciona detalles del preprocesamiento del valor del item. El valor del item El preprocesamiento permite definir y ejecutar transformación reglas para los valores de los elementos recibidos.

El preprocesamiento lo gestiona el proceso del administrador de preprocesamiento junto con los trabajadores de preprocesamiento que realizan los pasos de preprocesamiento. Todos los valores (con o sin preprocesamiento) de diferentes recolectores de datos pasan por el administrador de preprocesamiento antes se agrega al caché del historial. Se utiliza comunicación IPC basada en sockets. entre los recolectores de datos (encuestadores, tramperos, etc.) y el preprocesamiento proceso. Ya sea el servidor Zabbix o el proxy Zabbix (para los elementos monitoreados por el proxy) realiza los pasos de preprocesamiento.métricamétrica

Procesamiento del valor de la métrica

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

El diagrama anterior muestra solo procesos, objetos y acciones relacionados con el procesamiento del valor de la métrica en forma simplificada. El diagrama no muestra cambios de dirección condicionales, manejo de errores o bucles. La caché de datos locales del administrador de preprocesamiento tampoco se muestra porque no afecta directamente el flujo de datos. El objetivo de este diagrama es mostrar los procesos. involucrados en el procesamiento del valor de la métrica 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 (pueden ser múltiples valores también)
  • No importa qué tipo de recolector de datos se utilice, la idea es la misma para controles activos o pasivos, para métricas de captura, etc., ya que solo cambia el formato de datos y el iniciador de comunicación (tanto el recolector de datos que está esperando una conexión y datos, o el recolector de datos que inicia la comunicación y solicita los datos). Los datos brutos son validados, la configuración de la métrica 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 datos desde los recolectores de datos al responsable 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 procesamiento de métricas dependientes.

Una métrica puede cambiar su estado a NO SOPORTADA mientras se realiza el preprocesamiento si alguno de los pasos de preprocesamiento falla.

  • Los datos históricos de la caché de datos local del administrador de preprocesamiento se descargan en la caché del historial.
  • En este punto el flujo de datos se detiene hasta la próxima sincronización de 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 los datos antes de almacenarlos. en la base de datos Zabbix. La normalización de datos realiza conversiones al tipo de métrica deseado (tipo definido en la configuración de la métrica), incluido el truncamiento de datos textuales basado en tamaños predefinidos permitidos para esos tipos (HISTORY_STR_VALUE_LEN para cadena, HISTORY_TEXT_VALUE_LEN para texto e HISTORY_LOG_VALUE_LEN para valores de registro). Los datos se envían a la base de datos de Zabbix después de que la normalización está hecha.

Una métrica puede cambiar su estado a NO SOPORTADA si falla la normalización de datos (por ejemplo, cuando un valor textual no se puede convertir a número).

  • Los datos recopilados se están procesando - se verifican los iniciadores, la configuración de la métrica se actualiza si la métrica pasa a ser NO SOPORTADA, etc.
  • Esto se considera el final del flujo de datos desde el punto de vista de procesamiento del valor de la métrica.

Preprocesamiento del valor de la métrica

El preprocesamiento de datos se realiza en los siguientes pasos:

  • El valor de la métrica se pasa al gestor de preprocesamiento mediante un mecanismo IPC basado en socket UNIX.
  • Si la métrica no tiene preprocesamiento ni métricas dependientes, su valor se agrega a la caché del historial o se envía al administrador de LLD. De lo contrario:
    • Se crea una tarea de preprocesamiento y se agrega 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 la ejecución fallida o exitosa de los pasos de preprocesamiento), el valor preprocesado se agrega a la cola de tareas terminadas y se notifica al gestor sobre una nueva tarea terminada.
    • El gestor de preprocesamiento convierte el resultado al formato deseado (definido por el tipo de valor de la métrica) y lo agrega a la caché del historial o lo envía al administrador de LLD.
    • Si hay métricas dependientes para la métrica procesada, las métricas dependientes se agregan a la cola de preprocesamiento con el valor de la métrica principal preprocesado. Las métricas dependientes se ponen en cola sin pasar por las solicitudes de preprocesamiento de valor normal, pero solo para las métricas principales con el valor establecido y no en un estado NO SOPORTADA.

Tenga en cuenta que el diagrama el preprocesamiento de la métrica principal se simplifica ligeramente al omitir el almacenamiento en caché del preprocesamiento.

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.

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 el recuento de subprocesos de trabajo de preprocesamiento. El parámetro de configuración StartPreprocessors debe usarse para establecer el número de instancias iniciadas previamente de trabajadores de preprocesamiento. El número óptimo de trabajadores de preprocesamiento puede ser determinado por muchos factores, incluido el recuento de métricas "preprocesables" (métricas que requieren ejecutar algún paso de preprocesamiento), el recuento de procesos de recopilación de datos, el recuento promedio de pasos para el preprocesamiento de métricas, etc.

Pero suponiendo que no haya operaciones de preprocesamiento pesadas, como analizar grandes fragmentos XML/JSON, la cantidad de trabajadores de preprocesamiento puede coincidir con la cantidad total de recolectores de datos. De esta manera, en la mayoría de los casos (excepto en los casos en que los datos del recopilador llegan en masa) 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, tramppers, proxypollers) junto con el administrador IPMI, el capturador SNMP y los trabajadores de preprocesamiento pueden agotar el límite de descriptores de archivos por proceso para el administrador de preprocesamiento.

Agotar el límite de descriptores de archivos por proceso hará que el servidor Zabbix se detenga, generalmente poco después del inicio, pero a veces demora más. Para evitar tales problemas, revise el archivo de configuración del servidor Zabbix para optimizar la cantidad de comprobaciones y procesos simultáneos. Además, si es necesario, asegúrese de que el límite del descriptor de archivo esté establecido lo suficientemente alto verificando y ajustando los límites del sistema.