📦 Zabbix Template: Port Monitoring LLD
Template para monitorizar de forma dinámica una lista de puertos TCP definida por macro de host. Usa Low Level Discovery (LLD) para crear automáticamente ítems y triggers por cada puerto configurado.
🚀 Características
- Dinámico: agrega o elimina puertos editando la macro
{$PORTS}del host. - Multiplataforma: incluye UserParameters para Linux y Windows.
- Eficiente: el discovery corre cada 1 hora por defecto; los ítems de escucha se consultan cada 30 segundos.
- Seguro ante entradas inválidas: los UserParameters solo descubren puertos numéricos entre
1y65535. - Alertas: dispara una alerta de severidad alta si un puerto deja de escuchar durante más de 2 minutos.
✅ Requisitos
| Sistema | Requisito |
|---|---|
| Zabbix | Zabbix 7.0 o superior |
| Linux | Zabbix Agent y python3 |
| Windows | Zabbix Agent 2 y PowerShell |
| Red | El servidor/proxy Zabbix debe poder consultar checks pasivos del agente |
✅ Compatibilidad probada
Probado en entorno controlado con Zabbix 7.0.26 en hosts Windows y Linux.
🛠️ 1. Configuración en los hosts
Para que el discovery funcione, cada agente necesita el UserParameter port.discovery[*].
Windows — Zabbix Agent 2
-
Crea o edita este archivo:
C:\Program Files\Zabbix Agent 2\zabbix_agent2.d\plugins.d\ports.conf -
Copiá el contenido de
ports_win.confen ese archivo. -
Reiniciá el servicio Zabbix Agent 2.
Linux — Zabbix Agent
-
Crea o edita este archivo:
/etc/zabbix/zabbix_agentd.d/ports.conf -
Copia el contenido de
ports_linux.confen ese archivo. -
Reiniciá el servicio:
sudo systemctl restart zabbix-agent
📥 2. Importación del template
- Descarga o clona este repositorio.
- En Zabbix, entra en Data collection > Templates.
- Haz clic en Import.
- Selecciona
port_monitoring_template.yaml. - Vincula el template Port Monitoring LLD a tus hosts.
⚙️ 3. Configuración de macros
Una vez vinculado el template al host, definí o heredá esta macro:
| Macro | Valor de ejemplo | Descripción |
|---|---|---|
{$PORTS} |
21,22,80,443,3389 |
Lista de puertos separados por coma. Solo se descubren valores numéricos entre 1 y 65535. |
Los valores inválidos, vacíos o fuera de rango se ignoran durante el discovery.
🔍 4. Verificación
Prueba que el agente responda con el JSON LLD esperado.
Windows PowerShell
Desde el directorio donde está zabbix_agent2.exe:
.\zabbix_agent2.exe -t 'port.discovery["21,22,80,443,3389"]'
Linux
zabbix_get -s 127.0.0.1 -k 'port.discovery["21,22,80,443,3389"]'
Resultado esperado:
{"data":[{"{#PORT}":"21"},{"{#PORT}":"22"},{"{#PORT}":"80"},{"{#PORT}":"443"},{"{#PORT}":"3389"}]}
📊 Estructura del template
| Componente | Valor |
|---|---|
| Discovery rule | Port discovery |
| Discovery key | port.discovery["{$PORTS}"] |
| Item prototype | Port {#PORT} listening |
| Item key | net.tcp.listen[{#PORT}] |
| Trigger prototype | Puerto {#PORT} caído en {HOST.NAME} |
| Severidad | High |
Si agregás un puerto nuevo a la macro, Zabbix lo detectará en el siguiente ciclo de discovery, por defecto cada 1 hora. También puedes forzarlo desde la interfaz con Execute now en la regla de discovery del host.