Uptime Kuma
Le « est-ce que mon service répond ? » self-hosted : tu lui donnes une URL, il la teste toutes les minutes, t'envoie une notif quand ça tombe, et affiche une page de statut publique. Une seule image Docker, zéro config.
Prometheus mesure comment ton service se comporte (latence, débit, percentiles). Uptime Kuma répond à une question plus simple et complémentaire : est-ce qu'il répond, oui ou non ?, et te ping sur Discord/Telegram/e-mail quand la réponse devient « non ». Sur un petit projet, Uptime Kuma seul suffit souvent ; sur un projet plus sérieux, les trois cohabitent.
À quoi ça sert
Tu déploies une API, un site, une base de données. Tout marche le jour où tu lances. Trois semaines plus tard, le serveur a redémarré, le certificat SSL a expiré, ou ton conteneur s'est crashé en silence. Tu t'en aperçois… quand un utilisateur te le signale.
Uptime Kuma règle ça avec quatre briques :
- Monitors — chaque service à surveiller (URL HTTP, port TCP, ping, DNS, conteneur Docker, certificat SSL…). Un check configurable toutes les n secondes.
- Notifications — plus de 90 canaux supportés : e-mail, Discord, Slack, Telegram, webhook, ntfy, SMS…
- Status pages — une page publique (par ex.
status.tonprojet.fr) qui montre l'état de chaque service, avec historique. Tu la partages aux utilisateurs. - Maintenance windows — pour ne pas être spammé pendant que tu déploies.
Uptime Kuma = un robot qui frappe à la porte de ton service toutes les minutes et te crie dessus dès qu'on ne lui répond plus.
Uptime Kuma est l'équivalent open source et gratuit de services payants comme UptimeRobot, Pingdom ou StatusCake. Un seul conteneur, une UI web soignée, pas de compte cloud à créer. Bémol : il tourne chez toi, donc si ton hébergeur entier tombe, Uptime Kuma tombe avec. Pour un projet de cours c'est parfait ; en prod sérieuse, on l'héberge ailleurs que là où tournent les services qu'il surveille.
Un exemple d'usage
Tu as déployé ton API FastAPI sur
https://api.monprojet.fr et un dashboard
Streamlit sur
https://demo.monprojet.fr. Tu veux :
- vérifier que les deux répondent en HTTP 200 toutes les minutes ;
- recevoir une notif Discord si une URL ne répond plus pendant 2 minutes d'affilée ;
- une page publique
status.monprojet.frpartageable avec ta promo, qui montre l'état des deux en temps réel.
Avec Uptime Kuma, ces trois choses se font en cliquant dans l'UI, sans écrire une ligne de code. Total : 10 minutes.
How-to : installer et utiliser Uptime Kuma
-
Lancer Uptime Kuma avec Docker
Un seul conteneur, une seule commande :
bashdocker run -d --name uptime-kuma \ -p 3001:3001 \ -v uptime-kuma-data:/app/data \ --restart unless-stopped \ louislam/uptime-kuma:1Le volume
uptime-kuma-datagarde tes monitors et ton historique : ne l'oublie pas, sinon tout disparaît au prochaindocker rm. Ouvrehttp://localhost:3001et crée le compte admin (gardé en local, dans une SQLite, pas envoyé sur internet).Épingle la version majeureUtilise
louislam/uptime-kuma:1plutôt que:latest. La v2 introduit des changements de schéma ; mieux vaut décider toi-même quand tu migres. -
Avec docker-compose (recommandé)
Si tu as déjà un
docker-compose.ymlpour ton projet, ajoute Uptime Kuma à côté :yamlservices: uptime-kuma: image: louislam/uptime-kuma:1 container_name: uptime-kuma ports: ["3001:3001"] volumes: - uptime-kuma-data:/app/data restart: unless-stopped volumes: uptime-kuma-data:docker compose up -d uptime-kumaet c'est prêt. -
Créer ton premier monitor
Dans l'UI, clique Add New Monitor. Les champs qui comptent vraiment :
- Monitor Type —
HTTP(s)pour une URL,TCP Portpour une base de données ou un broker,Pingpour une machine,Docker Containerpour un conteneur local. - Friendly Name — ce que tu veux voir dans l'UI.
- URL — ex.
https://api.monprojet.fr/health. Pointe vers un endpoint léger, pas la home complète. - Heartbeat Interval — 60 s par défaut, tu peux descendre à 20 s.
- Retries — combien de checks ratés avant de déclarer l'incident. 2 ou 3 évite les fausses alertes.
Endpoint /healthSur ton API FastAPI, ajoute une route ultra-simple :
@app.get("/health") def health(): return {"ok": True}. C'est elle que tu monitores : pas de logique métier, pas de base de données touchée, donc un check rapide et fiable. - Monitor Type —
-
Brancher une notification
Menu Settings → Notifications → Setup Notification. Choisis ton canal — Discord est le plus simple pour démarrer :
- Sur ton serveur Discord : Paramètres du salon → Intégrations → Webhooks → Nouveau webhook, copie l'URL.
- Dans Uptime Kuma, colle l'URL dans le champ Discord Webhook URL, donne un nom, Test pour vérifier, puis Save.
- Coche Default enabled pour qu'elle s'applique automatiquement à tous les nouveaux monitors.
Maintenant, dès qu'un monitor passe en
DOWNpendant le nombre de retries configuré, tu reçois un message. Idem au retour enUP. -
Créer une page de statut publique
Menu Status Pages → New Status Page. Donne-lui un slug (ex.
monprojet) — l'URL publique serahttp://localhost:3001/status/monprojet. Choisis les monitors à afficher, range-les en groupes (« API », « Front », « Base de données »), et coche Published.La page montre pour chaque service : statut courant, uptime % sur 24 h / 30 j, et un graphe de l'historique. Aucune authentification requise — pratique à partager.
-
Mettre une fenêtre de maintenance
Avant un déploiement prévu : menu Maintenance → New Maintenance. Tu choisis les monitors concernés, la durée (ponctuelle ou récurrente), et pendant ce créneau les checks sont ignorés et la page de statut affiche « Under Maintenance ». Pas de fausse alerte Discord à 22 h.
-
Surveiller des services internes (Docker)
Pour qu'Uptime Kuma puisse joindre tes autres conteneurs par leur nom (ex.
http://api:8000/health), mets-les sur le même réseau Docker. Avec undocker-compose.ymlcommun, c'est automatique.Pour monitorer le statut d'un conteneur (« est-il en cours d'exécution ? ») sans HTTP, utilise le type Docker Container : Uptime Kuma se branche sur le socket Docker. Il faut alors monter
/var/run/docker.sockdans le conteneur Uptime Kuma (attention, ça donne un accès large à Docker — à n'utiliser qu'en local ou sur ta machine perso). -
Sauvegarder ses monitors
Menu Settings → Backup → Export télécharge un JSON avec tous tes monitors et leurs réglages. Commit-le (sans tokens sensibles !) ou garde-le ailleurs : si le volume Docker disparaît, Import tout remettra en place en quelques secondes.
Aide-mémoire
# Lancer
docker run -d --name uptime-kuma -p 3001:3001 \
-v uptime-kuma-data:/app/data --restart unless-stopped \
louislam/uptime-kuma:1
# Logs
docker logs -f uptime-kuma
# Mettre à jour (épinglé sur la v1)
docker pull louislam/uptime-kuma:1
docker stop uptime-kuma && docker rm uptime-kuma
# puis relancer la commande run avec le même volume
HTTP(s) # une URL, code de retour 2xx
HTTP Keyword # vérifie qu'un mot précis est dans la réponse
HTTP JSON Query # cible un champ JSON (ex. {"status":"ok"})
TCP Port # une base, un broker
Ping # ICMP vers une machine
DNS # résolution d'un nom
Docker Container # conteneur en cours d'exécution
Push (Heartbeat) # c'est le job qui ping Uptime Kuma (cron, batch)
Uptime Kuma et le reste de l'écosystème
-
Prometheus +
Grafana — voir l'encart en haut
de page. Uptime Kuma répond à « ça marche ? », Prometheus/Grafana à
« ça marche bien ? ». Bonus : Uptime Kuma expose une API
/metricscompatible Prometheus depuis la v1.18, donc tu peux aussi tracer son uptime dans Grafana. -
Docker — un seul conteneur,
un volume, c'est l'installation officielle. Idéal pour intégrer dans
un
docker-compose.ymlde projet. - Kubernetes — un Helm chart communautaire existe, mais sur un cluster en prod on préfère souvent l'opérateur kube-prometheus-stack + blackbox exporter pour les checks HTTP, qui s'intègre mieux à l'écosystème.
-
FastAPI — ajoute une route
/healthlégère et pointe Uptime Kuma dessus. Pour aller plus loin, fais un check qui teste la base de données et renvoie 503 si elle ne répond pas — Uptime Kuma le détectera comme unDOWN. -
CI/CD — utilise un monitor de
type Push pour vérifier qu'un job batch (ré-entraînement,
export quotidien) tourne bien. Le job fait un
curl https://kuma/api/push/<token>à la fin ; Uptime Kuma s'attend à recevoir ce ping toutes les n heures et alerte sinon. - MLflow — surveille simplement l'URL de ton MLflow server avec un monitor HTTP. Utile si toute ton équipe en dépend pour logger ses runs.
Pour aller plus loin
- Site officiel : uptime.kuma.pet
- Démo en ligne : demo.uptime.kuma.pet
- Repo GitHub : github.com/louislam/uptime-kuma
- Documentation : le wiki du repo