O contexto de trace e a propagação de contexto são os mecanismos usados para transmitir metadados entre operações e serviços para que o Cloud Trace possa vincular períodos individuais em um trace distribuído completo de ponta a ponta.
Quando o aplicativo processa uma solicitação e chama serviços downstream, ele transmite identificadores, como o ID do trace, o ID do período pai e o status de amostragem, usando cabeçalhos ou metadados de solicitação. As operações filhas usam esse contexto para preencher os seguintes campos em novos períodos:
- ID do período: um identificador exclusivo para a operação filha. Se uma operação for executada várias vezes, cada invocação vai gerar um período com um ID de período diferente.
- ID do trace: o identificador exclusivo da solicitação geral de ponta a ponta, fornecido pelo pai.
- ID do período pai: o identificador exclusivo do período pai de invocação. Esse campo é
nullpara períodos raiz.
Usando esses identificadores compartilhados, o Cloud Trace reconstrói a hierarquia de execução e mede a latência em todos os serviços participantes. O contexto também pode incluir outras informações de estado, como se uma solicitação foi amostrada.
Protocolos para propagação de contexto
As seções a seguir descrevem como protocolos de solicitação específicos propagam o contexto.
Solicitações HTTP
Para solicitações HTTP, a propagação de contexto é normalmente realizada por
cabeçalhos HTTP, como os cabeçalhos traceparent e tracestate, que foram
padronizados pelo W3C. O cabeçalho traceparent contém os identificadores para identificar uma solicitação de forma exclusiva. Já o cabeçalho tracestate é opcional e contém metadados específicos do fornecedor.
O cabeçalho traceparent tem o seguinte formato:
traceparent: VERSION-TRACE_ID-PARENT_SPAN_ID-TRACE_FLAGS
Os campos do cabeçalho traceparent são definidos da seguinte maneira:
VERSIONé a versão do cabeçalho. Precisa ser00.TRACE_IDé um valor hexadecimal de 32 caracteres que representa um número de 128 bits.PARENT_SPAN_IDé um valor hexadecimal de 16 caracteres que identifica o período pai.TRACE_FLAGSé um valor hexadecimal de 2 caracteres que identifica a decisão de amostragem do pai. Quando um pai amostrou o período, o valor é01.
Google Cloud Os serviços que oferecem suporte à propagação de contexto de trace normalmente oferecem suporte
ao traceparent e ao
cabeçalho legado X-Cloud-Trace-Context.
Sempre que possível, use o traceparent cabeçalho nos
aplicativos. Se um aplicativo só oferece suporte ao cabeçalho X-Cloud-Trace-Context, recomendamos que você o atualize para oferecer suporte e priorizar o cabeçalho traceparent. O aplicativo pode continuar usando o cabeçalho X-Cloud-Trace-Context como uma solução alternativa.
A tabela a seguir resume algumas diferenças significativas entre os dois cabeçalhos:
| Atributo | traceparentcabeçalho |
X-Cloud-Trace-Contextcabeçalho |
|---|---|---|
| Separadores | hifens (-) |
barra para a direita (/) e ponto e vírgula (;) |
| Representação do ID do período |
Codificação | Decimal |
Cabeçalho legado X-Cloud-Trace-Context
O cabeçalho X-Cloud-Trace-Context usado por Google Cloud é anterior à
especificação do W3C.
Para oferecer compatibilidade com versões anteriores, alguns Google Cloud serviços continuam aceitando,
gerando e propagando o X-Cloud-Trace-Context cabeçalho. No entanto, é provável que esses sistemas também ofereçam suporte ao cabeçalho traceparent.
O cabeçalho X-Cloud-Trace-Context tem o seguinte formato:
X-Cloud-Trace-Context: TRACE_ID/SPAN_ID;o=OPTIONS
Os campos do cabeçalho são definidos da seguinte maneira:
TRACE_IDé um valor hexadecimal de 32 caracteres que representa um número de 128 bits.SPAN_IDé uma representação decimal de 64 bits do ID de período não assinado.OPTIONSoferece suporte a0(pai não amostrado) e1(pai amostrado).
Solicitações gRPC
Para solicitações gRPC, a propagação de contexto é realizada usando
metadados gRPC, que são implementados em cabeçalhos HTTP.
Os aplicativos gRPC podem usar o cabeçalho traceparent ou uma
chave de contexto de metadados chamada grpc-trace-bin.
Para componentes que você possui, recomendamos o uso do cabeçalho traceparent.
Propagação de contexto para Google Cloud serviços
Google Cloud Os serviços podem atuar como iniciadores ou intermediários no processamento de solicitações. Por exemplo, os seguintes serviços são conhecidos por participar do processamento de solicitações:
- Apigee
- App Engine
- Cloud Endpoints
- Cloud Run functions
- Cloud Load Balancing
- Cloud Run
- Cloud Scheduler
- Cloud Tasks
- Pub/Sub
O suporte à iniciação e propagação do contexto de trace depende do serviço específico Google Cloud . Para solicitar que um Google Cloud serviço adicione suporte à propagação de contexto, use o Issue Tracker do Google.
Propagação de contexto nos aplicativos
Algumas bibliotecas de instrumentação, como o OpenTelemetry, podem propagar um objeto context que contém os dados necessários para o rastreamento.
Para uma lista de bibliotecas do OpenTelemetry que oferecem suporte ao rastreamento, consulte
APIs e SDKs de linguagem.
Se você usa uma biblioteca de código aberto, determine se a propagação de contexto está disponível e se a configuração é necessária.
Por exemplo, se você usar o OpenTelemetry para instrumentar um app Go, o app vai chamar SetTextMapPropagator, que configura o contexto para usar o formato traceparent do W3C. Para conferir um exemplo, consulte o
exemplo de instrumentação do Go.
Quando não há uma biblioteca de instrumentação adequada, é necessário garantir que o aplicativo propague o contexto de trace para operações filhas.
A seguir
Saiba mais sobre a amostragem de trace.
Recursos do OpenTelemetry: