Tracing Distribuído
Trace ID, Span e propagação
Fundamentos de contexto distribuido com Trace ID e Span.
Nesta aula você vai
- Compreender estrutura de trace id, span id e parent span
- Propagar contexto entre HTTP e eventos Kafka
- Garantir correlacao ponta a ponta no fluxo de compra
Trace ID, Span e propagação
Objetivos
- Compreender estrutura de trace id e spans
- Propagar contexto entre chamadas HTTP e eventos Kafka
- Garantir correlação de ponta a ponta no fluxo de compra
Pré-requisitos
- Fluxo completo da aplicacao funcionando.
- Conhecimento basico dos pilares de observabilidade.
- Jaeger e OpenTelemetry Collector ativos no ambiente.
Conceito
trace_id identifica a jornada completa da requisicao. Cada operacao dentro dessa jornada cria um span com duracao e metadados.
Para manter continuidade entre servicos, o contexto deve ser propagado no header HTTP (traceparent) e nos headers da mensagem Kafka.
Estrutura de arquivos
services/*/telemetrycontracts/eventsdocs/observability-tracing.mdinfra/tracing/otel-collector.yaml
Passo a passo com codigo
- Extraia contexto no endpoint HTTP:
ctx := otel.GetTextMapPropagator().Extract(r.Context(), propagation.HeaderCarrier(r.Header))
ctx, span := tracer.Start(ctx, "order.create")
defer span.End()
- Injete contexto ao publicar evento no Kafka:
carrier := make(propagation.MapCarrier)
otel.GetTextMapPropagator().Inject(ctx, carrier)
msg.Headers = append(msg.Headers, kafka.Header{Key: "traceparent", Value: []byte(carrier["traceparent"])})
- No consumer, restaure contexto:
carrier = {"traceparent": headers.get("traceparent", "")}
ctx = propagator.extract(carrier=carrier)
with tracer.start_as_current_span("payment.consume.order_created", context=ctx):
process_event(payload)
- Logue
trace_idem todos os servicos.
Como testar
- Crie um pedido no
order-service. - Verifique se
traceparentaparece nos headers Kafka. - Confirme que payment, notification e analytics compartilham mesmo
trace_id. - Abra Jaeger e valide cadeia unica de spans.
Dicas
- Use W3C Trace Context em todas as linguagens.
- Nunca gere novo trace no meio da mesma transacao.
- Defina nomes de span por operacao de negocio.
- Inclua
event_idetrace_idem logs estruturados.
Erros comuns
- Gerar trace id novo em cada serviço
- Não propagar contexto no Kafka
- Confundir correlation id com trace id
- Criar spans sem timestamps úteis
Resumo
Propagacao correta de contexto entre HTTP e Kafka e o que transforma traces em visao real de ponta a ponta do fluxo distribuido.