SmokePing tiene una interfaz que parece diseñada para castigarte. La usamos desde hace años: la herramienta es brillante — Tobi Oetiker creó algo que funciona tan bien que sigue siendo relevante décadas después. Pero cada vez que abríamos el panel viajábamos a 2005. En everyWAN fuimos parcheando: un script para alertas de Telegram, un daemon para historial de traceroutes, un frontend que no quemara los ojos. Años de parches. Hasta que un día miramos el Frankenstein que habíamos creado y funcionaba mejor que el original. Lo hemos empaquetado en Docker y lo liberamos hoy.
Qué incluye la imagen
Una imagen Docker lista para producción, misma base que linuxserver/smokeping pero con todo lo que nos faltaba: interfaz web renovada, historial de traceroute, alertas por Telegram y despliegue en un solo contenedor.
Interfaz web moderna
Frontend responsive, navegación clara, usable en móvil. Toda la funcionalidad de SmokePing con una UI que no parece de 2005.
Historial de traceroute
Cada objetivo tiene un panel de traceroute. No solo la ruta actual: historial completo. Filtro por fecha y hora, 365 días de retención por defecto.
Alertas Telegram
Notificaciones en tiempo real: pérdida de paquetes, picos de latencia y cambios de ruta reales. La detección de cambio de ruta distingue proveedores (no solo balanceo interno).
Master / slave
Despliega un master y varios slaves en distintas ubicaciones. Cada slave tiene su propio historial de traceroute. El master agrega la latencia en un solo dashboard.
Quick Start
Un solo comando y en marcha:
docker run -d \
--name smokeping \
-p 80:80 \
--cap-add NET_RAW --cap-add NET_ADMIN \
-v $(pwd)/config:/config \
-v $(pwd)/data:/data \
-e TZ=Europe/Madrid \
sistemasminorisa/smokeping:latest
Abre http://localhost y ya estás monitorizando. La imagen incluye objetivos de ejemplo (CDN, DNS, etc.) para verlo en marcha; luego sustitúyelos por los tuyos.
Docker Compose y escenarios
Incluimos varios archivos compose según tu escenario:
- docker-compose.yml — Despliegue standalone, puerto 80
- docker-compose.swarm.yml — Docker Swarm
- docker-compose.traefik.yml — Detrás de un Traefik existente
- docker-compose.full-stack.yml — Incluye Traefik v3
- docker-compose.slave.yml — Instancia slave para multi-ubicación
Personalización por variables de entorno
Logo, colores, nombre de empresa, intervalos, días de retención del traceroute… todo configurable por variables. No hace falta reconstruir la imagen ni editar archivos dentro del contenedor.
- ✓ TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID — Alertas
- ✓ SMOKEPING_LOGO_URL, SMOKEPING_BRAND_NAME, SMOKEPING_TITLE
- ✓ TRACEPING_INTERVAL, TRACEPING_RETENTION_DAYS
Configuración de objetivos (Targets)
Los objetivos se definen en config/Targets con el formato estándar de SmokePing. La jerarquía (+, ++, +++) crea el menú de navegación.
*** Targets ***
probe = FPing
menu = Top
title = Network Monitor
+Production
menu = Production
title = Production Infrastructure
++WebServers
menu = Web Servers
title = Web Server Cluster
+++Primary
menu = Primary
title = Primary Web Server
host = web1.example.com
alerts = bigloss,someloss,rttdetect
+++Secondary
menu = Secondary
host = web2.example.com
alerts = bigloss,someloss
Configuración de alertas
Las alertas se definen en config/Alerts. Pérdida de paquetes, picos de latencia, servicio inaccesible… Asigna alertas a los objetivos con alerts = bigloss,someloss,rttdetect. Para Telegram, configura TELEGRAM_BOT_TOKEN y TELEGRAM_CHAT_ID.
*** Alerts ***
to = |/usr/share/webapps/smokeping/telegram_notify.pl
from = smokeping@localhost
+bigloss
type = loss
pattern = ==0%,==0%,==0%,==0%,>0%,>0%,>0%
comment = Packet loss detected (critical)
+someloss
type = loss
pattern = >0%,*12*,>0%,*12*,>0%
comment = Intermittent packet loss
+rttdetect
type = rtt
pattern = <100,<100,<100,<100,<100,<150,>150,>150,>150
comment = Latency spike detected
Modos de traceroute
Por defecto el traceroute usa ICMP. Para hosts detrás de firewalls estrictos puedes cambiar el modo por objetivo con traceroute_mode = tcp o udp.
| Modo | Protocolo | Cuándo usar |
|---|---|---|
icmp | ICMP Echo | Por defecto, funciona en la mayoría de sitios |
udp | UDP | Cuando ICMP está bloqueado |
tcp | TCP SYN | Hosts detrás de firewalls estrictos |
Multi-ubicación (master / slave)
Para monitorizar desde varias ubicaciones: despliega el master con docker-compose.yml, registra los slaves en config/Slaves y config/smokeping_secrets, despliega cada slave con docker-compose.slave.yml (MASTER_URL, SHARED_SECRET) y asigna slaves a los objetivos con slaves = nyc-slave london-slave.
*** Slaves ***
secrets=/config/smokeping_secrets
+nyc-slave
display_name = New York
location = New York, USA
color = 00ff00
+london-slave
display_name = London
location = London, UK
color = 0000ff
Variables de entorno (referencia)
| Variable | Descripción | Por defecto |
|---|---|---|
TZ | Zona horaria | UTC |
PUID / PGID | ID usuario/grupo | 1000 |
TELEGRAM_BOT_TOKEN | Token del bot (@BotFather) | — |
TELEGRAM_CHAT_ID | ID de chat o canal | — |
SMOKEPING_LOGO_URL | URL del logo | images/smokeping.png |
SMOKEPING_BRAND_NAME | Nombre de empresa en pie | — |
SMOKEPING_BRAND_URL | Web de la empresa | — |
SMOKEPING_COLOR_SIDEBAR_BG | Color de la barra lateral (hex) | #233350 |
SMOKEPING_TITLE | Título de la página | SmokePing |
SMOKEPING_OWNER | Nombre del responsable | SmokePing Admin |
TRACEPING_INTERVAL | Intervalo de traceroute (segundos) | 300 |
TRACEPING_RETENTION_DAYS | Días de historial de traceroute | 365 |
MASTER_URL | URL del master (solo slave) | — |
SHARED_SECRET | Secreto compartido (solo slave) | — |
Resolución de problemas
- Archivo RRD no encontrado al iniciar — Normal. SmokePing crea los ficheros RRD tras el primer ciclo de sondeo (~5 min).
- El logo no se muestra — Comprueba que
SMOKEPING_LOGO_URLsea accesible. Para ficheros locales, monta el volumen y usa una ruta como/config/logo.png. - Panel de traceroute vacío — Asegúrate de que el contenedor tenga capacidades
NET_RAWyNET_ADMIN. Revisa los logs del daemon de traceroute. - El slave no se conecta al master — Comprueba que
MASTER_URLsea correcto y accesible desde el slave, y que el secreto coincida enconfig/smokeping_secretsySHARED_SECRET.
Créditos
Esta imagen no existiría sin el trabajo de Tobi Oetiker (SmokePing), LinuxServer.io (imagen base Docker) y la comunidad open source.
Enlaces y licencia
Código abierto, PRs bienvenidos. Basado en linuxserver/smokeping y en el SmokePing original de Tobi Oetiker. Licencia MIT.
¿Necesitas ayuda con monitorización de red?
En everyWAN diseñamos y operamos infraestructuras de red y monitorización para empresas.
Contactar con everyWAN