Aplicar transformaciones automáticas a los datos antes de almacenarlos
No todo dato que llega está listo para usarse.
Algunos deben limpiarse, transformarse o interpretarse antes de que Zabbix los almacene o evalue con triggers.
Zabbix ofrece una pestaña específica llamada “Preprocessing” en cada ítem para aplicar transformaciones automáticas en tiempo real, sin necesidad de scripts externos.
Es fundamental para:
Normalizar formatos
Corregir datos brutos
Filtrar errores o vacíos
Preparar datos para triggers más precisos
GUI → Configuration → Hosts → Items
Editar un ítem (ej. cpu.load
)
Ir a la pestaña: “Preprocessing”
[Valor recibido] → [Preprocesamiento] → [Valor almacenado] → [Trigger o gráfico]
Zabbix no almacena el dato original, sino el resultado final después de aplicar los pasos de la cadena de preprocesamiento.
| Tipo | Descripción breve | Ejemplo operativo |
| ------------------------------------ | ------------------------------------------ | --------------------------------------------- |
| Custom multiplier | Multiplica por un valor fijo | Temperatura reportada en décimas (523 → 52.3) |
| Regular expression | Extrae parte del texto | Obtener código de error de log (ERR42
) |
| Replace/Trim | Reemplaza o recorta texto | Limpiar sufijos innecesarios ("ms", "%") |
| JSONPath / XML XPath | Extrae valor de estructuras JSON o XML | Obtener valor de "status": "ok"
|
| Check for not supported | Verifica si el valor recibido es válido | Evitar guardar null
, NaN
, timeout
|
| Discard unchanged with heartbeat | Evita guardar valores que no cambian | Disminuye espacio en DB y ruido visual |
| Prometheus pattern | Extrae valores de exposiciones Prometheus | Útil con endpoints tipo /metrics
|
| CSV to JSON | Convierte respuesta CSV en estructura JSON | Procesar salidas de sensores |
| JavaScript | Ejecuta lógica personalizada | Redondear, condicionar, aplicar lógica |
Puedes definir varios pasos consecutivos.
Zabbix procesará el dato en orden, paso por paso.
Ejemplo:
Trim right: " MB"
Custom multiplier: 1048576
Round: 0
→ Convierte "52 MB"
a 54525952
Valor recibido: 254
Significado: 25.4 °C
Acción: aplicar multiplicador 0.1
Preprocessing:
→ Custom multiplier: 0.1
{"status": "OK", "time": "2024-12-10T12:34:56Z"}
"status"
Preprocessing:
→ JSONPath: $.status
[WARN] Module XYZ failed: Code ERR32
ERR32
Preprocessing:
→ RegExp: ERR(\d+) → \1
| Síntoma | Causa probable | Solución |
| -------------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- |
| Ítem “not supported” tras activar preprocesamiento | Expresión mal formada o dato incompatible | Validar formato recibido con “Latest data” |
| Se guarda valor vacío (-
) | Extracción fallida o regex sin coincidencia | Usar Check for not supported
como paso previo |
| El valor no cambia, pero sigue almacenándose | No se activó Discard unchanged with heartbeat
| Agregarlo como último paso |
| JavaScript no funciona | Sintaxis incorrecta, sin return
explícito | Revisar consola de ejemplo, usar return
|
| Etapa | ¿Dónde se ve? | ¿Qué implica? |
| --------------- | ------------------------------------- | ----------------------------------------- |
| Valor original | En algunos casos con debugging/logs | Solo accesible internamente |
| Valor procesado | Latest data
y almacenado en base | Es el que se usa para triggers y gráficos |
| Valor mostrado | Puede tener Units visuales añadidos | No altera el valor real (solo apariencia) |
Todo valor que pasa por preprocesamiento puede perder su significado original si no se documenta bien.
Es recomendable anotar en las notas del ítem lo que hace cada paso de la cadena.
El operador puede identificar cuándo un ítem necesita preprocesamiento
Sabe configurar transformaciones comunes como multiplicadores o expresiones regulares
Conoce el orden y efecto de cada paso
Entiende la diferencia entre valor original, procesado y mostrado
Puede diagnosticar errores cuando el ítem se vuelve "not supported"