Freitagabends ist der Shop langsam
Ein Online-Shop fühlt sich jeden Freitagabend langsam an. Die Inhaberin fragt, wie langsam und seit wann. Niemand kann es sagen.
Hätte der Shop alle paar Sekunden ein paar Zahlen notiert, wäre die Antwort eine Kurve. Erst messen, dann beheben.
Am Ende dieser Lektion
Notiz
Ich kann eine Metrik lesen und sagen, was sie über einen Dienst verrät.
Schlüsselbegriffe
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Metrik | eine Zahl über einen Dienst, die immer wieder gemessen wird | |
| Counter | eine Metrik, die nur steigt | nginx_http_requests_total |
| Gauge | eine Metrik, die steigt und fällt | nginx_connections_active |
| Rate | wie schnell ein Counter pro Sekunde wächst | |
| Perzentil | der Wert, den ein bestimmter Anteil der Messungen nicht überschreitet | |
| Alarm | eine Meldung, die kommt, wenn eine Metrik falsch aussieht |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Counter steigt, ein Gauge schwankt
Eine Metrik ist eine Zahl, die ein Dienst über sich selbst bereitstellt. Im Lab liest ein kleines Programm, der Exporter, die Statusseite von nginx und bietet die Zahlen an. Prometheus holt sie alle fünf Sekunden ab und speichert sie mit der Zeit.
Ein Counter wächst nur: die Anfragen seit dem Start. Ein Gauge bewegt sich in beide Richtungen: die Verbindungen, die jetzt offen sind.
Der Prometheus des Labs beantwortet Fragen über das Web. Der erste Run fragt, welche Ziele antworten.
Welche Ziele antworten?
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=up'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Nach einem Gauge fragen
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=nginx_connections_active'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Nach einem Counter fragen
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=nginx_http_requests_total'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Rate macht aus einem Counter ein Tempo
Ein Counter mit dem Stand 72 sagt wenig. Waren es 72 an einem Tag oder in einer Minute?
Die Rate ist das Wachstum geteilt durch die Sekunden. Stieg ein Counter in 8 Sekunden von 19 auf 72, wuchs er um 53. Die Rate ist 53 geteilt durch 8.
Rechnen Sie es erst selbst. Senden Sie dann fünfzig Besuche an den Webserver und fragen Sie Prometheus nach der Rate der letzten Minute.
Die Rate von Hand
vorher = 19
nachher = 72
sekunden = 8
print((nachher - vorher) / sekunden)
# Setzen Sie sekunden auf 4. Ist der Dienst jetzt mehr oder weniger beschäftigt?Fünfzig Besuche senden
curl -s -o /dev/null "http://app:8080/?n=[1-50]"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Nach der Rate pro Sekunde fragen
curl -s -G -w "\n" http://prometheus:9090/api/v1/query --data-urlencode 'query=rate(nginx_http_requests_total[1m])'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Perzentil zeigt die langsamen Wenigen
Zehn Kundinnen und Kunden warten 20, 22, 25, 25, 28, 28, 31, 35, 40 und 950 Millisekunden. Der Durchschnitt ist 120,4. So lange hat niemand gewartet.
Das 90. Perzentil ist die Zeit, die neun von zehn nicht überschritten haben. Sortieren Sie die Zeiten und nehmen Sie die neunte: 40.
Der Server des Labs veröffentlicht keine Zeiten, Sie rechnen dieses Beispiel also von Hand.
Beispiel: zehn Wartezeiten
| Maß | Wert | Was es sagt |
|---|---|---|
| Durchschnitt | 120,4 ms | Eine Zahl, die niemand erlebt hat |
| Median, das 50. Perzentil | 28 ms | Die Hälfte wartete so lange oder kürzer |
| 90. Perzentil | 40 ms | Neun von zehn warteten so lange oder kürzer |
| Langsamste | 950 ms | Eine Person wartete fast eine Sekunde |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Dieselben Zahlen im Code
zeiten = [20, 22, 25, 25, 28, 28, 31, 35, 40, 950]
summe = 0
for zeit in zeiten:
summe = summe + zeit
print("Durchschnitt", summe / len(zeiten))
print("Median", zeiten[4])
print("90. Perzentil", zeiten[8])
# Setzen Sie 950 auf 45. Welche Zahl bewegt sich am meisten?Ein häufiger Irrtum
Warnung
Viele glauben, die durchschnittliche Zeit zeige, wie sich Nutzende fühlen. Wenige sehr langsame Anfragen ziehen sie hoch, viele schnelle verbergen sie. Lesen Sie den Median für den üblichen Fall und ein hohes Perzentil für den unglücklichen.
Ein Alarm ist eine Regel über eine Metrik
Niemand kann den ganzen Tag auf eine Kurve starren. Ein Alarm ist eine Regel, die eine Metrik für Sie beobachtet. Sie sagt: "Bleibt das für diese Zeit falsch, melde es jemandem."
Die Zeit zählt. Ein Ausschlag von einer Sekunde soll niemanden wecken. Prometheus hält seine Regeln in einer Liste. Eine neue Kopie des Labs hat noch keine, der nächste Run zeigt also eine leere Liste.
Die Regeln von Prometheus auflisten
curl -s -w "\n" http://prometheus:9090/api/v1/rulesHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Weiterführend: kurzes und langes Fenster
Senden Sie 300 Besuche mit curl -s -o /dev/null "http://app:8080/?n=[1-300]". Fragen Sie danach nach rate(nginx_http_requests_total[1m]) und nach rate(nginx_http_requests_total[5m]).
Stellen Sie beide Fragen zwei Minuten später noch einmal. Erklären Sie, warum das kurze Fenster stärker ausschlägt und das lange länger erhöht bleibt.