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
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Métrique | un nombre sur un service, mesuré encore et encore | |
| Compteur | une métrique qui ne fait que monter | nginx_http_requests_total |
| Jauge | une métrique qui monte et qui descend | nginx_connections_active |
| Débit (rate) | la vitesse de croissance d’un compteur, par seconde | |
| Centile | la valeur que ne dépasse pas une part donnée des mesures | |
| Alerte | un 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 ?
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
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
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
avant = 19
apres = 72
secondes = 8
print((apres - avant) / secondes)
# Mettez secondes à 4. Le service est-il plus chargé ou moins ?Envoyer cinquante visites
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
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
| Mesure | Valeur | Ce qu’elle dit |
|---|---|---|
| Moyenne | 120,4 ms | Un nombre qu’aucun client n’a vécu |
| Médiane, le 50e centile | 28 ms | La moitié des clients ont attendu autant ou moins |
| 90e centile | 40 ms | Neuf clients sur dix ont attendu autant ou moins |
| Le plus lent | 950 ms | Un 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
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
curl -s -w "\n" http://prometheus:9090/api/v1/rulesAffiché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.