Ce que tu vas faire
Faire tourner un logiciel, ce n’est que la moitié du travail. L’autre moitié, c’est de savoir qu’il a un problème avant que quelqu’un te le dise. La supervision (le monitoring) consiste à relever des chiffres sur un programme au fil du temps. Une alerte est une règle qui surveille ces chiffres et prévient quand il y a un souci. Ton lab contient un serveur web, un collecteur appelé Prometheus et un outil de graphiques appelé Grafana. Tu vas poser une question, écrire une règle d’alerte, casser le serveur exprès et regarder l’alerte se déclencher.
Avant de commencer
Remarque
Appuie sur Démarrer le lab dans la barre en haut de cette leçon et attends qu’il indique qu’il tourne. Les quatre conteneurs sont app, exporter, prometheus et grafana, et ils se trouvent entre eux grâce à ces noms. Chaque bouton Exécuter ci-dessous tape sa commande dans le terminal de ton lab, l’une après l’autre, dans la même session. Pour les voir agir, ou pour taper tes propres commandes, appuie sur Ouvrir le terminal (nouvel onglet) dans la barre.
1. Pose une question à Prometheus
Prometheus garde tous les chiffres qu’il a collectés. Dans son langage, le PromQL, la question la plus simple est le nom d’un chiffre. nginx_up vaut 1 tant que le serveur web répond, et 0 quand il ne répond plus. La réponse est du JSON : cherche "value":[ suivi d’une heure et de "1". La même question, tapée dans la page de Prometheus de ton navigateur, affiche la réponse en tableau ou en graphique. -w "\n" termine la réponse par un retour à la ligne, pour qu’elle s’affiche seule sous la commande.
curl -s -w "\n" 'http://prometheus:9090/api/v1/query?query=nginx_up'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
2. Écris une règle d’alerte
Une règle dit : « quand cette question est vraie pendant dix secondes, déclenche une alerte ». Celle-ci pose la question nginx_up == 0, c’est-à-dire : le serveur est-il en panne ? La première commande l’écrit, sur une seule ligne, dans le dossier des règles du conteneur Prometheus, où Prometheus lit tous les fichiers .yml. Elle n’affiche rien. La deuxième commande demande ensuite à Prometheus de relire ses fichiers, et n’affiche rien non plus. Sur la page de Prometheus, Alerts liste maintenant AppDown, en vert parce que tout va bien.
docker exec prometheus sh -c 'echo "$0" > /etc/prometheus/rules/lab.yml' '{"groups":[{"name":"lab","rules":[{"alert":"AppDown","expr":"nginx_up == 0","for":"10s","labels":{"severity":"page"}}]}]}'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
curl -s -X POST http://prometheus:9090/-/reloadAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
3. Casse le serveur et regarde l’alerte se déclencher
docker stop app arrête le serveur web et affiche son nom. Prometheus s’en aperçoit en une dizaine de secondes, et l’alerte est "state":"pending" (en attente) pendant les dix secondes que la règle demande. Lance la deuxième commande deux fois, à quelques secondes d’écart : la réponse devient "state":"firing" (déclenchée). Ensuite, docker start app remet le serveur en marche. Appuie une dernière fois sur le deuxième bouton Exécuter après quinze secondes : la réponse redevient "alerts":[]. Pour finir, ouvre Grafana, appuie sur Explore, choisis la source de données Prometheus et lance nginx_up : c’est la ligne que dessine le panneau d’un tableau de bord.
docker stop appAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
curl -s -w "\n" http://prometheus:9090/api/v1/alertsAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
docker start appAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour les enseignants
Astuce
Cette leçon est un petit exemple de leçon travaillée dans un lab : les étapes et les boutons Exécuter forment la leçon, et le lab est la copie de chaque élève. Le lab se compose de quatre services et de deux volumes nommés, et rien ici ne se corrige tout seul : l’élève rend la règle, une capture d’écran de l’alerte déclenchée et un panneau Grafana, avec une phrase sur ce que ferait la personne d’astreinte. La règle est dans un fichier du volume de Prometheus, donc elle est toujours là après un arrêt puis un redémarrage du lab. Copie la leçon dans ton propre module et modifie-la, ou crée-en une depuis zéro avec le menu Lab de l’éditeur de leçons.