Observability Standards
Priority: P1 (OPERATIONAL)
Logging, monitoring, and observability patterns for production NestJS applications.
Structured Logging (Pino)
Use nestjs-pino for high-performance, async JSON logging. Node's console.log is blocking and unstructured.
Tracing (Correlation)
- Request ID: Every log line must include a
reqId.nestjs-pinohandles this viaAsyncLocalStorage. - Propagation: Pass
x-request-idto downstream microservices and database queries for end-to-end tracing.
Metrics
Expose /metrics for Prometheus scraping using @willsoto/nestjs-prometheus.
Health Checks
- Terminus: Implement "Liveness" (I'm alive) vs "Readiness" (I can take traffic).
- DB Check:
TypeOrmHealthIndicator/PrismaHealthIndicator. - Memory Check: Fail readiness if Heap > 300MB to prevent crash loops.
- DB Check:
Performance Headers (Dev Only)
X-Response-Duration-Ms,X-DB-Execution-Ms,X-API-Overhead-Ms- Gate behind
ENABLE_PERFORMANCE_BENCHMARKfeature flag; never expose in production.
Anti-Patterns
- No console.log: Use nestjs-pino for async, structured, JSON-formatted logging.
- No missing reqId: Propagate
x-request-idheader to all downstream services and queries. - No perf data in production by default: Gate benchmarking behind
ENABLE_PERFORMANCE_BENCHMARKflag.