host → agente → proxy → server → base de datos
Comprender en profundidad el recorrido completo de un dato monitoreado, desde que se genera en un host hasta que se almacena en la base de datos de Zabbix.
El operador debe poder:
Trazar cada paso y componente involucrado
Detectar posibles puntos de falla o pérdida
Entender la implicación técnica de cada eslabón en términos de latencia, buffering, confiabilidad y rendimiento
En Zabbix, una alerta no nace sola.
Antes de que algo aparezca en la GUI, ese valor tuvo que atravesar una cadena de componentes perfectamente sincronizados.
Entender el canal de datos no solo permite resolver problemas.
Permite prevenirlos.
┌────────────┐ ┌────────────┐ ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐
│ HOST │ --> │ AGENTE │ --> │ PROXY (op) │ --> │ SERVER │ --> │ BASE DE DATOS │
└────────────┘ └────────────┘ └──────────────┘ └──────────────┘ └─────────────────┘
Puede ser una máquina física, una VM, un contenedor, un switch, una app en cloud, etc.
Aquí ocurre el evento real: sube la CPU, se llena el disco, falla un proceso.
🧠 No todos los hosts tienen agente. Algunos se monitorean vía SNMP, ping, HTTP, etc.
Instancia instalada localmente que recoge datos del sistema operativo.
Responde a consultas pasivas (zabbix_get
) o empuja datos en modo activo.
Ejecuta comandos internos (system.cpu.util
, vfs.fs.size
, net.tcp.listen
, etc.)
Preprocesa datos si es necesario (unit conversion, regex, etc.)
Si no hay agente, la recolección se hace por otros métodos (SNMP, SSH, ICMP, JMX, etc.)
Recibe datos del agente si el host fue asignado al proxy.
Puede actuar como poller local (modo pasivo) o recibir push (modo activo).
Almacena temporalmente los datos en base local (SQLite o MySQL).
Envía lotes de datos al Server cada X segundos.
Si pierde conexión con el Server, retiene los datos en buffer hasta que pueda reenviar.
Un proxy puede almacenar días enteros de información si está correctamente configurado.
Procesa los datos entrantes.
Evalúa triggers, genera eventos si es necesario.
Ejecuta acciones si un evento lo requiere.
Inserta los datos en la base de datos:
* history_uint
→ enteros (uso de CPU, RAM libre, etc.)
* history_float
→ decimales (temperaturas, carga promedio, etc.)
* history_str
→ cadenas cortas (estado de servicio, outputs de comandos)
* history_text
→ textos largos (logs, descripciones)
* history_log
→ datos de tipo log con timestamps
Cada ítem tiene un tipo de valor que determina dónde se almacena y cómo se visualiza.
Es el repositorio central de todo lo que ha ocurrido en Zabbix.
Aquí se guardan:
* Valores recolectados (history)
* Promedios por hora (trends)
* Eventos, triggers, usuarios, configuraciones, dashboards, mapas, etc.
🧠 La base de datos es el corazón de la persistencia: si se corrompe o satura, Zabbix se degrada o se vuelve inoperante.
El servidor
app01
tiene su CPU al 97% desde hace 3 minutos.
app01
: Proceso java
consume 5 cores → sistema operativo lo registra.
system.cpu.util[,user]
= 97.2
El agente lo envía al Proxy asignado (ej. proxy-norte-01
)
/var/lib/zabbix/proxy_history.db
)Luego, cuando tiene conexión, lo reenvía al Server.
last(/app01/system.cpu.util[,user]) > 90
Como se cumple, genera un evento y lanza una acción.
Simultáneamente, el valor crudo se guarda en la base de datos en history_float
Minutos después, se agregará a trends
como promedio horario.
| Punto de fallo | Riesgo | Solución operativa |
| ---------------------------------- | -------------------------------------------------------- | ----------------------------------------------- |
| Agente no responde | El host parece “activo”, pero no recolecta | Verificar proceso, logs, firewall |
| Proxy sin conexión | Datos retenidos, posibles retrasos o truncamiento | Monitorear buffer y conexión |
| Proxy sin espacio local | SQLite/MySQL local se satura → se pierden datos antiguos | Aumentar almacenamiento o exportar |
| Server sobrecargado | Recibe datos tarde o no ejecuta triggers en tiempo | Monitorear pollers, history syncer, housekeeper |
| Base de datos saturada | Las inserciones fallan → se pierden datos o eventos | Indexar, particionar, usar compresión |
| Hora del sistema desincronizada | Dato llega con timestamp inválido → fuera de rango | Sincronizar todos los relojes con NTP |
*“Cada alerta que vemos es la punta del iceberg.
Debajo, hay una red de procesos, buffers, conexiones y transformaciones que deben mantenerse sanas.
Una alerta confiable solo es posible si todo el canal de datos funciona sin errores.”*
El operador puede trazar el recorrido de un dato
Identifica qué parte del sistema debe revisarse cuando no llegan valores
Comprende la función e interdependencia entre agente, proxy, server y base
Sabe que el monitoreo también necesita ser monitoreado