Stop drilling requestId and logger objects through twelve layers of function signatures. Here is how to use Node.js AsyncLocalStorage to attach context to the async chain itself, with working Express middleware, auto-enriched logging, and the three pitfalls that break context in production.
When a customer reports a 500 at 3 a.m., your logs decide whether you fix it in ten minutes or two hours. Here is the Pino + correlation-id setup that turns Node.js logs from a wall of text into a searchable timeline — with the queries that actually find bugs in production.
The "logs, metrics, traces" framework gets repeated everywhere and obscures what observability is actually about: asking new questions of your system. Here is the alternative framing — high-cardinality events — and the practical setup that gets you the actual capability.
Distributed tracing only earns its keep at 3 a.m., when one slow request is hiding in a microservice call graph. Here is the OpenTelemetry setup for Node.js that auto-instruments the boring stuff, lets you add the span attributes that matter, and connects to any backend you point it at.