A propagação de contexto de rastreamento transfere metadados — IDs de rastreamento, IDs de span e decisões de amostragem — entre services em uma aplicação distribuída. Isso permite correlacionar todos os spans de uma solicitação em um único rastreamento de ponta a ponta.
O Application Real-Time Monitoring Service (ARMS) oferece suporte a cinco protocolos de propagação de rastreamento.
|
Protocolo |
Tipo |
Prefixo do cabeçalho |
|
EagleEye |
Proprietário da Alibaba Cloud |
|
|
W3C Trace Context |
Padrão W3C |
|
|
Zipkin (B3) |
Código aberto |
|
|
Jaeger |
Código aberto |
|
|
SkyWalking |
Código aberto |
|
Protocolo EagleEye
O EagleEye é um protocolo proprietário da Alibaba Cloud, desenvolvido pelo ARMS e amplamente utilizado nos services da Alibaba Cloud.
Campos de cabeçalho
|
Cabeçalho |
Descrição |
Exemplo |
|
|
Identificador de rastreamento (string aleatória de 32 bits). |
-- |
|
|
Relação hierárquica entre spans. |
|
|
|
Identificador de span (número inteiro longo aleatório). Compatível com campos redundantes de código aberto. |
-- |
|
|
Identificador do span pai (número inteiro longo aleatório). Compatível com campos redundantes de código aberto. |
-- |
|
|
Sinalizador de amostragem. |
-- |
|
|
Nome da aplicação upstream. |
-- |
|
|
Interface da aplicação upstream. |
-- |
|
|
Dados de baggage propagados com o rastreamento. |
|
Protocolo W3C Trace Context
A especificação W3C Trace Context é um padrão neutro em relação a fornecedores, definido pelo World Wide Web Consortium (W3C).
Campos de cabeçalho
|
Cabeçalho |
Formato |
Exemplo |
|
|
|
|
|
|
O tracestate transporta o estado de rastreamento específico do fornecedor e é usado em conjunto com o traceparent. Os membros são separados por vírgulas (,), por exemplo: vendor1=value1,vendor2=value2. |
|
Os conceitos de tracestate e Baggage têm finalidades distintas. O W3C Baggage utiliza um cabeçalho HTTP separado para propagar contexto definido pelo usuário entre services. As entradas são separadas por vírgulas, como no exemplo: baggage: tenant_id=t1,region=cn. Esta descrição refere-se ao formato W3C; o suporte e a ativação dependem da implementação e configuração do agente ARMS.
Protocolo Zipkin (B3)
O formato de propagação B3 é utilizado pelo Zipkin.
Campos de cabeçalho
|
Cabeçalho |
Descrição |
Exemplo |
|
|
Identificador de rastreamento de 32 bits. |
|
|
|
Identificador de span de 16 bits. |
|
|
|
Identificador do span pai de 16 bits. |
|
|
|
Sinalizador de amostragem. |
|
|
|
Prefixo para dados de baggage. Adicione o nome da chave após o prefixo. |
|
Protocolo Jaeger
O formato de propagação Jaeger é utilizado pelo Jaeger.
Campos de cabeçalho
|
Cabeçalho |
Formato |
Exemplo |
|
|
|
|
|
|
Prefixo para dados de baggage. Adicione o nome da chave após o prefixo. |
|
Protocolo SkyWalking
O formato de propagação SkyWalking é utilizado pelo Apache SkyWalking.
Cabeçalho sw8
O cabeçalho sw8 é composto por oito campos separados por hífens. Todos os valores do tipo string devem estar codificados em Base64. O comprimento total do cabeçalho deve ser inferior a 2.000 caracteres.
|
Campo |
Posição |
Descrição |
|
Sample |
1 |
|
|
Trace ID |
2 |
Identificador único de rastreamento. String codificada em Base64 composta por três valores longos separados por pontos ( |
|
Parent trace segment ID |
3 |
Identificador de segmento globalmente único. String codificada em Base64. |
|
Parent span ID |
4 |
|
|
Parent service |
5 |
String codificada em Base64. Deve exceder 50 caracteres UTF-8. |
|
Parent service instance ID |
6 |
String codificada em Base64. Deve exceder 50 caracteres UTF-8. |
|
Parent service endpoint |
7 |
Endpoint do primeiro span de entrada no segmento de rastreamento pai. String codificada em Base64. Deve exceder 50 caracteres UTF-8. |
|
Destination URL |
8 |
URL do service de destino. O formato pode diferir de |
Exemplo:
1-TRACEID-SEGMENTID-3-PARENT_SERVICE-PARENT_INSTANCE-PARENT_ENDPOINT-IPPORT
Cabeçalho sw8-x
O cabeçalho sw8-x transporta campos de extensão, também separados por hífens. Os campos podem ser estendidos conforme necessário.
O modo de rastreamento aceita null, 0 ou 1:
nullou0(padrão): Nenhum span gerado no contexto atual será analisado. O contexto é propagado para upstream por padrão, a menos que haja alteração durante o rastreamento.1: Os spans são analisados.
Funcionamento
O agente ARMS seleciona automaticamente o protocolo de propagação de rastreamento com base nos cabeçalhos presentes em cada solicitação recebida.
Fluxo de seleção
Considere um rastreamento que passa pelos services A, B e C. Ao receber uma solicitação, o agente ARMS segue esta lógica:
-
Verifique os cabeçalhos da solicitação em busca de campos específicos do protocolo. A verificação segue uma ordem de prioridade fixa:
Versão do agente ARMS
Ordem de prioridade (da maior para a menor)
v4.5.x e posteriores
W3C > EagleEye > SkyWalking > Jaeger > Zipkin
v4.x até v4.4.x
EagleEye > W3C > SkyWalking > Jaeger > Zipkin
Anteriores à v4.x
EagleEye > Jaeger > Zipkin > SkyWalking > W3C
Caso encontre um cabeçalho correspondente, o agente restaura o contexto de rastreamento da solicitação e utiliza o mesmo protocolo para propagar o contexto aos services downstream.
Se nenhum cabeçalho correspondente for encontrado, o agente cria um novo contexto de rastreamento e o propaga usando o protocolo de maior prioridade. Por padrão, trata-se do protocolo EagleEye.
Personalizar a prioridade do protocolo
Para alterar a prioridade padrão do protocolo, acesse Configuration > Custom Configurations e atualize a seção Trace context propagation protocol settings. Para mais detalhes, consulte Trace context propagation protocol settings.