Implement distributed tracing with correlation IDs, trace propagation, and span tracking across microservices. Use when debugging distributed systems, monitoring request flows, or implementing observability.
Implement correlation IDs and distributed tracing to track requests across multiple services and understand system behavior.
Minimal working example:
import express from "express";
import { v4 as uuidv4 } from "uuid";
// Async local storage for context
import { AsyncLocalStorage } from "async_hooks";
const traceContext = new AsyncLocalStorage<Map<string, any>>();
interface TraceContext {
traceId: string;
spanId: string;
parentSpanId?: string;
serviceName: string;
}
function correlationMiddleware(serviceName: string) {
return (
req: express.Request,
res: express.Response,
next: express.NextFunction,
) => {
// Extract or generate trace ID
const traceId = (req.headers["x-trace-id"] as string) || uuidv4();
const parentSpanId = req.headers["x-span-id"] as string;
const spanId = uuidv4();
// ... (see reference guides for full implementation)
Detailed implementations in the references/ directory:
| Guide | Contents |
|---|---|
| Correlation ID Middleware (Express) | Correlation ID Middleware (Express) |
| OpenTelemetry Integration | OpenTelemetry Integration |
| Python Distributed Tracing | Python Distributed Tracing |
| Manual Trace Propagation | Manual Trace Propagation |