Node.js › Logging & Monitoring

How would you implement distributed tracing across multiple Node.js microservices using OpenTelemetry?

Advanced

Answer

OpenTelemetry is a vendor-neutral standard and set of libraries for generating traces, metrics, and logs -- for distributed tracing specifically, each service creates 'spans' representing units of work, and a trace context (a unique trace ID plus the current span ID) is propagated across service boundaries via HTTP headers, letting a tracing backend (like Jaeger, Zipkin, or a commercial APM tool) reconstruct the full end-to-end path and timing of a single request as it flows through multiple independent services.
const { trace } = require('@opentelemetry/api');
const tracer = trace.getTracer('order-service');

async function processOrder(orderId) {
  const span = tracer.startSpan('process-order');
  try {
    await chargePayment(orderId); // this call automatically propagates trace context via HTTP headers
    span.setStatus({ code: 0 });
  } catch (err) {
    span.recordException(err);
    span.setStatus({ code: 2 });
    throw err;
  } finally {
    span.end();
  }
}
Real-world example A team debugging why a specific customer's checkout occasionally takes eight seconds uses distributed tracing to visualize the full request path across their order, inventory, and payment microservices, immediately spotting that the payment service's fraud-check step is the single slow component responsible for nearly the entire delay.

Common follow-ups: How does trace context propagation actually work at the HTTP header level (the traceparent header) across service boundaries?;What's the sampling tradeoff between tracing every single request versus only a percentage, given the storage cost of full tracing at scale?