Start / Seminare / Observability mit OpenTelemetry, Prometheus und Grafana
Modul
Histogramme, Quantile und Exemplars
4 Kapitel in diesem Modul-Video · Laufzeit
Transkript
Der gesprochene Text dieses Moduls zum Mitlesen, Überfliegen und Durchsuchen. Ein Klick auf einen Zeitstempel springt an die Stelle im Video.
Histogramme, Quantile und Exemplars
0:00 Dieses Modul räumt mit einer Zahl auf, die in fast jedem Dashboard steht und fast nichts aussagt: dem Mittelwert der Antwortzeit. Der Mittelwert ist die Zahl, die niemand erlebt hat. Wenn neun Nutzer eine schnelle Antwort bekommen und einer zwanzig Sekunden wartet, sagt der Durchschnitt „alles gut" — und der zehnte Nutzer ruft beim Support an.
0:19 Wir schauen uns deshalb an, wie man Latenz als Verteilung erfasst, wie man daraus Perzentile berechnet, und wie man von einer auffälligen Stelle direkt zum konkreten Vorgang springt.
Histogramme, Quantile und Exemplars
0:29 Drei Kapitel. Zuerst die drei Bauarten, mit denen sich eine Verteilung erfassen lässt, und die aktuelle Empfehlung dazu. Dann die Berechnung von Quantilen, wo es eine Regel gibt, gegen die erstaunlich oft verstoßen wird. Und zum Schluss Exemplars — die Brücke von der aggregierten Metrik zum einzelnen Trace. Damit schließt sich der Bogen, den wir in Modul zwei mit der Signalkombination begonnen haben.
Latenz als Verteilung
0:53 Fangen wir mit der Erfassung an. Es gibt drei Bauarten, die dasselbe Ziel verfolgen — eine Verteilung abbilden — und sie unterscheiden sich erheblich darin, was sie Ihnen später erlauben. Die Wahl fällt bereits bei der Instrumentierung und ist danach schwer zu korrigieren, weil eine Umstellung die historischen Daten unvergleichbar macht.
1:12 Es lohnt sich also, sie einmal bewusst zu treffen. Ein klassisches Histogramm erfasst Beobachtungen in Buckets mit fest vorgegebenen Grenzen — daraus entstehen mehrere Zeitreihen mit den Endungen für Bucket, Summe und Anzahl. Ein Summary berechnet die Quantile bereits im Programm, liefert also fertige Zahlen. Und ein Native Histogram legt Anzahl, Summe und dynamisch erzeugte exponentielle Buckets in einer einzigen Zeitreihe ab.
1:37 Der entscheidende Unterschied liegt im Wort „dynamisch": Beim Native Histogram müssen Sie die Grenzen nicht vorher kennen. Und vorher kennt man sie fast nie. Die Stärken und Schwächen sind hier sehr ungleich verteilt. Klassisch ist überall unterstützt — das ist ein echtes Argument in heterogenen Umgebungen —, verlangt aber die Grenzen im Voraus.
1:57 Ein Summary ist schnell abzufragen und hat einen Makel, der alles andere überwiegt: Es ist nicht aggregierbar, dazu gleich mehr. Nativ ist auflösend und sparsam und die jüngste der drei Bauarten. Die Fußzeile gibt die Empfehlung der Dokumentation eindeutig wieder: wo möglich Native Histograms, vor klassischen Histogrammen und Summaries.
2:18 Das Zahlenbeispiel steht gleich im ersten Punkt: Zehn schnelle Anfragen und eine sehr langsame ergeben einen unauffälligen Schnitt. Die Verteilung dagegen zeigt, wie viele Nutzer wie lange gewartet haben. Und erst sie erlaubt eine Aussage der Form: 95 von 100 warten weniger als zwei Sekunden. Das ist eine Aussage, die ein Mensch versteht und über die man verhandeln kann. Der vierte Punkt zeigt, wohin das führt: Genau diese Form braucht jedes Service Level Objective.
2:46 Deshalb steht dieses Modul direkt vor Modul achtzehn. Der erste Punkt ist der Mittelwert — wir haben genug darüber gesagt. Der zweite ist ein Handwerksfehler bei klassischen Histogrammen: geratene Bucket-Grenzen, die den interessanten Bereich verfehlen. Wenn Ihre Grenzen bei einer und bei zehn Sekunden liegen, Ihr Zielwert aber bei zwei, wird jede Berechnung ungenau.
3:07 Der dritte ist der Summary-Fehler, der auf der nächsten Folie ausführlich kommt. Und der vierte ist ein Planungsthema: Geänderte Grenzen machen historische Daten unvergleichbar — noch ein Argument für Native Histograms.
Native Histograms und Quantile
3:20 Jetzt zur Auswertung. Ein Histogramm allein ist eine Ansammlung von Zählern und sagt Ihnen wenig. Interessant wird es durch die Funktion, die daraus ein Perzentil berechnet — eine Aussage der Form: so lange warten fünfundneunzig von hundert Nutzern höchstens. Die Funktion ist einfach zu benutzen und hat zwei Fallstricke, die man kennen sollte, bevor man Zahlen weitergibt.
3:42 Die Quantilfunktion berechnet ein Quantil zwischen null und eins und interpoliert dabei linear innerhalb der Bucket-Grenzen. Dieser Halbsatz ist wichtig: Sie bekommen keinen gemessenen Wert, sondern eine Schätzung. Bei klassischen Histogrammen aggregieren Sie zusätzlich über das Label für die Bucket-Obergrenze, bei Native Histograms entfällt das.
4:02 Und die Genauigkeit hängt von der Bucket-Breite ab — je breiter der Bucket, in dem Ihr Quantil liegt, desto gröber die Schätzung. Bei Native Histograms mit hoher Auflösung bleibt der Fehler klein. Zwei Abfragen für dasselbe Ergebnis, und der Unterschied ist genau ein Detail. Bei der nativen Variante summieren Sie einfach die Rate.
4:21 Bei der klassischen brauchen Sie die Gruppierung über das Bucket-Label — sonst kann die Funktion die Buckets nicht zuordnen. Die Fußzeile enthält die Warnung: Wer das bei der klassischen Bauart weglässt, bekommt kein Ergebnis und sucht meist lange. Merken Sie sich das als Erkennungszeichen — sobald Sie in einer fremden Abfrage diese Gruppierung sehen, wissen Sie, dass dort ein klassisches Histogramm liegt.
4:45 Das ist die Regel, gegen die am häufigsten verstoßen wird. Histogramme summieren sich über Instanzen hinweg sauber auf, weil man Zähler addieren darf. Vorberechnete Quantile eines Summary sind dagegen nicht mittelbar — der Mittelwert zweier Perzentile ist statistisch ohne Bedeutung. Stellen Sie sich vor, Sie hätten von zwei Schulklassen jeweils die Durchschnittsnote und würden daraus den Durchschnitt der Jahrgangsstufe bilden — bei unterschiedlichen Klassengrößen stimmt das schon nicht mehr.
5:11 Bei Perzentilen ist es noch schlimmer. Deshalb gilt bei replizierten Diensten faktisch immer das Histogramm. Der erste Punkt ist die gerade besprochene erfundene Zahl. Der zweite ist ein Genauigkeitsthema — das 99. Perzentil aus zwei Buckets interpoliert ist eine sehr grobe Schätzung, die man nicht auf die Kommastelle diskutieren sollte.
5:32 Der dritte ist ein Verständnisfehler mit Folgen in Diskussionen: Ein Perzentil ist keine Obergrenze. Dass das 95. Perzentil bei zwei Sekunden liegt, heißt nicht, dass niemand länger wartet — im Gegenteil, jeder zwanzigste tut es. Und der vierte sind ungünstig gelegte Grenzen, die den Zielwert verfehlen.
Von der Metrik zum Trace
5:51 Kommen wir zum schönsten Teil dieses Moduls. Bisher waren Metriken und Traces zwei getrennte Welten: Die eine zeigt die Gesamtheit, die andere den Einzelfall, und dazwischen liegt im Störfall mühsame Handarbeit. Exemplars schlagen eine Brücke — mit erstaunlich wenig Aufwand und mit einem Zeitgewinn, den man erst schätzt, wenn man den Weg einmal ohne sie gegangen ist.
6:12 Ein Exemplar ist ein einzelner Messwert, der zusätzlich die Trace-ID des Vorgangs trägt, in dem er entstanden ist. Damit lässt sich von einer auffälligen Stelle in der Metrik unmittelbar zu einem konkreten Trace springen. Stellen Sie sich eine Statistik vor, bei der an einzelnen Datenpunkten eine Fußnote hängt: „Dieser Ausreißer war Vorgang soundso". Genau das ist ein Exemplar.
6:34 Der Sprung von der Aggregation zum Einzelfall, der uns in Modul zwei als teuerster Teil der Analyse begegnet ist, wird damit zu einem Klick. Vier Stationen, und in der Praxis dauert dieser Weg etwa zehn Sekunden. Sie sehen eine Latenzspitze im Diagramm. Daran hängt ein Exemplar. Das Exemplar führt zum Trace. Der Trace zeigt die Ursache.
6:55 Vergleichen Sie das mit dem Weg ohne Exemplars: Sie notieren den Zeitpunkt, wechseln ins Trace-Backend, suchen nach Traces in diesem Zeitfenster, filtern nach Dauer — und hoffen, dass genau der interessante Vorgang nicht dem Sampling zum Opfer gefallen ist. Das ist der Unterschied zwischen zehn Sekunden und einer Viertelstunde.
7:15 Vier Punkte, davon zwei zur Einordnung. Ohne Exemplar beginnt die Suche bei null, und die Zeitfenster stimmen selten genau. Aber — und das ist wichtig für die Erwartungshaltung — ein Exemplar ist eine Stichprobe, kein vollständiger Nachweis. Sie sehen einen von vielen Vorgängen, nicht den schlimmsten. Der vierte Punkt ist die gute Nachricht: Es kostet wenig, weil je Zeitfenster nur wenige Exemplare entstehen.
7:40 Der Nutzen ist also erheblich größer als der Aufwand, und das kann man nicht von jeder Observability-Funktion sagen. Der erste Punkt ist häufig und ärgerlich: Exemplars werden erzeugt, sind aber im Backend nicht aktiviert — dann sieht man nichts und hält die Funktion für kaputt. Der zweite ist der Zusammenhang mit Modul zehn: Der Trace hinter dem Exemplar ist weggesampelt. Deshalb sollten Sampling-Regeln und Exemplars aufeinander abgestimmt sein.
8:06 Der dritte ist ein Denkfehler — aus einem Exemplar wird auf die Gesamtheit geschlossen. Und der vierte ist Konfiguration: Die Datenquelle kennt das Trace-Backend nicht, und der Absprung fehlt. Das richten wir in Modul fünfzehn ein.
Übung
8:20 In der Übung ersetzen Sie einen Mittelwert durch eine Verteilung und gehen den Weg von der Latenzspitze zum Trace einmal komplett. Am Ende sollen Sie beziffern können, was der Mittelwert verdeckt hat — mit einer Zahl, nicht mit einem Gefühl. Genau diese Zahl brauchen Sie später, wenn Sie in Ihrer Organisation erklären müssen, warum ein Dashboard umgebaut gehört.
8:41 Drei Ergebnisse: Das 95. Perzentil der Auszahlungsdauer liegt vor, der Unterschied zum vorherigen Mittelwert ist beziffert, und von der höchsten Spitze führt ein Absprung zum Trace. Der Hinweis verlangt zusätzlich eine schriftliche Begründung, warum der Mittelwert die Störung verdeckt hat. Das klingt nach Fleißarbeit und ist ein Argument, das Sie in Ihrer Organisation noch oft brauchen werden — spätestens wenn jemand fragt, warum das Dashboard umgebaut werden soll.
9:07 Der rote Faden geht von der Messung über die Erkenntnis zur Navigation. Erst die gemittelte Latenz durch ein Histogramm ersetzen, dann das Perzentil berechnen und mit dem Mittelwert vergleichen. Im dritten Schritt erklären Sie den Unterschied — das ist der Lernschritt. Dann aktivieren Sie Exemplars und machen sie im Diagramm sichtbar.
9:26 Und im fünften springen Sie von der höchsten Spitze zum Trace und benennen die Ursache. Die Fußzeile nennt die häufigste Enttäuschung: Fehlt der Trace hinter dem Exemplar, greift Ihr Sampling aus Modul zehn zu hart. Der erste Punkt ist eine halbe Übung — das Perzentil wird berechnet, aber nie gegen den Mittelwert gehalten; dann fehlt die Pointe.
9:46 Der zweite sind Bucket-Grenzen auf Vorgabewerten, die den Zielbereich verfehlen. Der dritte ist die klassische Konfiguration ohne Gegenprobe: Der Absprung ist eingerichtet, aber nie an einem echten Fall geprüft. Und der vierte ist eine Haltungsfrage, die dieses ganze Seminar durchzieht — die Ursache wird vermutet statt im Trace abgelesen. Sie haben den Trace jetzt. Lesen Sie ihn.
Lieber mit Trainer? Dieses Modul ist Teil unserer Team-Schulungen — mit Übungen, Ihrem eigenen Code und Fragen, die ein Video nicht beantwortet. Mehr erfahren →