5 minutes
Uptime Kuma : surveiller vos services comme un pro
Quand vous avez une dizaine de services qui tournent sur votre homelab, vous ne pouvez pas tous les vérifier manuellement chaque matin. Un matin, j’ai découvert que mon blog était down depuis trois heures. Personne ne m’avait prévenu. C’est là que j’ai compris qu’il me fallait un outil de surveillance.
Uptime Kuma est devenu cette solution. Open-source, self-hosté, avec une interface claire. Voici comment je l’ai mis en place et ce que j’en fais concrètement.
Pourquoi Uptime Kuma ?
Il existe des alternatives : Healthchecks.io, Gatus, Statping, Pingdom. J’ai choisi Uptime Kuma pour trois raisons :
- Self-hosté : mes données de monitoring restent chez moi, pas chez un tiers
- Interface moderne : pas besoin de plonger dans du YAML pour comprendre l’état de mes services
- Communauté active : des mises à jour fréquentes, des intégrations qui fonctionnent
Le comparatif rapide :
| Critère | Uptime Kuma | Healthchecks.io | Gatus | Statping |
|---|---|---|---|---|
| Auto-hosted | ✅ | ❌ (SaaS) | ✅ | ✅ |
| Setup | 5 min | 0 min (SaaS) | 15 min | 10 min |
| Interface | Superbe | Basique | CLI | Correcte |
| Types de check | HTTP, TCP, Ping, DNS, Docker, gRPC | HTTP, Ping | HTTP, TCP, ICMP | HTTP, TCP, ICMP |
| Status page | ✅ | ✅ | ❌ | ✅ |
Installation rapide
Prérequis
- Docker et Docker Compose installés
- Un serveur (même une VM de 1 Go de RAM suffit)
- Un port disponible (3001 par défaut)
Docker Compose
Voici mon fichier docker-compose.yml optimisé :
version: '3'
services:
uptime-kuma:
image: louislam/uptime-kuma
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/app/data
environment:
- TZ=Europe/Paris
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001"]
interval: 30s
timeout: 10s
retries: 3
Le healthcheck est important : si le conteneur plante silencieusement, Docker le redémarre automatiquement. Et unless-stopped évite les redémarrages inutiles après un reboot planifié.
Démarrage
mkdir -p uptime-kuma && cd uptime-kuma
# coller le docker-compose.yml ci-dessus
docker-compose up -d
Accédez à http://<votre-ip>:3001, créez votre compte administrateur, et c’est parti.
Configuration avancée
Les types de monitors
Uptime Kuma supporte bien plus que le simple check HTTP :
- HTTP(s) : vérifie qu’une page répond avec le bon code de statut
- TCP Port : vérifie qu’un port est ouvert (utile pour SSH, bases de données)
- Ping : vérifie qu’un serveur répond au ICMP
- DNS : vérifie qu’un nom de domaine résout correctement
- Docker : surveille directement l’état d’un conteneur Docker
- gRPC : pour les services gRPC
Moi, j’utilise principalement HTTP pour mes services web et TCP pour les services internes.
La status page publique
L’un des meilleurs features d’Uptime Kuma, c’est la status page. Vous créez une page publique qui montre l’état de vos services, et vous pouvez la mettre à jour automatiquement.
Pour l’activer : Settings → Status Page → Add. Choisissez les monitors à inclure, et Uptime Kuma génère une URL publique.
C’est utile si vous avez des amis ou de la famille qui utilisent vos services. Au lieu de vous demander “c’est normal que ça marche pas ?”, ils peuvent vérifier eux-mêmes.
Intégration avec Home Assistant
Si vous utilisez Home Assistant, Uptime Kuma s’intègre directement via HACS :
- Installez l’intégration Uptime Kuma depuis HACS
- Configuration → Intégrations → Ajouter Uptime Kuma
- Entrez l’URL de votre instance et vos identifiants
Ensuite, vous pouvez créer des automatisations basées sur l’état des services. Par exemple : si le blog tombe en panne, envoyer une notification push sur votre téléphone.
Notifications
Uptime Kuma supporte des dizaines de canaux de notification :
- Email (SMTP)
- Telegram
- Discord
- Slack
- ntfy (self-hosted, que j’utilise pour les alertes critiques)
- Webhooks (pour tout connecter à votre propre système)
Mon conseil : ne mettez pas trop de notifications. Si vous recevez une alerte pour chaque reboot de 2 minutes, vous finirez par les ignorer. Concentrez-vous sur les pannes réelles.
Ce que je surveille concrètement
Voici la liste des services que je monitor, avec les intervalles choisis :
| Service | Type | Intervalle | Pourquoi |
|---|---|---|---|
| Blog | HTTP(s) | 60s | C’est ma vitrine, il doit tourner |
| Home Assistant | HTTP(s) | 60s | Le centre nerveux du homelab |
| API Hermes | HTTP(s) | 120s | Agent IA, panne = pas grave |
| Synology NAS | TCP 5000 | 300s | Stockage critique |
| Imprimante 3D | HTTP(s) | 300s | OctoPrint, pas urgent |
| Freebox | Ping | 120s | Si l’internet tombe, je veux savoir |
L’intervalle de 60 secondes pour le blog et HA, c’est un compromis entre réactivité et charge serveur. Pour le NAS et l’imprimante, 5 minutes suffisent.
Mise à jour sans downtime
La mise à jour d’Uptime Kuma se fait en trois commandes :
docker-compose down
docker-compose pull
docker-compose up -d
Pendant les ~30 secondes de mise à jour, les monitors sont en pause. C’est acceptable. Si vous voulez zéro downtime, il faudrait une seconde instance en standby, mais c’est overkill pour un homelab.
Sauvegarde des données
Uptime Kuma stocke tout dans un fichier SQLite. Pour sauvegarder :
# Sauvegarde manuelle
docker cp uptime-kuma:/app/data ./backup-$(date +%Y%m%d)
# Ou cron quotidien
0 2 * * * docker cp uptime-kuma:/app/data /backup/uptime-kuma/$(date +\%Y\%m\%d)
Vous pouvez aussi utiliser l’export/import intégré dans l’interface pour migrer vers un autre serveur.
Résolution des problèmes
Le conteneur ne démarre pas
Vérifiez les logs :
docker logs uptime-kuma
Les causes fréquentes :
- Port 3001 déjà utilisé → changez le port dans docker-compose.yml
- Problème de permissions sur le volume
./data→chmod -R 777 ./data - Mémoire insuffisante → Uptime Kuma a besoin de ~200 Mo minimum
Les checks échouent alors que le service tourne
Vérifiez :
- Le pare-feu autorise les connexions sortantes
- Le DNS résout correctement le nom de domaine
- Le certificat SSL n’est pas expiré (pour les checks HTTPS)
Uptime Kuma tombe en panne lui-même
C’est le paradoxe du “monitoring de monitoring”. Si Uptime Kuma plante, vous n’avez plus d’alertes. Pour couvrir ce cas :
- Mettez le conteneur en
restart: unless-stopped - Utilisez un healthcheck (comme dans mon docker-compose ci-dessus)
- Ou externally, un service comme Freshping (gratuit) qui ping votre instance
Bilan
Six mois après l’installation, Uptime Kuma est devenu un de ces outils dont j’oublie l’existence tellement il fonctionne bien. Je ne pense à lui que quand il m’envoie une notification, et c’est exactement le but.
Le plus important, c’est pas l’outil en soi. C’est de passer de “je ne savais pas que c’était down” à “je le sais en 60 secondes”. La différence est énorme quand vous dépendez de vos propres services.
Si vous avez un homelab, installez Uptime Kuma. Ça prend 5 minutes, et la tranquillité d’esprit n’a pas de prix.