Uptime Kuma, monitoriza tus servicios

Uptime Kuma es una herramienta de monitorización con una interfaz agradable que nos permite comprobar periódicamente si nuestros servicios están disponibles y avisarnos cuando alguno deja de funcionar. Servicios como:

  • Páginas HTTP/HTTPS – APIs – Puertos TCP – Ping – Contenedores Docker – etc.

Además, podemos configurar notificaciones mediante Telegram, Slack, SMTP y muchas otras plataformas.

Llevo probándolo un tiempo y la verdad que me va muy bien. Cuando tenemos varios servidores, páginas web, APIs o contenedores Docker funcionando, tarde o temprano aparece la misma pregunta: ¿Cómo sé si alguno de mis servicios se ha caído?

Y con esta herramienta lo solucionamos.

Instalando Uptime Kuma con Docker Compose

Creamos en su carpeta el  docker-compose.yaml:

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - uptime-kuma-data:/app/data

volumes:
  uptime-kuma-data:

Una vez iniciado, Uptime Kuma estará disponible en:

http://IP-DE-NUESTRO-SERVIDOR:3001

La primera vez que accedamos tendremos que crear el usuario administrador.

Y ya tendremos nuestro Uptime Kuma funcionando. 🎉

Nota: los datos de Uptime Kuma se almacenan en /app/data.

📌 Creando nuestro primer monitor

Desde Uptime Kuma pulsamos: Add New Monitor

Seleccionamos como tipo por ejemplo:

HTTP(s)

Y configuramos algo similar a:

Friendly Name: TomoNota
URL: https://tomonota.net
Heartbeat Interval: 60 

Guardamos el monitor y Uptime Kuma empezará automáticamente a realizar comprobaciones.

Si todo funciona correctamente veremos nuestro monitor en estado: UP

Además, podremos consultar información como:

  • Tiempo de respuesta.
  • Porcentaje de disponibilidad.
  • Historial.
  • Incidencias.
  • Estado del certificado SSL.

Si nuestra web deja de responder, el monitor cambiará a: DOWN

Podremos monitorizar cada servicio con un tipo de monitor diferente.

🔔 Notificaciones con Telegram

Una de las cosas que más me gustan de Uptime Kuma es la cantidad de sistemas de notificaciones que soporta:

  • Telegram – (Lo vamos a usar de ejemplo)
  • Slack.
  • Email mediante SMTP.
  • etc.

Desde Uptime Kuma vamos a:

Settings
→ Notifications
→ Setup Notification

Seleccionamos: Telegram

Necesitaremos: Bot Token y Chat ID

Una vez configurado podemos utilizar: Test para comprobar que recibimos correctamente el mensaje y si todo ha ido bien, guardamos la configuración.

Después podremos asociar esta notificación a nuestros monitores y cuando alguno de nuestros servicios deje de funcionar, recibiremos automáticamente un mensaje en Telegram.

🐳 Monitorizando contenedores Docker

Uptime Kuma también permite monitorizar directamente nuestros contenedores Docker.

Si Kuma está funcionando dentro de Docker necesitaremos darle acceso al socket de Docker.

Podemos modificar nuestro docker-compose.yaml:

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - uptime-kuma-data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock:ro

volumes:
  uptime-kuma-data:

Después recreamos el contenedor:

docker compose up -d

Ahora podremos añadir nuestro Docker Host desde Uptime Kuma y esto nos permite comprobar directamente si determinados contenedores están funcionando.

⚠️ Importante: montar docker.sock dentro de un contenedor tiene implicaciones de seguridad. Aunque lo montemos como read-only, estamos proporcionando al contenedor acceso al daemon de Docker.

*No lo añadiría simplemente «porque sí».

Si únicamente queremos comprobar una aplicación web que está dentro de Docker, normalmente prefiero monitorizar su endpoint HTTP/HTTPS.

🌐 Monitorizar servicios dentro de la misma red Docker

Otra opción interesante aparece cuando Uptime Kuma y nuestros servicios están dentro del mismo servidor Docker.

Podemos conectarlos a una red común.

Por ejemplo:

services:
  uptime-kuma:
    # ...
    networks:
      - monitoring

networks:
  monitoring:
    external: true

Creamos la red:

docker network create monitoring

Y conectamos los servicios que queramos monitorizar.

De esta forma Kuma puede utilizar directamente el nombre DNS del servicio:

http://mi-api:8000/health

en lugar de publicar el puerto al exterior.

Esto resulta especialmente útil si tenemos bastantes aplicaciones Docker funcionando en el mismo servidor.

🔒 Monitorizando certificados SSL

Esto resulta muy útil cuando tenemos un monitor HTTPS. Uptime Kuma puede mostrarnos información sobre el certificado y es especialmente interesante si administramos varios dominios.

Aunque normalmente utilicemos Let’s Encrypt y la renovación sea automática, nunca está de más tener otro sistema que pueda avisarnos de que algo no ha funcionado correctamente. Porque todos sabemos que los certificados siempre caducan en el mejor momento posible. 😅

📊 ¿Cada cuánto realizamos las comprobaciones?

Cada monitor tiene su propio intervalo.

Por ejemplo:

20 segundos
60 segundos
5 minutos

No siempre necesitamos comprobar todos los servicios cada 20 segundos.

Para una web pública podríamos utilizar:

60 segundos

Mientras que para un servicio menos importante quizá sea suficiente:

300 segundos

También podemos configurar reintentos antes de considerar un servicio como caído.

Esto es bastante útil para evitar recibir una alerta porque hemos perdido un único paquete o porque una petición ha tardado un poco más de lo normal.

💾 Realizando una copia de seguridad

Toda la información importante de Uptime Kuma está almacenada en /app/data .

Como en nuestro ejemplo estamos utilizando un volumen:

uptime-kuma-data:/app/data

Los datos seguirán existiendo aunque eliminemos o recreemos el contenedor.

Podemos localizar el volumen con:

docker volume ls

Y, como siempre, si el servicio es importante: tener un volumen persistente no significa tener un backup.

Conviene incluir los datos de Kuma dentro de nuestra estrategia habitual de copias de seguridad.

🔄 Actualizando Uptime Kuma

Una de las ventajas de utilizar Docker Compose es que actualizar el servicio es muy sencillo.

Entramos en nuestro directorio:

cd uptime-kuma

Descargamos la imagen actualizada:

docker compose pull

Y recreamos el servicio:

docker compose up -d

Podemos comprobar posteriormente la versión y los logs:

docker compose ps
docker compose logs --tail=100

Nuestros datos seguirán almacenados en el volumen.

Aun así, antes de realizar una actualización importante siempre recomiendo tener una copia de seguridad.

Especialmente si vamos a realizar un salto entre versiones mayores.

Cuando lleves un tiempo con ella es una de esas herramientas que una vez instalas resulta difícil entender por qué no la utilizabas antes.

Y hasta aquí el post de hoy, ¡Espero que os sirva de ayuda!

Salu2!