Observability e monitoring: come cambia il debugging nei sistemi distribuiti

banner

Se hai mai passato ore a cercare la causa di un rallentamento in produzione sfogliando migliaia di righe di log, sai già di cosa parlo. Il servizio è lento, gli utenti si lamentano, e tu sei lì a fare grep su file enormi sperando di trovare l’ago nel pagliaio.

I log da soli non raccontano più tutta la storia. E no, aggiungerne altri non risolve il problema, lo peggiora.

Qui entra in gioco l’observability: un approccio che cambia il modo in cui capiamo cosa succede nei nostri sistemi.

Cos’è l’observability

L’observability è la capacità di capire lo stato interno di un sistema osservando i suoi output. Non è un tool, non è un prodotto: è un approccio.

💡 Curiosità: il termine viene dalla teoria dei controlli degli anni ‘60, non dal mondo IT. Un sistema è “osservabile” se puoi ricostruire il suo stato interno dalle sue uscite.

In pratica, significa raccogliere e correlare tre tipi di dati, i così detti tre pilastri:

  • Metriche: numeri aggregati nel tempo. CPU al 90%, latenza media 200ms, 50 richieste al secondo. Ti dicono che qualcosa sta succedendo.

  • Log: eventi testuali con timestamp. “Utente X ha fatto login”, “Errore connessione al database”. Ti dicono cosa è successo.

  • Trace: il percorso di una singola richiesta attraverso tutti i servizi. Ti dicono dove e perché è successo.

I tre pilastri dell’observability

Perché servono tutti e tre

Immagina questo scenario: il tuo e-commerce ha un picco di latenza. Le metriche ti mostrano che il tempo di risposta medio è salito da 200ms a 2 secondi. Ok, c’è un problema. Ma dove?

Vai sui log. Trovi migliaia di righe, alcune con errori di timeout verso un servizio di pagamento. Ma è la causa o una conseguenza?

Qui le trace fanno la differenza. Prendi una singola richiesta lenta e vedi esattamente il suo percorso: API gateway → servizio ordini → servizio inventario → servizio pagamento. E scopri che il servizio inventario impiega 1.8 secondi per rispondere, causando timeout a cascata.

Senza le trace, avresti dato la colpa al servizio pagamento. Con le trace, trovi il vero colpevole in minuti invece che in ore.

Questo è il punto: i tre pilastri non sono alternativi, sono complementari. Le metriche ti avvisano, i log ti danno contesto, le trace ti guidano alla causa.

Esempio flusso di analisi

Observability vs Monitoring: qual è la differenza?

Spesso i due termini vengono usati come sinonimi, ma non lo sono.

Il monitoring è reattivo: definisci in anticipo cosa controllare, imposti soglie, e ricevi alert quando qualcosa le supera. Funziona bene per problemi noti, se sai che la CPU sopra il 90% è un problema, lo monitori.

L’observability è esplorativa: non devi sapere in anticipo cosa cercare. Raccogli dati ricchi e correlati che ti permettono di investigare problemi che non avevi previsto.

In pratica: il monitoring ti dice “c’è un problema”, l’observability ti aiuta a capire “perché c’è un problema” — anche quando è la prima volta che lo vedi.

Da dove iniziare

Se parti da zero, il consiglio è di non costruire tutto da solo. OpenTelemetry è diventato lo standard de facto per l’instrumentazione: è open source, vendor-neutral, e supportato da praticamente tutti i tool di observability.

Oltre a librerie per instrumentare il codice, OpenTelemetry definisce un Collector: un componente che riceve, elabora e inoltra a gestori specifici i dati di telemetria. Funziona come una pipeline configurabile: puoi filtrare, arricchire, campionare e trasformare metriche, log e trace prima di inviarli al backend di visualizzazione.

I primi passi concreti:

  1. Scegli uno stack di visualizzazione. Per iniziare senza costi: Grafana (metriche e dashboard), Loki (log), e Jaeger o Tempo (trace). Se preferisci un’opzione gestita, Datadog, New Relic e Elastic offrono tutto integrato.

  2. Instrumenta un servizio. OpenTelemetry offre auto-instrumentation per i framework più comuni. In molti casi basta aggiungere una dipendenza e qualche riga di configurazione per avere trace automatiche delle chiamate HTTP e database.

  3. Correla i dati. Il vero valore emerge quando trace, log e metriche condividono un identificatore comune (trace ID). Così puoi saltare da un alert su una metrica al log specifico alla trace completa con un click.

Non serve instrumentare tutto subito. Parti dal servizio che ti dà più problemi, impara il flusso, poi estendi.

Otel pipelines

Errori da evitare

Un paio di trappole comuni quando si inizia:

  • Instrumentare tutto subito. Genera rumore e costi. Meglio partire dal percorso critico (es. checkout, login) e espandere gradualmente.

  • Ignorare il campionamento. In produzione con alto traffico, tracciare il 100% delle richieste è insostenibile. OpenTelemetry supporta strategie di sampling intelligenti — usale.

  • Non correlare i dati. Avere metriche in Prometheus, log in Elasticsearch e trace in Jaeger senza un trace ID comune vanifica metà del valore. La correlazione non è un nice-to-have.

Conclusioni

L’observability non è “logging avanzato” ma un cambio di mentalità. Invece di chiederti “cosa loggo?”, ti chiedi “quali domande dovrò fare quando qualcosa si rompe?”.

Se i tuoi sistemi sono distribuiti, se fai deploy frequenti, se vuoi passare meno tempo a debuggare e più tempo a costruire: vale la pena investire su questo approccio.

Risorse utili:

Post correlati

TheRedCode.it - Il mondo #tech a piccoli #bit

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di DevDojo

Vuoi diventare #tech content creator? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!