Sentinella : le moniteur qui surveille mon serveur et me prévient sur Telegram

L'outil qui surveille le serveur où tournent mes sites et mes applications : chaque minute, il contrôle sites, certificats, DNS, conteneurs et services, sauvegardes, mémoire et déploiements, et quand quelque chose tombe en panne, il m'écrit sur Telegram, une seule fois, puis quand tout est rétabli. Il se contente de lire, sans privilèges. Le tableau de bord s'essaie sur un serveur fictif.

Une vingtaine de sites et d'applications tournent sur mon serveur : ceux de mes clients, des sites de démonstration et mes propres applications. **Sentinella** (« sentinelle » en italien) les surveille, et je m'en sers vraiment : ce n'est pas la démo d'une entreprise fictive, même si d'ici on l'essaie sur un serveur fictif.

**Ce qu'elle fait**

- **Les sites**, chaque minute : code, temps de réponse et contenu de leur page de contrôle, et sur la même connexion le certificat, avec des rappels à 30, 14 et 7 jours. - **Le DNS**, demandé aux serveurs du fournisseur : chaque nom doit mener au serveur, sans adresse IPv6 en trop, une panne que j'avais déjà connue. - Les **conteneurs** Docker où tournent les applications, et les **services et timers** du serveur : ce qui est arrêté, ce qui redémarre sans cesse ou manque de mémoire, et les sauvegardes nocturnes, réussies ou en retard, et les applications qui n'en ont aucune. - **Mémoire, swap, disques et charge**, et la mémoire de chaque conteneur, lus dans le système sans rien installer. - Les **déploiements** des GitHub Actions, qui deviennent des repères sur le graphique de chaque site.

Quand quelque chose tombe en panne, elle m'écrit sur Telegram une seule fois, puis quand tout est rétabli, avec la durée. Les pannes qui commencent ensemble donnent un seul message ; la nuit, les messages arrivent sans son, et pendant une mise à jour on les met en pause.

**Le plus difficile : la sécurité.** Un outil qui voit tout le serveur ne doit pas devenir une carte pour qui l'attaque. Sentinella **se contente de lire** : elle tourne dans un conteneur sans privilèges et en lecture seule, et ne peut rien redémarrer ; elle voit Docker à travers un proxy qui laisse passer la liste des conteneurs et leurs événements, jamais l'inspection, qui livrerait les mots de passe des autres applications. Le tableau de bord est protégé par un mot de passe et le code d'une application d'authentification. La **page d'état publique** a une liste fermée de champs : elle dit seulement si chaque site fonctionne et sa disponibilité sur 30 jours, et un test automatique échoue si un port ou un chemin s'y glisse. Et comme un moniteur sur le même serveur ne peut pas signaler sa chute, elle envoie chaque minute un signal à Healthchecks.io, qui me prévient de l'extérieur.

La mémoire du serveur est partagée avec une vingtaine d'applications : Sentinella a un plafond de 160 Mo, et enregistre les contrôles dans une ligne par site et par heure.

La démo tourne dans le navigateur, sur un serveur fictif avec neuf sites : au bout d'une minute et demie, un site ne répond plus, et l'on voit l'incident et le message qui serait parti sur Telegram.

Vue 3 et TypeScript avec Nuxt UI, Fastify et PostgreSQL, dans des conteneurs Docker sous Debian. Chaque modification passe par 402 tests automatiques ; chaque mise en production construit l'image sur le serveur, sauvegarde d'abord la base et revient seule à la version d'avant si la nouvelle ne répond pas.

Conception, développement full-stack et mise en production · 2026

Vue.js, Fastify, PostgreSQL, Docker

Voir le site

Andrea Coppetta