Servidores Linux

Monitorizar sitio web y servidor con Uptime Kuma: Docker, HTTPS y alertas en Telegram

7 pasos 14 min de lectura 10 vistas 0
Contenido

Enterarse por un cliente de que su sitio lleva una hora caído es la peor forma de descubrir una interrupción. Uptime Kuma es una herramienta de monitorización gratuita y autoalojada que comprueba sitios web, puertos, ping y DNS con una frecuencia de entre unos segundos y unos minutos, le avisa antes de que caduquen los certificados SSL, publica una página de estado y envía alertas a Telegram, al correo electrónico y a decenas de canales más. Esta guía la instala con Docker, la coloca detrás de Nginx con HTTPS y configura las notificaciones de Telegram.

Ejecute la monitorización en un servidor distinto de los servidores que vigila, idealmente en otra región. Si el monitor está en la misma máquina o red que se cae, nadie recibirá el aviso. Basta con un VPS pequeño en otra ubicación de IMIDC (por ejemplo, Hong Kong vigilando Tokio).

Paso 1: Instalar Docker

Instale Docker y Docker Compose como se describe en nuestra guía de instalación de Docker. Uptime Kuma necesita muy pocos recursos: 1 núcleo de CPU y entre 512 MB y 1 GB de RAM son más que suficientes para unos cientos de monitores.

Paso 2: Iniciar Uptime Kuma

La interfaz web escucha en el puerto 3001. Vincularla a 127.0.0.1 la mantiene fuera de internet hasta que Nginx con HTTPS esté delante.

docker run -d --name uptime-kuma --restart=always \
  -p 127.0.0.1:3001:3001 \
  -v uptime-kuma:/app/data \
  louislam/uptime-kuma:1

docker ps --filter name=uptime-kuma
curl -I http://127.0.0.1:3001

La etiqueta :1 sigue la rama estable de larga duración. Consulte las versiones publicadas del proyecto en GitHub antes de pasar a una versión principal más reciente, porque las actualizaciones de versión principal pueden migrar la base de datos.

Paso 3: Publicarla por HTTPS con Nginx

Apunte un subdominio como status.example.com al servidor de monitorización, emita un certificado (consulte SSL gratis con Certbot o acme.sh) y configure el proxy hacia el contenedor. Uptime Kuma usa WebSockets, así que las cabeceras de upgrade son obligatorias.

server {
    listen 443 ssl;
    http2 on;
    server_name status.example.com;

    ssl_certificate     /etc/letsencrypt/live/status.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/status.example.com/privkey.pem;

    location / {
        proxy_pass         http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}
nginx -t && systemctl reload nginx

Abra https://status.example.com y cree la cuenta de administrador de inmediato; el primer visitante de la página de configuración se convierte en el administrador.

Paso 4: Añadir monitores

  • HTTP(s): comprueba una URL y su código de estado. Use HTTP(s) - Keyword para confirmar además que una palabra de su página está presente, lo que detecta páginas de error que siguen devolviendo 200.
  • TCP Port: comprueba que un servicio acepta conexiones, por ejemplo SSH en el 22, RDP en el 3389 o MySQL en el 3306.
  • Ping: accesibilidad básica. Algunas redes descartan ICMP, así que para los servidores críticos es preferible una comprobación TCP.
  • DNS: confirma que un registro sigue resolviendo al valor esperado.

Un intervalo de comprobación de 60 segundos con 2 o 3 reintentos es un buen equilibrio: las caídas reales se notifican en pocos minutos y un solo paquete perdido no le despierta de madrugada. En los monitores HTTP, active Certificate Expiry Notification para recibir avisos sobre los certificados SSL antes de que caduquen.

Paso 5: Enviar alertas a Telegram

Cree un bot y averigüe el ID del chat al que deben llegar las alertas.

# 1. In Telegram, talk to @BotFather, send /newbot and copy the token
# 2. Send any message to your new bot (or add it to a group and post there)
# 3. Read the chat ID from the bot's updates
curl -s "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates" | grep -o '"chat":{"id":-\?[0-9]*'

En Uptime Kuma, abra Settings → Notifications → Setup Notification, elija Telegram, pegue el token del bot y el ID del chat, haga clic en Test y active Default enabled y Apply on all existing monitors. Los ID de los chats de grupo empiezan por un signo menos.

Paso 6: Crear una página de estado

En Status Pages puede publicar una página pública que muestre el estado de los monitores seleccionados, lo que resulta útil para sus clientes y para su propio equipo. Puede servirla en su propio dominio y añadir avisos de mantenimiento durante los trabajos programados.

Paso 7: Copia de seguridad y actualización

# Back up the data volume (monitors, history, settings)
docker run --rm -v uptime-kuma:/data -v "$PWD":/backup alpine \
  tar czf /backup/uptime-kuma-$(date +%F).tgz -C /data .

# Update to the latest release of the same major version
docker pull louislam/uptime-kuma:1
docker rm -f uptime-kuma
docker run -d --name uptime-kuma --restart=always \
  -p 127.0.0.1:3001:3001 -v uptime-kuma:/app/data louislam/uptime-kuma:1

Preguntas frecuentes

¿Cómo evito alertas por cortes breves que no son caídas reales?

Aumente los reintentos a 3 y el intervalo entre reintentos a entre 30 y 60 segundos. Así, un monitor solo se marca como caído tras varios fallos consecutivos.

¿Por qué el ping siempre falla si el sitio web funciona?

El servidor o su firewall descartan ICMP. Use en su lugar un monitor TCP Port o HTTP.

¿Puedo monitorizar el rendimiento de mi sitio desde China continental?

Uptime Kuma mide desde el lugar donde se ejecuta. Para conocer la experiencia desde China, ejecute una segunda instancia en un servidor con buenas rutas hacia China, como un servidor CN2 GIA en Hong Kong, o use las herramientas de prueba de red desde varias ubicaciones.

¿Sigue sin resolverlo después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya la IP del servidor, la versión del sistema operativo, el comando que ejecutó y la salida completa del error para que podamos localizar el problema más rápido.

¿Fue útil la respuesta?

Tutoriales relacionados