Un petit utilitaire pour surveiller l'état de son infra

Un ami qui se lance dans le coaching sportif m'a récemment demandé de lui monter une infra personnalisée avec un site web vitrine ainsi qu'un blog. Comme il s'agit ici de sa principale activité commerciale, je m'apprête pour la première fois à rencontrer une problématique de qualité de service et de disponibilité (du moins, avec mes side-projects).
Puisque je suis en train d'apprendre Python, je me suis dit qu'il serait sympa comme exercice de coder mon Health Checker, un process qui se chargerait de vérifier l'état des différentes URLs que je lui renseigne.
C'est chose faite ! Vous pouvez avoir un aperçu de ce que ça donne ici !
Comment l'utiliser ?
Je voulais que son utilisation soit simple et self-contained. Qui dit self-contained, dit Docker !
Il suffit de :
- Cloner les sources sur la machine destinée à faire tourner le soft – idéalement, un serveur.
- D'installer Docker & docker-compose – s'il ne les sont pas déjà.
- De modifier le fichier de configuration
config.yml
pour le faire correpondre à ses besoins. - De lancer le script
start.sh
, et c'est tout !
On peut alors visiter l'URL https://localhost:84
(le port est modifiable dans les fichiers de configuration), et on voit apparaître cette page web :

L'app nous indique, pour chaque URL surveillée :
- L'état du site – OK en vert ou KO en rouge.
- Le code HTTP retourné par un GET – un code de -1 signifie que la connexion n'a pas du tout pu se faire (problème réseau / DNS). Dans l'exemple, owl-performance n'est pas encore déployé.
- Le code HTTP attendu – qu'on renseigne dans les fichiers de configurations. La plupart du temps, ça sera "200", mais on peut très bien avoir une redirection en amont par exemple (code "301").
- La chaîne de caractère que l'app a tenté de retrouver dans la page – qu'on renseigne, si besoin, dans les fichiers de configurations. L'idée ici est de s'assurer que la page retournée est bien exactement celle attendue, et non pas une page retournée par une règle NGINX trop étendue.
- Si la chaîne est présente, ou non dans la page.
Le petit plus, c'est qu'on peut laisser la page ouverte. Elle se recharge toute seule toutes les 5 minutes, grâce à cette petite ligne de JS qu'on embarque :
<script>
setTimeout(location.reload.bind(location), 300000);
</script>
Under the hood
Pour arriver à ce résultat, voici ce qu'il se passe quand on lance le docker-compose :
- Un premier container, python-run, lance le programme toutes les 5 minutes, qui se charge de faire les vérifications et de générer un rapport sous forme HTML.
- Un second container, python-webserver, expose cette page HTML sur un port donné.
Si vous voulez approfondir, les sources sont sur mon Gitlab :

S'il faut rester devant cette page Web, ça ne sert à rien !
C'est un peu vexant, mais je suis d'accord ! Je compte bientôt développer une v2 qui sera capable d'envoyer des mails, voire des SMS, si une anomalie est détectée.
Stay tuned !