Verteilte Traces
Die wichtigsten Befehle zum Merken
openssl rand -hex— frische Testkennungen erzeugen.curl -H— eine Anfrage mit ausdrücklichem Tracekontext senden.
Befehle und Optionen
| Befehl oder Syntax | Bedeutung |
|---|---|
openssl rand -hex 16 / -hex 8 |
Sechzehn / acht zufällige Bytes hexadezimal darstellen. |
trace_id=$(…) / parent_id=$(…) |
Werte in Shellvariablen speichern. |
printf 'trace_id=%s\n' "$trace_id" |
Die im Backend zu suchende Kennung ausgeben. |
--silent --show-error --max-time 5 |
Fortschritt verbergen, Fehler zeigen, auf fünf Sekunden begrenzen. |
-i -H 'HEADER' |
Antwortheader mit ausgeben und Anfrageheader senden. |
00-TRACE-PARENT-01 |
W3C-Version, 32-stellige Trace-ID, 16-stellige Parent-ID und Sampled-Flag. |
Der synthetische Aufruferkontext erzeugt und exportiert keinen eigenen Span. Kennungen dienen Korrelation, nicht Authentifizierung.
Die entscheidenden Konzepte
1. Ein Trace verbindet Arbeit eines Ablaufs
Ein verteilter Trace verbindet zeitlich erfasste Operationen einer Anfrage oder eines Workflows. Jede Operation ist ein Span mit Identität, Zeitangaben, Attributen und Beziehungen.
Ein Trace kann Frontend, API-Aufruf und Datenbankabfrage gemeinsam zeigen. Dadurch werden Zeitanteile verständlicher als durch unverbundene Logs. Asynchrone Arbeit kann Links verwenden, wenn ein einfacher Eltern-Kind-Baum nicht genügt.
2. Kontextweitergabe erhält die Beziehung
Ein Dienst empfängt Kontext, erzeugt seinen Span und gibt passenden Kontext an nachgelagerte Aufrufe weiter. W3C traceparent standardisiert zentrale HTTP-Kennungen.
Verwirft ein Abschnitt den Kontext, können getrennte Traces entstehen. Ein Header allein instrumentiert nichts: Der Empfänger muss ihn auswerten und Spans aufzeichnen sowie exportieren. An Vertrauensgrenzen können Validierungs- und Samplingregeln greifen.
3. Spandauer ist vergangene Zeit, kein CPU-Verbrauch
Ein Span kann Warten auf Poolplatz, Netzwerk, Sperre oder weiteren Dienst enthalten. Lange Dauer bedeutet daher nicht zwingend viel Rechenarbeit seines Besitzers.
Verschachtelte Dauern überlappen außerdem. Ihre Summe kann die Anfragegesamtdauer überschreiten. Prüfe entscheidende Reihenfolge und parallele Zweige statt sämtliche Zeilen wie serielle Arbeit zu addieren.
4. Der sichtbare Trace kann unvollständig sein
Sampling bestimmt Aufzeichnung oder Aufbewahrung. Exportfehler, Warteschlangenverluste, fehlende Instrumentierung und Uhrabweichungen beeinflussen die Darstellung zusätzlich.
Das Sampled-Flag ist eine Absicht, keine Aufbewahrungszusage aller Beteiligten. Fehlende Spans beweisen keinen ausgebliebenen Aufruf. Prüfe Regeln und Pipelinegesundheit vor einer vollständigen Ablaufgeschichte aus einem Teiltrace.
Ein kleines Beispiel
Optional: Nutze den instrumentierten Testdienst samt Backend. Führe den Block aus und suche nach der ausgegebenen Trace-ID, nach der normalen Übernahmeverzögerung des Backends.
trace_id=$(openssl rand -hex 16)
parent_id=$(openssl rand -hex 8)
printf 'trace_id=%s\n' "$trace_id"
curl --silent --show-error --max-time 5 -i -H "traceparent: 00-$trace_id-$parent_id-01" http://localhost:8080/
Übernimmt der Dienst den Kontext, sollte ein Serverspan dieselbe Trace-ID und die gesendete Parent-ID besitzen. Der synthetische Elternspan wurde nicht exportiert; seine fehlende Zeile ist normal. Weitere Spans benötigen eigene Instrumentierung und Weitergabe.
HTTP-Ergebnis und Tracesuche prüfen Unterschiedliches. Erfolgreiche Antwort ohne sichtbaren Trace kann Sampling oder Export betreffen. Der Versuch belegt weder vollständige Abdeckung noch exakte rechnerübergreifende Zeitordnung. Konfigurationen bleiben unverändert.
Merke dir: Ein Trace verbindet zeitlich erfasste Arbeit durch Kontextweitergabe. Aussagekraft hängt von Instrumentierung, Sampling und tatsächlicher Aufbewahrung ab.