A request comes into OrderController, fans out to four downstream services, queues a fulfilment job, returns. When it fails, the support ticket says "the order didn't go through" — and the engineer has nothing but a timestamp and a user ID. With OpenTelemetry properly wired into every NestJS service, the engineer pastes the trace ID into a query and sees the entire request as a single waterfall, with the failing span highlighted in red. This NestJS-specific guide covers auto-instrumentation setup, custom spans for business operations, choosing between Jaeger, Tempo and Honeycomb, correlating traces with logs via trace_id injection, sampling strategy that captures error traces while limiting cost, and the performance overhead in production.