Files
zabbix-port-monitoring/README.md
T

4.1 KiB

📦 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 1 y 65535.
  • 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

  1. Crea o edita este archivo:

    C:\Program Files\Zabbix Agent 2\zabbix_agent2.d\plugins.d\ports.conf
    
  2. Copiá el contenido de ports_win.conf en ese archivo.

  3. Reiniciá el servicio Zabbix Agent 2.

Linux — Zabbix Agent

  1. Crea o edita este archivo:

    /etc/zabbix/zabbix_agentd.d/ports.conf
    
  2. Copia el contenido de ports_linux.conf en ese archivo.

  3. Reiniciá el servicio:

    sudo systemctl restart zabbix-agent
    

📥 2. Importación del template

  1. Descarga o clona este repositorio.
  2. En Zabbix, entra en Data collection > Templates.
  3. Haz clic en Import.
  4. Selecciona port_monitoring_template.yaml.
  5. 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.