Lorsqu’on héberge soit même ses services, que ce soit chez soi ou sur des serveurs privatisés distants il arrive parfois que ceux-ci tombent en panne. Et comme l’auto hébergement se base le plus souvent sur un fonctionnement autonome, sans partie tierce, il faut alors déployer, surveiller et maintenir soit même son infrastructure.
C’est là qu’intervient Uptime-Kuma, un outil de monitoring simpliste et très graphique qui permet d’un coup d’oeil de visualiser le taux de fonctionnement ou uptime de nos services. Et bien évidemment, il est gratuit et open source.
Créé en Javascript et Vue par louislam sur github, son image docker à été « pull » plus de 10 Millions de fois ce qui en fait l’un des outils de monitoring les plus appréciés des particuliers.

Sur l’image du dessus on voit qu’Uptime-Kuma surveille un service qui s’appelle Authelia qui n’est rien d’autre qu’une page Web. Il fonctionne sous la forme d’un heartbeat toute les 60 secondes et si le code http reçu n’est pas compris entre 200 et 299 le service est noté comme « down ».
On peut bien sûr choisir parmi une grande liste de méthodes (la http étant l’une des plus simple et rapide à mettre en place) :

L’outil nous permet aussi d’envoyer des notifications lorsqu’un service tombe en panne via Email, MS Teams, Discord, Telegram, Signal et une cinquantaine d’autres services. Dans mon exemple j’ai choisi via Telegram. Il suffit de générer un token à partir du bot « BotFather » pour créer son propre bot.
On peut paramétrer le nombre d’essais avant de prévenir et aussi le nombre de notifications à envoyer. Ci dessous un exemple d’alerte.

Parmi les autres fonctionnalités :
- Traduction dans plusieurs langues
- 2FA
- Thème Sombre ou Clair
- Design responsive
Installation
Voici un exemple fonctionnel pour créer un stack rapide via Docker Compose.
version: '3.3' services: uptime-kuma: image: louislam/uptime-kuma:latest container_name: uptimekuma volumes: - /home/docker/uptime-kuma:/app/data ports: - 1000:3001 restart: always
Une demo est disponible ici pour tester le produit.