Lesson 29 / 30

Monitoring & Observability

Monitor performance and troubleshoot issues in production.

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();
});