Le contexte de trace et la propagation du contexte sont les mécanismes utilisés pour transmettre des métadonnées entre les opérations et les services afin que Cloud Trace puisse associer des délais individuels dans une trace distribuée complète de bout en bout.
Lorsque votre application gère une requête et appelle des services en aval, elle transmet des identifiants (tels que l'ID de trace, l'ID de délai parent et l'état d'échantillonnage) à l'aide d'en-têtes de requête ou de métadonnées. Les opérations enfants utilisent ce contexte pour renseigner les champs suivants sur les nouveaux délais :
- ID de segment : identifiant unique de l'opération enfant. Si une opération est exécutée plusieurs fois, chaque appel génère un segment avec un ID de segment distinct.
- ID de trace : identifiant unique de la requête globale de bout en bout, fourni par le parent.
- ID du segment parent : identifiant unique du segment parent appelant. Ce champ est
nullpour les délais racines.
À l'aide de ces identifiants partagés, Cloud Trace reconstruit la hiérarchie d'exécution et mesure la latence sur tous les services participants. Le contexte peut également inclure des informations d'état supplémentaires, par exemple si une requête a été échantillonnée.
Protocoles de propagation du contexte
Les sections suivantes décrivent comment des protocoles de requête spécifiques propagent le contexte.
Requêtes HTTP
Pour les requêtes HTTP, la propagation du contexte s'effectue généralement via
des en-têtes HTTP tels que les en-têtes traceparent et tracestate, qui ont été
normalisés par le W3C. L'en-tête traceparent contient les identifiants permettant d'identifier une requête de manière unique. En revanche, l'en-tête tracestate est facultatif et contient des métadonnées spécifiques au fournisseur.
L'en-tête traceparent présente le format suivant :
traceparent: VERSION-TRACE_ID-PARENT_SPAN_ID-TRACE_FLAGS
Les champs de l'en-tête traceparent sont définis comme suit :
VERSIONcorrespond à la version de l'en-tête. Doit être00.TRACE_IDest une valeur hexadécimale de 32 caractères. Elle représente un nombre de 128 bits.PARENT_SPAN_IDest une valeur hexadécimale de 16 caractères qui identifie le segment parent.TRACE_FLAGSest une valeur hexadécimale de deux caractères qui identifie la décision d'échantillonnage du parent. Lorsqu'un parent a échantillonné le délai, la valeur est01.
Google Cloud Les services qui acceptent la propagation du contexte de trace sont généralement compatibles avec
l'en-tête traceparent et l'
ancien en-tête X-Cloud-Trace-Context.
Dans la mesure du possible, utilisez l'en-tête traceparent dans vos
applications. Si une application n'est compatible qu'avec l'en-tête X-Cloud-Trace-Context, nous vous recommandons de la mettre à jour pour qu'elle soit compatible avec l'en-tête traceparent et qu'elle le privilégie. Votre application peut continuer à utiliser l'en-tête X-Cloud-Trace-Context comme solution de secours.
Le tableau suivant récapitule certaines différences importantes entre les deux en-têtes :
| Attribut | traceparenten-tête |
X-Cloud-Trace-Contexten-tête |
|---|---|---|
| Séparateurs | traits d'union (-) |
barre oblique (/) et point-virgule (;) |
| Représentation de l'ID du délai |
Hexadécimal | Décimal |
Ancien en-tête X-Cloud-Trace-Context
L'en-tête X-Cloud-Trace-Context utilisé par Google Cloud est antérieur à la
spécification W3C.
Pour assurer la rétrocompatibilité, certains Google Cloud services continuent d'accepter,
de générer et de propager l'en-tête X-Cloud-Trace-Context. Toutefois, il est probable que ces systèmes soient également compatibles avec l'en-tête traceparent.
L'en-tête X-Cloud-Trace-Context présente le format suivant :
X-Cloud-Trace-Context: TRACE_ID/SPAN_ID;o=OPTIONS
Les champs de l'en-tête sont définis comme suit :
TRACE_IDest une valeur hexadécimale de 32 caractères. Elle représente un nombre de 128 bits.SPAN_IDest une représentation décimale de 64 bits de l'ID de délai non signé.OPTIONSaccepte0(parent non échantillonné) et1(parent échantillonné).
Requêtes gRPC
Pour les requêtes gRPC, la propagation du contexte s'effectue à l'aide de
métadonnées gRPC, qui sont implémentées en plus des en-têtes HTTP.
Les applications gRPC peuvent utiliser l'en-tête traceparent ou une
clé de contexte de métadonnées appelée grpc-trace-bin.
Pour les composants dont vous êtes propriétaire, nous vous recommandons d'utiliser l'en-tête traceparent.
Propagation du contexte pour les Google Cloud services
Google Cloud Les services peuvent agir en tant qu'initiateurs ou intermédiaires dans le traitement des requêtes. Par exemple, les services suivants sont connus pour participer au traitement des requêtes :
- Apigee
- App Engine
- Cloud Endpoints
- Cloud Run Functions
- Cloud Load Balancing
- Cloud Run
- Cloud Scheduler
- Cloud Tasks
- Pub/Sub
La compatibilité avec l'initiation et la propagation du contexte de trace dépend du service spécifique Google Cloud . Pour demander à un Google Cloud service d'ajouter la compatibilité avec la propagation du contexte, utilisez l'outil de suivi des problèmes de Google.
Propagation du contexte dans vos applications
Certaines bibliothèques d'instrumentation, telles qu'OpenTelemetry, peuvent propager un objet context contenant les données nécessaires au traçage.
Pour obtenir la liste des bibliothèques OpenTelemetry compatibles avec le traçage, consultez la page
API et SDK de langage.
Si vous utilisez une bibliothèque Open Source, déterminez si la propagation du contexte est disponible et si une configuration est requise.
Par exemple, si vous utilisez OpenTelemetry pour instrumenter une application Go, votre application doit appeler SetTextMapPropagator, qui configure le contexte pour utiliser le format traceparent W3C. Pour obtenir un exemple, consultez
l'exemple d'instrumentation Go.
Lorsqu'aucune bibliothèque d'instrumentation appropriée n'est disponible, vous devez vous assurer que votre application propage le contexte de trace aux opérations enfants.
Étape suivante
En savoir plus sur l'échantillonnage de traces.
Ressources OpenTelemetry :