Lesson 31 / 32

Monitoring & Observability

Monitor Fastify with structured logs, Prometheus metrics and traces to troubleshoot production issues.

Observability pillars

Three pillars: logs (structured via Pino), metrics (request counts, latency), and traces (request paths through your system).

Metrics with Prometheus

Expose metrics in Prometheus format for scraping by monitoring systems.

import promClient from 'prom-client';

const httpRequestDuration = new promClient.Histogram({
  name: 'http_request_duration_ms',
  help: 'Duration of HTTP requests in ms',
  labelNames: ['method', 'route', 'status_code'],
});

fastify.addHook('onResponse', (request, reply, done) => {
  const duration = Date.now() - request.startTime;
  httpRequestDuration.observe({
    method: request.method,
    route: request.url,
    status_code: reply.statusCode,
  }, duration);
  done();
});

fastify.get('/metrics', async () => {
  return promClient.register.metrics();
});