- Welche Operation die Anfrage gestartet hat.
- Wo die Anfrage Zeit verbraucht hat.
- Welche untergeordnete Operation einen Fehler zurückgegeben hat.
- Welche Logs, Issues, Aktionen und Metriken dieselbe Trace-ID haben.
- Welcher Dienst, welche Umgebung und welches Release jeden Span gesendet hat.
Felder von Trace und Span
Ein Root-Span startet einen Trace und hat keinen übergeordneten Span.
Child-Spans haben dieselbe Trace-ID, eigene Span-IDs und eine Parent-ID. Nur
diese IDs verbinden Operationen. Zeitstempel allein tun das nicht. LogBrew
zählt einen Span nur dann als Fehler-Span, wenn sein
status gleich error
ist.
Eine Anfrage über mehrere Dienste
- Der Web-Dienst startet einen Server-Span für die Checkout-Route.
- Ein Zahlungs-Client erstellt einen Child-Span für seine ausgehende HTTP-Anfrage.
- Der Zahlungsdienst setzt den Trace mit einem eigenen Server-Span fort.
- Eine Datenbank-Hilfsfunktion zeichnet einen Child-Span für den Schreibvorgang auf.
- Die App sendet ein sicheres Fehler-Log innerhalb des aktiven Zahlungs-Span.
Kontext weitergeben
LogBrew-SDKs verwenden W3C Trace Context. Das Node.js-SDK setzt zum Beispiel einen gültigen eingehendentraceparent-Header mit einem neuen Anfrage-Span
fort. Fehlt der Header oder ist er ungültig, startet es einen neuen Root.
Logs, Issues, Aktionen und Metriken, die innerhalb dieses Anfragebereichs
erfasst werden, tragen den Trace der Anfrage.
Die Instrumentierung für ausgehende Aufrufe schreibt einen
traceparent-Header nur an die Ziele, die Sie konfigurieren, zum Beispiel
über tracePropagationTargets. Senden Sie Trace-Kontext nur an vertrauenswürdige,
instrumentierte Dienste. Eine Trace-ID korreliert Operationen. Sie ist keine
Authentifizierung.
Auch eine Queue-Nachricht kann Trace-Kontext tragen. Rufen Sie in Node.js in
der Producer-Operation createLogBrewQueueTraceHeaders() auf, um der
Nachricht einen traceparent-Header hinzuzufügen. Übergeben Sie diesen Header
im Consumer als traceparent an queueOperationWithLogBrewSpan(). Siehe
Queue-Tracing in JavaScript.
Die Integrationen für Anfragen und ausgehende Aufrufe in Node.js und Python
zeichnen in Spans weder Anfrage- oder Antwort-Bodys noch Query-Strings,
beliebige Header oder den rohen traceparent-Wert auf. Benennen Sie Spans
nach Routen-Templates, nicht nach konkreten URLs. Die Integrationen für Ihre
Laufzeitumgebung beschreibt der
Leitfaden zur SDK-Integration.
Erfassungs-Spans
LogBrew speichert jedes neue Log, Issue, jede Aktion und jede Metrik mit einer Trace-ID. Verweist ein Signal in derselben Übermittlung auf keinen Span, fügt LogBrew dafür einen Erfassungs-Span hinzu:
Die
span_id des Signals kennzeichnet dann seinen Erfassungs-Span. Hatte das
Signal keinen Trace-Kontext, erstellt LogBrew dafür eine neue Trace-ID. Dieser
Trace zeigt, dass LogBrew das Signal gespeichert hat. Er zeigt keinen
Anfragepfad. Lesen Sie die Erfassungs-Spans in einem Trace nicht als eine
einzige Anfrage.
Erfassungs-Spans zählen in span_count und error_span_count mit. Deshalb
kann ein Fehler-Log dazu führen, dass --status error einen Trace auswählt,
in dem keine Operation der Anwendung fehlgeschlagen ist. Lesen Sie die
operation jedes Fehler-Span, bevor Sie einen Schluss ziehen.
Trace lesen
Verwenden Sie eine exakte Trace-ID aus einem Log, einem Issue oder einer Trace-Liste:--status error wählt Traces mit mindestens einem Fehler-Span aus.
--status ok wählt Traces ohne Fehler-Span aus. --min-duration-ms 500
wählt Traces aus, die 500 Millisekunden oder länger gelaufen sind.
Lesen Sie zuerst die Dauer des Root-Span. Untersuchen Sie dann die längsten
Child-Spans und die Fehlerstatus. Behalten Sie Projekt, Dienst, Umgebung und
Release im Blick, damit ein Trace aus Staging nicht als Beleg für die Produktionsumgebung
gilt.
Ein Trace zeigt eine einzelne Ausführung, keine Leistungs-Baseline. Bevor Sie
eine Leistungsänderung vorschlagen, vergleichen Sie mehrere Traces mit dem
Verlauf der zugehörigen Metrik.
Trace-Zusammenfassung
GET /api/telemetry/traces/{trace_id}/summary liefert eine Zusammenfassung
ohne Span-Attribute:
Hat
root_span.parent_span_id einen Wert, liegt der echte Root-Span nicht im
Trace. Lesen Sie root_span dann nicht als Beginn der Anfrage.
Trace erklären
logbrew explain trace liefert eine Trace-Untersuchung:
analysis.causality ist evidence_only. Die Analyse beweist keine
Grundursache. Die CLI fordert Antwortversion 3 an. Darin hat jedes zugehörige
Issue, jede Aktion und jede Metrik zusätzlich ihre exakte span_id.
Um einen Span mit seinem übergeordneten Span, seinen Child-Spans und den
Grenzen zwischen Diensten zu untersuchen, führen Sie Folgendes aus:
topology.parent_chain_status zeigt, ob die Kette übergeordneter Spans
vollständig ist:
Fehlender Trace-Kontext
Nicht jedes Ereignis hat einen Trace seiner Anfrage. Lesen Sie den Zustand des Trace:not_linked ist kein Fehler. Auch ein Trace mit available kann zeigen,
dass das Ereignis keinen Anfragekontext hatte. Hat der Erfassungs-Span des
Ereignisses keine parent_span_id, war beim Erfassen des Ereignisses kein
Span aktiv. Hintergrundarbeit außerhalb eines Anfragebereichs führt oft zu
diesem Ergebnis. So finden Sie eine fehlende Beziehung:
- Lesen Sie Projekt, Dienst, Umgebung, Release und Zeitpunkt des Ereignisses.
- Prüfen Sie, ob die Arbeit innerhalb einer instrumentierten Anfrage oder Operation gelaufen ist.
- Prüfen Sie, ob die Client- und Server-Integrationen den Kontext über diese Grenze weitergeben.
- Erfassen Sie nach der Korrektur der Instrumentierung ein neues Ereignis, und lesen Sie es.
Tracing für ein Projekt planen
Beginnen Sie mit einer wichtigen Anfrage oder einem wichtigen Job, zum Beispiel dem Checkout. Instrumentieren Sie jeweils eine Grenze:- Erstellen Sie einen Span für die eingehende Anfrage oder die Hintergrundoperation.
- Fügen Sie Child-Spans für wichtige ausgehende Aufrufe hinzu.
- Setzen Sie W3C Trace Context über vertrauenswürdige Dienstgrenzen fort.
- Senden Sie ein sicheres Log innerhalb des aktiven Span.
- Lesen Sie dieses Log, öffnen Sie seine Trace-ID, und prüfen Sie Root, Child-Spans, Dienst, Umgebung, Release, Status und Dauer.
logbrew traces --project "<project_id>" --pagination cursor --json aus. Das
Objekt naming_quality zählt die Traces auf dieser Seite mit einem
generischen Root-Namen (generic_name_traces) oder einer nicht zugeordneten
Route (unmatched_route_traces). Muss die Benennung verbessert werden, ist
naming_quality.next_action.code gleich improve_trace_naming.