Preprocesamiento del valor del item

Resumen

El preprocesamiento le permite aplicar transformaciones a los valores de item recibidos antes de guardarlos en la base de datos. Estas transformaciones/pasos de preprocesamiento son realizados por el server o el proxy de Zabbix (si los items son monitorizados por proxy).

Esta función admite diversos casos de uso, como:

  • convertir bytes a bits (por ejemplo, multiplicando los valores de tráfico de red por "8");
  • calcular estadísticas por segundo para valores que aumentan de forma incremental;
  • aplicar expresiones regulares para extraer o modificar valores;
  • ejecutar scripts personalizados sobre los valores;
  • descartar valores sin cambios para optimizar el almacenamiento en la base de datos.

Se puede configurar uno o varios pasos de preprocesamiento para un item. Estos pasos se ejecutan en el orden en que están configurados.

Si falla un paso de preprocesamiento, un item pasa a ser no soportado. Esto puede evitarse mediante el manejo de errores Custom on fail (disponible para la mayoría de las transformaciones), que permite descartar valores o establecer valores personalizados.

Para los items de log, los metadatos del log (sin valor) siempre restablecerán el estado de no soportado del item, haciendo que vuelva a estar soportado. Esto sucede incluso si el error inicial ocurrió después de recibir un valor de log desde agent.

Todos los valores pasados al preprocesamiento se tratan inicialmente como cadenas. La conversión al tipo de valor deseado (tal como se define en la configuración del item) se realiza al final de la canalización de preprocesamiento. Sin embargo, algunos pasos específicos de preprocesamiento pueden activar conversiones antes, si es necesario. Para obtener información técnica detallada, consulte Detalles del preprocesamiento.

Para asegurarse de que su configuración de preprocesamiento funcione como se espera, puede probarla.

Vea también: Ejemplos de preprocesamiento

Configuración

Los pasos de preprocesamiento se definen en la pestaña Preprocesamiento del formulario de configuración del item.

Haga clic en Añadir para seleccionar una transformación compatible.

El campo Tipo de información se muestra en la parte inferior de la pestaña cuando se define al menos un paso de preprocesamiento. Si es necesario, es posible cambiar el tipo de información sin salir de la pestaña Preprocesamiento. Consulte Creación de un item para obtener una descripción detallada de los parámetros.

Transformaciones compatibles

Todas las transformaciones compatibles se enumeran a continuación.
Haga clic en el nombre de una transformación para consultar todos sus detalles.

Nombre Descripción Tipo
Expresión regular Compara el valor con la expresión regular y lo reemplaza por el resultado requerido. Texto
Reemplazar Busca la cadena de búsqueda y la reemplaza por otra cadena (o por nada).
Recortar Elimina los caracteres especificados del principio y del final del valor.
Recortar por la derecha Elimina los caracteres especificados del final del valor.
Recortar por la izquierda Elimina los caracteres especificados del principio del valor.
XML XPath Extrae un valor o fragmento de datos XML mediante la funcionalidad XPath. Datos estructurados
Ruta JSON Extrae un valor o fragmento de JSON mediante la funcionalidad JSONPath.
CSV a JSON Convierte los datos de un archivo CSV al formato JSON.
XML a JSON Convierte los datos en formato XML a JSON.
Valor de SNMP walk Extrae un valor mediante el nombre de OID/MIB especificado y aplica opciones de formato. SNMP
SNMP walk a JSON Convierte los valores SNMP a JSON.
Obtener valor de SNMP Aplica opciones de formato al valor obtenido mediante SNMP.
Multiplicador personalizado Multiplica el valor por el valor entero o de coma flotante especificado. Aritmética
Cambio simple Calcula la diferencia entre el valor actual y el anterior. Cambio
Cambio por segundo Calcula la velocidad de cambio del valor (la diferencia entre el valor actual y el anterior) por segundo.
Booleano a decimal Convierte el valor del formato booleano al formato decimal. Sistemas numéricos
Octal a decimal Convierte el valor del formato octal al formato decimal.
Hexadecimal a decimal Convierte el valor del formato hexadecimal al formato decimal.
JavaScript Introduce código JavaScript. Scripts personalizados
En rango Define un rango en el que debe encontrarse el valor. Validación
Coincide con una expresión regular Especifica una expresión regular con la que debe coincidir el valor.
No coincide con una expresión regular Especifica una expresión regular con la que no debe coincidir el valor.
Comprobar si hay un error en JSON Comprueba si hay un mensaje de error a nivel de aplicación ubicado en JSONPath.
Comprobar si hay un error en XML Comprueba si hay un mensaje de error a nivel de aplicación ubicado en XPath.
Comprobar si hay un error mediante una expresión regular Comprueba si hay un mensaje de error a nivel de aplicación mediante una expresión regular.
Comprobar si hay un valor no compatible Comprueba si no se pudo recuperar ningún valor del item.
Descartar si no ha cambiado Descarta un valor si no ha cambiado. Limitación
Descartar si no ha cambiado con latido Descarta un valor si no ha cambiado durante el período definido.
Patrón de Prometheus Utiliza la siguiente consulta para extraer los datos requeridos de las métricas de Prometheus. Prometheus
Prometheus a JSON Convierte las métricas de Prometheus requeridas a JSON.

Si la casilla Personalizado en caso de error está habilitada para la transformación seleccionada, puede marcarla y especificar opciones personalizadas para el manejo de errores: Descartar valor (descartar el valor), Establecer valor en (establecer un valor especificado) o Establecer error en (establecer un mensaje de error especificado).
Si falla un paso de preprocesamiento, el item no pasará a ser no compatible cuando se seleccione la opción Descartar valor o Establecer valor en.

Tenga en cuenta que, para los pasos de preprocesamiento Cambio y Limitación, Zabbix debe recordar el último valor para calcular o comparar el nuevo valor según sea necesario.
Estos valores anteriores son gestionados por el administrador de preprocesamiento.
Si se reinicia Zabbix server o proxy, o se realiza cualquier cambio en los pasos de preprocesamiento, se restablece el último valor del item correspondiente, lo que da como resultado:

  • para los pasos Cambio simple y Cambio por segundo: se ignorará el siguiente valor porque no existe un valor anterior a partir del cual calcular el cambio;
  • para los pasos Descartar si no ha cambiado y Descartar si no ha cambiado con latido: el siguiente valor nunca se descartará, aunque debería haberse descartado según las reglas de descarte.
Expresión regular

Compara el valor con la expresión regular y lo reemplaza por el resultado requerido.

Parámetros:

  • pattern - la expresión regular;
  • output - la plantilla de formato de salida. Una secuencia de escape \N (donde N=1…9) se reemplaza por el grupo coincidente N. Una secuencia de escape \0 se reemplaza por el texto coincidente.

Comentarios:

  • Si no se encuentra ninguna coincidencia con el valor de entrada, el item dejará de ser compatible;
  • La expresión regular admite la extracción de un máximo de 10 grupos capturados mediante la secuencia \N;
  • Consulte la sección expresiones regulares para ver algunos ejemplos existentes.
Reemplazar

Busca la cadena de búsqueda y la reemplaza por otra (o por nada).

Parámetros:

  • cadena de búsqueda: la cadena a buscar y reemplazar, distingue entre mayúsculas y minúsculas (obligatorio);
  • reemplazo: la cadena por la que se reemplazará la cadena de búsqueda. La cadena de reemplazo también puede estar vacía, lo que permite eliminar la cadena de búsqueda cuando se encuentra.

Comentarios:

  • Se reemplazarán todas las apariciones de la cadena de búsqueda;
  • Es posible utilizar secuencias de escape para buscar o reemplazar saltos de línea, retorno de carro, tabulaciones y espacios "\n \r \t \s"; la barra invertida se puede escapar como "\\" y las secuencias de escape se pueden escapar como "\\n";
  • El escape de saltos de línea, retorno de carro y tabulaciones se realiza automáticamente durante el descubrimiento de bajo nivel.
Recortar

Elimina los caracteres especificados del principio y final del valor.

Recorte derecho

Elimina los caracteres especificados del final del valor.

Recorte izquierdo

Elimina los caracteres especificados del principio del valor.

XML XPath

Extrae un valor o fragmento de datos XML mediante la funcionalidad XPath.

Comentarios:

  • Para que esta opción funcione, el server de Zabbix (o el proxy de Zabbix) debe estar compilado con compatibilidad con libxml;
  • No se admiten espacios de nombres.

Ejemplos:

number(/document/item/value) #extraerá '10' de <document><item><value>10</value></item></document>
number(/document/item/@attribute) #extraerá '10' de <document><item attribute="10"></item></document>
/document/item #extraerá '<item><value>10</value></item>' de <document><item><value>10</value></item></document>
JSON Path

Extrae un valor o fragmento de datos JSON mediante la funcionalidad JSONPath.

CSV a JSON

Convierta los datos de un archivo CSV al formato JSON.

Para más información, consulte: Preprocesamiento de CSV a JSON.

XML a JSON

Convierte los datos del formato XML a JSON.

Para obtener más información, consulta: Reglas de serialización.

Valor de SNMP walk

Extrae el valor mediante el OID/nombre MIB especificado y aplica las opciones de formato:

  • Sin cambios: devuelve la cadena hexadecimal como una cadena hexadecimal sin escape (nota: las sugerencias de visualización se siguen aplicando);
  • UTF-8 desde hex-STRING: convierte la cadena hexadecimal en una cadena UTF-8;
  • MAC desde hex-STRING: valida la cadena hexadecimal como una dirección MAC y devuelve una cadena de dirección MAC adecuada (donde ' ' se reemplaza por ':');
  • Entero desde BITS: convierte los primeros 8 bytes de una cadena de bits expresada como una secuencia de caracteres hexadecimales (por ejemplo, "1A 2B 3C 4D") en un entero sin signo de 64 bits. En las cadenas de bits de más de 8 bytes, los bytes posteriores se ignorarán.
SNMP walk a JSON

Convierte los valores SNMP a JSON.

Especifique un nombre de campo en el JSON y la ruta OID SNMP correspondiente.
Los valores de los campos se completarán con los valores de la ruta OID SNMP especificada.

Comentarios:

  • Hay disponibles opciones de formato de valores similares a las del paso Valor de SNMP walk;
  • Puede utilizar este paso de preprocesamiento para el descubrimiento de OID SNMP.
Obtener valor SNMP

Aplicar opciones de formato al valor obtenido mediante SNMP:

  • UTF-8 desde Hex-STRING: convierte la cadena hexadecimal en una cadena UTF-8;
  • MAC desde Hex-STRING: valida la cadena hexadecimal como una dirección MAC y devuelve una cadena de dirección MAC válida (donde ' ' se reemplaza por ':');
  • Entero desde BITS: convierte los primeros 8 bytes de una cadena de bits expresada como una secuencia de caracteres hexadecimales (por ejemplo, "1A 2B 3C 4D") en un entero sin signo de 64 bits. En las cadenas de bits de más de 8 bytes, los bytes posteriores se ignorarán.
Multiplicador personalizado

Multiplica el valor por el valor entero o de coma flotante especificado.

Comentarios:

  • Utilice esta opción para convertir los valores recibidos en KB, MBps, etc., a B, Bps. De lo contrario, Zabbix no podrá establecer correctamente los prefijos (K, M, G, etc.).
  • Tenga en cuenta que, si el tipo de información del item es Numeric (unsigned), los valores entrantes con una parte fraccionaria se truncarán (es decir, '0.9' se convertirá en '0') antes de aplicar el multiplicador personalizado;
  • Si utiliza un multiplicador personalizado o almacena el valor como Change per second para items cuyo tipo de información está establecido en Numeric (unsigned) y el valor calculado resultante es en realidad un número de coma flotante, el valor calculado seguirá aceptándose como correcto al truncar la parte decimal y almacenar el valor como un entero;
  • Compatible con: notación científica, por ejemplo, 1e+70; macros de usuario y macros de LLD; cadenas que incluyen macros, por ejemplo, {#MACRO}e+10, {$MACRO1}e+{$MACRO2}. Las macros deben resolverse en un número entero o de coma flotante.
Cambio simple

Calcula la diferencia entre el valor actual y el anterior.

Comentarios:

  • Este paso puede ser útil para medir un valor que aumenta constantemente;
  • Se evalúa como value-prev_value, donde value es el valor actual y prev_value es el valor recibido anteriormente;
  • Solo se permite una operación de cambio por item ("Cambio simple" o "Cambio por segundo");
  • Si el valor actual es menor que el valor anterior, Zabbix descarta esa diferencia (no almacena nada) y espera otro valor.
Cambio por segundo

Calcula la velocidad de cambio del valor (la diferencia entre el valor actual y el anterior) por segundo.

Comentarios:

  • Este paso resulta útil para calcular la velocidad por segundo de un valor que aumenta constantemente;
  • Como este cálculo puede producir números de punto flotante, se recomienda establecer el 'Tipo de información' en Numérico (flotante), incluso si los valores sin procesar recibidos son enteros. Esto es especialmente relevante para números pequeños en los que la parte decimal es importante. Si los valores de punto flotante son grandes y pueden superar la longitud del campo 'float', en cuyo caso se puede perder el valor completo, se recomienda utilizar Numérico (sin signo) y recortar únicamente la parte decimal;
  • Se evalúa como (value-prev_value)/(time-prev_time), donde value es el valor actual; prev_value es el valor recibido anteriormente; time es la marca de tiempo actual; prev_time es la marca de tiempo del valor anterior;
  • Solo se permite una operación de cambio por item ("Cambio simple" o "Cambio por segundo");
  • Si el valor actual es menor que el anterior, Zabbix descarta esa diferencia (no almacena nada) y espera otro valor. Esto permite trabajar correctamente, por ejemplo, con el desbordamiento de contadores SNMP de 32 bits.
Booleano a decimal

Convierte el valor del formato booleano a decimal.

Comentarios:

  • La representación textual se convierte en 0 o 1. Por lo tanto, 'TRUE' se almacena como 1 y 'FALSE' se almacena como 0. Todos los valores se comparan sin distinguir entre mayúsculas y minúsculas. Actualmente, los valores reconocidos son, para TRUE: true, t, yes, y, on, up, running, enabled, available, ok, master; para FALSE: false, f, no, n, off, down, unused, disabled, unavailable, err, slave. Además, cualquier valor numérico distinto de cero se considera TRUE y cero se considera FALSE.
Octal a decimal

Convierte el valor del formato octal a decimal.

Hexadecimal a decimal

Convierte el valor del formato hexadecimal a decimal.

JavaScript

Introduzca el código JavaScript en el editor modal que se abre al hacer clic en el campo del parámetro o en el icono de lápiz junto a él.

No utilice asignaciones no declaradas en el JavaScript de preprocesamiento. Utilice var para declarar variables locales.

Comentarios:

En el rango

Defina un rango en el que debe encontrarse un valor especificando los valores mínimo y máximo (inclusive).

Comentarios:

  • Se aceptan valores numéricos (incluido cualquier número de dígitos, una parte decimal opcional y una parte exponencial opcional, así como valores negativos);
  • El valor mínimo debe ser menor que el máximo;
  • Debe existir al menos un valor;
  • Se pueden utilizar macros de usuario y macros de descubrimiento de bajo nivel.
Coincide con la expresión regular

Especifique una expresión regular con la que debe coincidir un valor.

No coincide con la expresión regular

Especifique una expresión regular con la que el valor no debe coincidir.

Comprobar si hay un error en JSON

Comprueba si hay un mensaje de error a nivel de aplicación ubicado en JSONPath.
Detén el procesamiento si la comprobación se realiza correctamente y el mensaje no está vacío; de lo contrario, continúa el procesamiento con el valor que tenía antes de este paso de preprocesamiento.

Comentarios:

  • Estos errores del servicio externo se muestran al usuario tal cual, sin añadir información sobre el paso de preprocesamiento;
  • No se notificará ningún error si no se puede analizar un JSON no válido.
Comprobar si hay un error en XML

Comprueba si hay un mensaje de error a nivel de aplicación ubicado en XPath.
Detén el procesamiento si la comprobación se realiza correctamente y el mensaje no está vacío; de lo contrario, continúa el procesamiento con el valor que tenía antes de este paso de preprocesamiento.

Comentarios:

  • Estos errores del servicio externo se muestran al usuario tal cual, sin añadir información sobre el paso de preprocesamiento;
  • No se notificará ningún error si no se puede analizar XML no válido.
Comprobar si hay un error mediante una expresión regular

Comprueba si hay un mensaje de error a nivel de aplicación mediante una expresión regular.
Detiene el procesamiento si tiene éxito y el mensaje no está vacío; de lo contrario, continúa el procesamiento con el valor que había antes de este paso de preprocesamiento.

Parámetros:

  • pattern: la expresión regular;
  • output: la plantilla de formato de salida.
    Una secuencia de escape \N (donde N=1…9) se sustituye por el grupo coincidente N.
    Una secuencia de escape \0 se sustituye por el texto coincidente.

Comentarios:

  • Estos errores del servicio externo se muestran al usuario tal cual, sin añadir información sobre el paso de preprocesamiento.
Comprobar si el valor no es compatible

Comprueba si no se pudo recuperar ningún valor del item. Especifique cómo debe procesarse el error, según el análisis del mensaje de error devuelto.

Parámetros:

  • scope: seleccione el ámbito del procesamiento de errores:
    any error: cualquier error;
    error matches: solo el error que coincida con la expresión regular especificada en pattern;
    error does not match: solo el error que no coincida con la expresión regular especificada en pattern
  • pattern: la expresión regular con la que se comparará el error. Si se selecciona any error en el parámetro de ámbito, este campo no se muestra. Si se muestra, este campo es obligatorio.

Comentarios:

  • Normalmente, la ausencia de un valor o la imposibilidad de recuperarlo haría que el item dejara de ser compatible. Este paso de preprocesamiento permite modificar este comportamiento.
  • Este paso de preprocesamiento solo comprueba si no se pudo recuperar ningún valor del item. No comprueba, por ejemplo, si el tipo del valor recuperado (p. ej., una cadena) coincide con el tipo de información del item (p. ej., numérico); para obtener más información, consulte Ejemplos de preprocesamiento. Si hay una discrepancia de tipos, el item aún puede dejar de ser compatible después de ejecutar todos los pasos de preprocesamiento. Para comprobar si hay una discrepancia de tipos, puede utilizar, por ejemplo, el paso de preprocesamiento Custom multiplier; consulte Ejemplos de preprocesamiento.
  • Se admiten grupos de expresiones regulares de captura en los campos Set value to o Set error to. Use \N (donde N=1…9) para recuperar el grupo coincidente N; use \0 para recuperar el texto coincidente;
  • Estos pasos siempre se ejecutan como los primeros pasos de preprocesamiento y se colocan por encima de todos los demás después de guardar los cambios en el item;
  • Se admiten varios pasos de Check for not supported value, en el orden especificado. Un paso para any error se colocará automáticamente como el último paso de este grupo.
Descartar sin cambios

Descartar un valor si no ha cambiado.

Comentarios:

  • Si se descarta un valor, no se guarda en la base de datos y el servidor Zabbix no tiene conocimiento de que se recibió ese valor. No se evaluarán expresiones de disparadores, por lo tanto, no se crearán/solucionarán problemas para los disparadores relacionados. Las funciones solo funcionarán en base a los datos que realmente se guarden en la base de datos. Como las tendencias se construyen en base a los datos de la base de datos, si no se guarda ningún valor durante una hora, tampoco habrá datos de tendencias para esa hora.
  • Solo se puede especificar una opción de limitación por elemento.
Descartar valores sin cambios con latido

Descarta un valor si no ha cambiado durante el período definido (en segundos).

Comentarios:

  • Se admiten valores enteros positivos para especificar los segundos (mínimo: 1 segundo);
  • Se pueden utilizar sufijos de tiempo (por ejemplo, 30s, 1m, 2h, 1d);
  • Se pueden utilizar macros de usuario y macros de descubrimiento de bajo nivel;
  • Si se descarta un valor, no se guarda en la base de datos y el server de Zabbix no tiene conocimiento de que se haya recibido este valor. No se evaluarán expresiones de trigger y, como resultado, no se crearán ni resolverán problemas para los triggers relacionados. Las funciones solo funcionarán en función de los datos que realmente se hayan guardado en la base de datos. Dado que las tendencias se generan a partir de los datos de la base de datos, si no se guarda ningún valor durante una hora, tampoco habrá datos de tendencias para esa hora.
  • Solo se puede especificar una opción de limitación por item.
Patrón de Prometheus

Use la siguiente consulta para extraer los datos requeridos de las métricas de Prometheus.

Consulte Prometheus checks para obtener más detalles.

Prometheus a JSON

Convierte las métricas de Prometheus requeridas a JSON.

Consulta Prometheus checks para más detalles.

Soporte de macros

Se admiten macros de usuario y macros de usuario con contexto en:

  • parámetros de pasos de preprocesamiento, incluido el código JavaScript;
  • parámetros personalizados de manejo de errores (campos Establecer valor en y Establecer error en).

El contexto de la macro se ignora cuando una macro se reemplaza por su valor. El valor de la macro se inserta en el código tal cual, no es posible agregar un escape adicional antes de colocar el valor en el código JavaScript. Tenga en cuenta que esto puede causar errores de JavaScript en algunos casos.

Pruebas

Consulte pruebas de preprocesamiento.