Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Mesurer un service en marche (Prometheus)

Après cette leçon: Je peux lire une métrique et dire ce qu’elle m’apprend sur un service.

Leçon de 55 min6 commandesLab d’observabilité : Prometheus et Grafana, avec une règle d’alerte à écrire

La boutique rame le vendredi soir

Une boutique en ligne devient lente chaque vendredi soir. Le patron demande de combien, et depuis quand. Personne ne sait répondre.

Si la boutique avait noté quelques chiffres toutes les quelques secondes, la réponse serait une courbe. Mesurer vient d’abord. Réparer vient après.

À la fin de cette leçon

Remarque

Je peux lire une métrique et dire ce qu’elle m’apprend sur un service.

Mots-clés

MotCe que ça veut direExemple
Métriqueun nombre sur un service, mesuré encore et encore
Compteurune métrique qui ne fait que monternginx_http_requests_total
Jaugeune métrique qui monte et qui descendnginx_connections_active
Débit (rate)la vitesse de croissance d’un compteur, par seconde
Centilela valeur que ne dépasse pas une part donnée des mesures
Alerteun message envoyé quand une métrique semble anormale

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un compteur monte, une jauge oscille

Une métrique est un nombre qu’un service donne sur lui-même. Dans le labo, un petit programme, l’exporteur, lit la page d’état de nginx et en fait des métriques. Un collecteur nommé Prometheus interroge l’exporteur toutes les cinq secondes et garde chaque nombre avec l’heure.

Un compteur ne fait que grandir : les requêtes servies depuis le démarrage. Une jauge va dans les deux sens : les connexions ouvertes en ce moment.

Le Prometheus du labo répond par le web. La première commande demande quelles cibles répondent.

Quelles cibles répondent ?

Commande
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=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.

Interroger une jauge

Commande
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=nginx_connections_active'

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.

Interroger un compteur

Commande
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=nginx_http_requests_total'

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.

Un débit change un compteur en vitesse

Un compteur qui indique 72 dit peu. Est-ce 72 en une journée ou en une minute ?

Le débit est la croissance divisée par les secondes. Si un compteur passe de 19 à 72 en 8 secondes, il a grandi de 53. Le débit est donc 53 divisé par 8.

Lancez la première commande pour envoyer cinquante visites au serveur web. Demandez ensuite à Prometheus le débit de la dernière minute.

Le débit à la main

Code: python
avant = 19
apres = 72
secondes = 8
print((apres - avant) / secondes)
# Mettez secondes à 4. Le service est-il plus chargé ou moins ?

Envoyer cinquante visites

Commande
curl -s -o /dev/null "http://app:8080/?n=[1-50]"

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.

Demander le débit par seconde

Commande
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=rate(nginx_http_requests_total[1m])'

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.

Un centile montre les rares lenteurs

Dix clients attendent 20, 22, 25, 25, 28, 28, 31, 35, 40 et 950 millisecondes. La moyenne est de 120,4. Aucun client n’a attendu cela.

Le 90e centile est le temps que neuf clients sur dix n’ont pas dépassé. Triez les temps et prenez le neuvième : 40.

Le serveur du labo ne publie pas de temps, donc celui-ci se calcule à la main.

Exemple travaillé : dix temps d’attente

MesureValeurCe qu’elle dit
Moyenne120,4 msUn nombre qu’aucun client n’a vécu
Médiane, le 50e centile28 msLa moitié des clients ont attendu autant ou moins
90e centile40 msNeuf clients sur dix ont attendu autant ou moins
Le plus lent950 msUn client a attendu près d’une seconde

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Les mêmes nombres en code

Code: python
temps = [20, 22, 25, 25, 28, 28, 31, 35, 40, 950]
total = 0
for t in temps:
    total = total + t
print("moyenne", total / len(temps))
print("médiane", temps[4])
print("90e", temps[8])
# Remplacez 950 par 45. Quel nombre bouge le plus ?

Une erreur fréquente

Attention

On croit souvent que le temps moyen dit ce que ressentent les utilisateurs. Quelques requêtes très lentes le tirent vers le haut, et beaucoup de rapides les cachent. Lisez la médiane pour le client ordinaire et un centile élevé pour le malchanceux.

Une alerte est une règle sur une métrique

Personne ne peut regarder une courbe toute la journée. Une alerte est une règle qui surveille une métrique à votre place. Elle dit : "si cela reste anormal pendant tant de temps, prévenez quelqu’un".

La durée compte. Un pic d’une seconde ne doit réveiller personne. Prometheus garde ses règles dans une liste. Une copie neuve du labo n’en a aucune : la commande suivante montre la liste vide.

Lister les règles que Prometheus connaît

Commande
curl -s -w "\n" http://prometheus:9090/api/v1/rules

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.

Pour aller plus loin

Envoyez trois cents visites avec n=[1-300] dans le même curl. Demandez ensuite à Prometheus rate(nginx_http_requests_total[1m]) puis rate(nginx_http_requests_total[5m]), une fois tout de suite et une fois deux minutes plus tard.

Notez les quatre nombres. Expliquez pourquoi le débit sur cinq minutes est d’abord plus bas, puis reste élevé plus longtemps.

À propos de ce labo et de sa source: Lab d’observabilité : Prometheus et Grafana, avec une règle d’alerte à écrire

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.