Tracing distribuído mostra onde uma request falhou e por quê, serviço por serviço. Quando a request cruza seis serviços e cada um loga seu pedaço, correlacionar entradas por timestamp vira chute sob carga. Trace IDs costuram a jornada completa.
Spans e contexto W3C
Traces contêm spans: operações nomeadas com duração, atributos e status. Relações pai-filho formam a árvore de execução. O W3C Trace Context propaga contexto via header traceparent através de HTTP, gRPC e filas de mensagem. Siga a spec desde o primeiro dia.
Configuração do SDK
Monte um TracerProvider com exportador OTLP apontando para o collector ou endpoint do vendor. O BatchSpanProcessor dá throughput adequado para produção, em contraste com o SimpleSpanProcessor de testes. Resource attributes declaram service name, versão e ambiente: telemetria sem identificação de origem vira ruído.
Instrumentação: auto ou manual
Comece pelos agents de zero-code para Node, Python e Java: eles cobrem frameworks populares e clients HTTP sem tocar no código. A documentação do OpenTelemetry lista os agents disponíveis para cada linguagem. Restrinja spans manuais às operações críticas de negócio, com nomes estáveis e atributos de domínio (id do pedido, plano do cliente). Nome genérico demais atrapalha a busca no vendor.
Sampling: head ou tail
Head sampling entre 10% e 100% conforme o tráfego decide o que coletar na origem. Tail sampling mantém todos os traces com erro e os outliers lentos, descartando sucessos rotineiros; a decisão pertence ao collector nesse modo. Sem tail sampling, o trace raro do bug difícil escapa.
Deployment do collector
O padrão agent sidecar mais gateway equilibra overhead local com processamento central. Processors cuidam de batching, filtragem e remoção de PII antes do export. Fazer scrubbing no collector evita vazamento de dado sensível para vendors terceiros.
Vendor
Jaeger serve para começar self-hosted; Grafana Tempo aposta em object storage para baratear retenção longa; Datadog e Honeycomb entregam análise gerenciada. OTLP mantém a troca barata: mudar de backend significa trocar o exporter, não instrumentar de novo.
Armadilhas
- Propagação perdida em fronteiras async e thread pools; o trace quebra no meio
- Span explosion com um span por linha de banco; agregue por query, não por row
- Clock skew entre hosts confundindo a visualização em waterfall
Curtiu o conteúdo?
Construo produtos web e soluções com IA do jeito certo — arquitetura sólida, código sustentável e entrega real.
Vamos conversar