Observabilidade
Logs
Métricas
Tracing
OpenTelemetry
Prometheus
Grafana
Cloud
DevOps

Osservabilità nei sistemi distribuiti: log, metriche e tracciamento

Osservabilità nei sistemi distribuiti: log, metriche e tracciamento

Negli ambienti di microservizi, sapere cosa sta succedendo all'interno dell'applicazione è essenziale. L'Osservabilità va oltre il semplice monitoraggio, ti consente di porre domande al tuo sistema e ricevere risposte affidabili.

Tre pilastri dell'osservabilità

  1. Registri strutturati, record di eventi in formato JSON, facilitazione delle query.
  2. Metriche, valori numerici nel tempo (latenza, tasso di errore, utilizzo della CPU).
  3. Tracciamento distribuito, tracciamento delle richieste che attraversano più servizi.

Strategia di attuazione

  • Centralizza i log utilizzando Elastic Stack (Filebeat → Logstash → Elasticsearch → Kibana) o servizi gestiti come CloudWatch Logs.
  • Esporta le metriche su Prometheus e visualizzale in Grafana.
  • Codice strumento con OpenTelemetry, invio di span a Jaeger o Zipkin.

Lista di controllo dell'osservabilità

  • Configura il logger JSON (ad esempio: Winston, Bunyan).
  • Imposta service.name e environment in tutti i registri.
  • Esporta metriche standard (process_cpu_seconds_total, process_resident_memory_bytes).
  • Gestisci client e server HTTP con OpenTelemetry.
  • Crea dashboard di latenza, tasso di errore e throughput.
  • Definire gli avvisi SLA (ad esempio latenza > 500 ms, errore > 1%).
  • Correlazione ID documento (trace_id, span_id).

Esempio di logger JSON (Node.js)

const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), defaultMeta: { service: process.env.SERVICE_NAME, environment: process.env.NODE_ENV }, transports: [new winston.transports.Console()] }); module.exports = logger;

Esempio di metrica personalizzata con Prometheus (Node.js)

const client = require('prom-client'); const requestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duração das requisições HTTP em segundos', labelNames: ['method', 'route', 'status_code'] }); app.use((req, res, next) => { const end = requestDuration.startTimer({ method: req.method, route: req.path }); res.on('finish', () => end({ status_code: res.statusCode })); next(); });

Esempio di tracciamento con OpenTelemetry (Node.js)

const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node'); const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base'); const { JaegerExporter } = require('@opentelemetry/exporter-jaeger'); const provider = new NodeTracerProvider(); provider.addSpanProcessor(new SimpleSpanProcessor(new JaegerExporter({ endpoint: process.env.JAEGER_ENDPOINT }))); provider.register();

Conclusione

L’implementazione dell’osservabilità richiede disciplina, ma porta ritorni immediati: rilevamento tempestivo dei guasti, riduzione dell’MTTR (Mean Time To Recovery) e fiducia per scalare i sistemi critici.


Come monitori i tuoi servizi? Condividi i tuoi strumenti preferiti!

Leggi anche