Home > Blog > Desenvolvimento Web
Desenvolvimento Web
JavaScript
Programação

Distributed Tracing no Node.js com OpenTelemetry

Atualizado em: 19 de outubro de 2026

Terminal Linux usado em desenvolvimento e administração de aplicações Node.js

Distributed Tracing no Node.js acompanha uma requisição enquanto ela atravessa gateway, serviços, banco, filas e integrações externas. Cada etapa gera um span; todos compartilham o mesmo trace ID.

Sem tracing, uma falha distribuída aparece como logs isolados. Com contexto propagado, é possível visualizar a árvore de chamadas, latência por componente e ponto exato do erro.

Trace, span e contexto

  • trace: jornada completa da operação;
  • span: uma unidade de trabalho;
  • trace ID: identifica a jornada;
  • span ID: identifica a etapa;
  • parent: relaciona spans.

Propagação W3C

O header traceparent transporta trace ID, parent span e flag de sampling. Não invente um formato próprio quando o padrão W3C atende ao caso.

Instrumentação automática

OpenTelemetry pode instrumentar HTTP, Undici, Express e bibliotecas de banco. Carregue a instrumentação antes dos módulos da aplicação para que hooks sejam aplicados corretamente.

Spans personalizados

const tracer = trace.getTracer('orders');

await tracer.startActiveSpan('calculate-order', async (span) => {
  try {
    span.setAttribute('order.type', 'standard');
    await calculateOrder();
  } catch (error) {
    span.recordException(error);
    span.setStatus({ code: SpanStatusCode.ERROR });
    throw error;
  } finally {
    span.end();
  }
});

Não use dados de alta cardinalidade

Evite IDs de usuário, e-mail ou URL completa como atributos usados para agregação. Atributos podem conter contexto técnico, mas dados sensíveis devem ser redigidos.

Mensageria

Em filas, injete o contexto nos headers da mensagem e extraia no consumidor. O processamento assíncrono pode criar relação parent-child ou span link, dependendo da semântica.

Consulte RabbitMQ no Node.js e Kafka no Node.js.

Banco de dados

Registre sistema, operação e nome lógico do banco. Não coloque SQL completo com parâmetros sensíveis. Spans devem ajudar a identificar queries lentas sem vazar conteúdo.

Logs correlacionados

Inclua trace ID e span ID nos logs. Assim, um alerta de erro pode levar diretamente ao trace correspondente. Veja Pino no Node.js.

Sampling

Respeite a decisão do parent e preserve traces relevantes. Consulte Trace Sampling no Node.js.

Latência

O trace mostra onde o tempo foi gasto: fila, DNS, conexão, serviço ou banco. Combine com deadlines para evitar que uma etapa consuma todo o prazo. Veja Timeout Budget no Node.js.

Exportação OTLP

Envie spans ao OpenTelemetry Collector por OTLP. O collector pode aplicar batch, retry, sampling e exportar para diferentes backends sem acoplar a aplicação a um fornecedor.

Resource attributes

Configure nome do serviço, versão e ambiente. Esses atributos permitem comparar deploys e localizar regressões.

Observabilidade do pipeline

Monitore filas do exporter, falhas de exportação, spans descartados, latência do collector e tamanho dos batches. Tracing não deve derrubar a aplicação quando o backend estiver indisponível.

Erros comuns

  • inicializar instrumentação tarde;
  • não propagar contexto em filas;
  • criar span para cada detalhe irrelevante;
  • registrar payloads sensíveis;
  • não encerrar spans;
  • exportar sincronicamente por requisição;
  • usar tracing sem logs e métricas correlacionados.

Conclusão

Distributed Tracing no Node.js revela a jornada completa de uma operação e permite atribuir latência e falhas ao componente correto. Use propagação W3C, instrumentação automática, spans de negócio seletivos e exportação em batch.

Consulte OpenTelemetry no Node.js, a documentação JavaScript do OpenTelemetry e a especificação W3C Trace Context.

10 melhores cursos de programação em 2026

Descubra os melhores cursos de programação. Aprenda a escolher o curso ideal para iniciar ou avançar na carreira de desenvolvedor

POSTS RELACIONADOS

Ver todos

Seta para a direita