Request tracking allows you to trace requests through your system using unique request IDs. This is essential for debugging distributed systems, correlating logs across services, and tracking user journeys through your application.
Request IDs enable tracing across multiple services:
1
API Gateway adds request ID
// API Gatewayapp.use((req, res, next) => { if (!req.headers['x-request-id']) { req.headers['x-request-id'] = generateUUID(); } next();});
2
Service A logs with request ID
// Service A - User Serviceapp.use(logger({ autoGenerateRequestId: false // Use existing ID from gateway}));
3
Service A forwards request ID to Service B
// Service A makes request to Service Bconst response = await fetch('https://service-b/api/data', { headers: { 'X-Request-ID': req.headers['x-request-id'] }});
4
Service B logs with same request ID
// Service B - Payment Serviceapp.use(logger({ autoGenerateRequestId: false}));
Now all logs across both services share the same request ID for correlation.
// For microservices: use existing request IDs from gatewayapp.use(logger({ autoGenerateRequestId: false, // Gateway provides IDs customFormatter: (logData) => ({ ...logData, service: process.env.SERVICE_NAME, environment: process.env.NODE_ENV })}));
// For standalone API: generate IDs automaticallyapp.use(logger({ autoGenerateRequestId: true, // Generate IDs for all requests onLog: async (logData) => { // Send to centralized logging with request ID await loggingService.log({ requestId: logData.requestId, timestamp: logData.timestamp.request, data: logData }); }}));
// Hybrid: respect existing IDs but generate if missingapp.use(logger({ autoGenerateRequestId: true, // Generate only if not present customFormatter: (logData) => ({ ...logData, // Tag source of request ID requestIdSource: logData.requestId?.includes('-') ? 'client' : 'server' })}));
With request IDs in your logs, you can easily trace complete request flows:
# Query all logs for a specific requestgrep "550e8400-e29b-41d4-a716-446655440000" application.log# In ElasticsearchGET /logs/_search{ "query": { "match": { "requestId": "550e8400-e29b-41d4-a716-446655440000" } }}# In CloudWatch Logsfilter @requestId = "550e8400-e29b-41d4-a716-446655440000"