Trace-Kontext und Kontextweitergabe sind die Mechanismen, mit denen Metadaten zwischen Vorgängen und Diensten weitergegeben werden, sodass Cloud Trace einzelne Spans zu einem vollständigen End-to-End-Trace verknüpfen kann.
Wenn Ihre Anwendung eine Anfrage verarbeitet und nachgelagerte Dienste aufruft, werden Kennungen wie die Trace-ID, die übergeordnete Span-ID und der Sampling-Status mithilfe von Anfrageheadern oder Metadaten weitergegeben. Untergeordnete Vorgänge verwenden diesen Kontext, um die folgenden Felder in neuen Spans auszufüllen:
- Span-ID: Eine eindeutige Kennung für den untergeordneten Vorgang. Wenn ein Vorgang mehrmals ausgeführt wird, wird für jeden Aufruf ein Span mit einer eindeutigen Span-ID generiert.
- Trace-ID: Die eindeutige Kennung der gesamten End-to-End-Anfrage, die vom übergeordneten Element bereitgestellt wird.
- Übergeordnete Span-ID: Die eindeutige Kennung des aufrufenden übergeordneten Spans. Dieses Feld ist für Stamm-Spans
null.
Mit diesen freigegebenen Kennungen rekonstruiert Cloud Trace die Ausführungshierarchie und misst die Latenz über alle beteiligten Dienste hinweg. Der Kontext kann auch zusätzliche Statusinformationen enthalten, z. B. ob eine Anfrage gesampeltwurde.
Protokolle für die Kontextweitergabe
In den folgenden Abschnitten wird beschrieben, wie der Kontext mit bestimmten Anfrageprotokollen weitergegeben wird.
HTTP-Anfragen
Bei HTTP-Anfragen erfolgt die Kontextweitergabe in der Regel über
HTTP-Header wie die Header traceparent und tracestate, die vom
W3C standardisiert wurden. Der Header traceparent enthält die Kennungen, mit denen eine Anfrage eindeutig identifiziert wird. Im Gegensatz dazu ist der Header tracestate optional und enthält anbieterspezifische Metadaten.
Der Header traceparent hat das folgende Format:
traceparent: VERSION-TRACE_ID-PARENT_SPAN_ID-TRACE_FLAGS
Die Felder des Headers traceparent sind wie folgt definiert:
VERSIONist die Header-Version. Muss00sein.TRACE_IDist ein aus 32 Zeichen bestehender hexadezimaler Wert, der für eine Zahl mit 128 Bit steht.PARENT_SPAN_IDist ein aus 16 Zeichen bestehender hexadezimaler Wert, der den übergeordneten Span identifiziert.TRACE_FLAGSist ein aus 2 Zeichen bestehender hexadezimaler Wert, der die Sampling-Entscheidung des übergeordneten Elements identifiziert. Wenn ein übergeordnetes Element den Span gesampelt hat, ist der Wert01.
Google Cloud Dienste, die die Weitergabe von Trace-Kontext unterstützen, unterstützen in der Regel
sowohl den traceparent als auch den
Legacy-X-Cloud-Trace-Context Header.
Verwenden Sie nach Möglichkeit den traceparent Header in Ihren
Anwendungen. Wenn eine Anwendung nur den Header X-Cloud-Trace-Context unterstützt, empfehlen wir, die Anwendung so zu aktualisieren, dass sie den Header traceparent unterstützt und priorisiert. Ihre Anwendung kann den Header X-Cloud-Trace-Context weiterhin als Fallback-Lösung verwenden.
In der folgenden Tabelle sind einige wichtige Unterschiede zwischen den beiden Headern zusammengefasst:
| Attribut | traceparent-Header |
X-Cloud-Trace-Context-Header |
|---|---|---|
| Trennzeichen | Bindestriche (-) |
Schrägstrich (/) und Semikolon (;) |
| Darstellung der Span-ID |
Hexadezimal | Dezimal |
Legacy-Header X-Cloud-Trace-Context
Der von Google Cloud verwendete Header X-Cloud-Trace-Context stammt aus der Zeit vor der
W3C-Spezifikation.
Aus Gründen der Abwärtskompatibilität akzeptieren,
generieren und geben einige Google Cloud Dienste den X-Cloud-Trace-Context Header weiterhin weiter. Es ist jedoch wahrscheinlich, dass diese Systeme auch den Header traceparent unterstützen.
Der Header X-Cloud-Trace-Context hat das folgende Format:
X-Cloud-Trace-Context: TRACE_ID/SPAN_ID;o=OPTIONS
Die Felder des Headers sind wie folgt definiert:
TRACE_IDist ein aus 32 Zeichen bestehender hexadezimaler Wert, der für eine Zahl mit 128 Bit steht.SPAN_IDist eine 64-Bit-Dezimaldarstellung der vorzeichenlosen Span-ID.OPTIONSunterstützt0(übergeordnetes Element nicht gesampelt) und1(übergeordnetes Element gesampelt).
gRPC-Anfragen
Bei gRPC-Anfragen erfolgt die Kontextweitergabe mithilfe von
gRPC-Metadaten, die auf HTTP-Headern implementiert sind.
gRPC-Anwendungen können den traceparent-Header oder einen
Metadaten-Kontextschlüssel namens grpc-trace-bin verwenden.
Für Komponenten, deren Inhaber Sie sind, empfehlen wir die Verwendung des Headers traceparent.
Kontextweitergabe für Google Cloud Dienste
Google Cloud Dienste können bei der Verarbeitung von Anfragen als Initiatoren oder Vermittler fungieren. Die folgenden Dienste sind beispielsweise an der Verarbeitung von Anfragen beteiligt:
- Apigee
- App Engine
- Cloud Endpoints
- Cloud Run-Funktionen
- Cloud Load Balancing
- Cloud Run
- Cloud Scheduler
- Cloud Tasks
- Pub/Sub
Die Unterstützung für die Initiierung und Weitergabe von Trace-Kontext hängt vom jeweiligen Google Cloud Dienst ab. Wenn Sie möchten, dass ein Google Cloud Dienst die Kontextweitergabe unterstützt, verwenden Sie den Google Issue Tracker.
Kontextweitergabe in Ihren Anwendungen
Einige Instrumentierungsbibliotheken wie OpenTelemetry können ein context-Objekt weitergeben, das die für das Tracing erforderlichen Daten enthält.
Eine Liste der OpenTelemetry-Bibliotheken, die Tracing unterstützen, finden Sie unter
Sprach-APIs und SDKs.
Wenn Sie eine Open-Source-Bibliothek verwenden, prüfen Sie, ob die Kontextweitergabe verfügbar ist und ob eine Konfiguration erforderlich ist.
Wenn Sie beispielsweise OpenTelemetry verwenden, um eine Go-Anwendung zu instrumentieren, sollte Ihre Anwendung SetTextMapPropagator aufrufen, wodurch der Kontext so konfiguriert wird, dass das W3C-Format traceparent verwendet wird. Ein Beispiel finden Sie unter
Go-Instrumentierungsbeispiel.
Wenn keine geeignete Instrumentierungsbibliothek vorhanden ist, müssen Sie dafür sorgen, dass Ihre Anwendung den Trace-Kontext an untergeordnete Vorgänge weitergibt.
Nächste Schritte
Informationen zum Trace-Sampling
OpenTelemetry-Ressourcen: