# Monitoring & Observability — Fastify

Source: https://www.geekswithgeeks.com/en/fastify/ff-monitoring

> 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.

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