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à
- Registri strutturati, record di eventi in formato JSON, facilitazione delle query.
- Metriche, valori numerici nel tempo (latenza, tasso di errore, utilizzo della CPU).
- 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.nameeenvironmentin 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
- Osservabilità con OpenTelemetry: metriche, log e tracciamento distribuito
- Osservabilità oltre i log: cosa cambia nella pratica OpenTelemetry
- Workers: debug, log e Workers Tail: osservabilità all'edge senza un server di log
- Architettura dell'applicazione: Guida completa ai sistemi scalabili
- Metriche di ingegneria dell'affidabilità del sito: definizione e monitoraggio di SLI, SLO e SLA
- Architettura dell'Edge Computing: strategie per l'elaborazione distribuita
