Monitoraggio vs osservabilità: La vera differenza, con log, metriche e tracce
Il monitoraggio ti dice che qualcosa non va. L’osservabilità ti aiuta a capire perché, anche quando il fallimento è qualcosa che non avresti mai previsto. Segui un incidente di pagamento per vedere come i due lavorano insieme.
- Il monitoraggio rileva i problemi noti, utilizzando metriche e avvisi predefiniti.
- L’osservabilità indica la capacità di comprendere lo stato interno di un sistema dai suoi output.
- Log, metriche e tracce sono segnali comuni, ma raccoglierli non garantisce informazioni dettagliate.
- Funzionano insieme: il monitoraggio lancia l’allarme e l’osservabilità aiuta a trovare la causa.
Il dashboard è verde, eppure i clienti si lamentano che il checkout non funziona. Se ti sei trovato in questa posizione, capisci già la differenza tra monitoraggio e osservabilità. Il tuo monitoraggio ha controllato solo ciò che pensavi di controllare e questo fallimento è qualcosa di nuovo.
Questa guida spiega entrambe le idee senza usare il linguaggio del marketing e segue un incidente immaginario dall’allarme alla causa principale. I registri, la traccia e i numeri sono inventati per illustrare il processo. Dovresti anche sapere che venditori e professionisti tracciano questa linea in modo diverso e alcuni la considerano in parte una distinzione di marketing. Ci concentriamo sulla parte pratica.
La risposta breve
Il Monitoraggio è un’attività. Decidi in anticipo cosa guardare, come CPU, tasso di errore o spazio su disco, e imposti le soglie che attivano gli avvisi. Risponde: “È accaduto ciò che temevo?”
Osservabilità è una proprietà del tuo sistema. Il termine deriva dalla teoria del controllo, dove descrive quanto bene si possa dedurre lo stato interno di un sistema dai suoi output esterni. In pratica risponde: “Cosa sta succedendo e perché, anche per problemi che non avevo mai previsto?”
Pensa a un’auto. Le spie sul cruscotto stanno monitorando. Coprono una serie di problemi noti. La porta diagnostica completa di un meccanico, che consente a qualcuno di porre nuove domande su qualsiasi parte del motore, è più vicina all’osservabilità.
Monitoraggio e osservabilità fianco a fianco
| Aspetto | Monitoraggio | Osservabilità |
|---|---|---|
| Domanda principale | C’è qualcosa che non va? | Perché è sbagliato? |
| Meglio per | Modalità di guasto note | Fallimenti sconosciuti e nuovi |
| Avvicinamento | Controlli e dashboard predefiniti | Esplorazione aperta di dati avanzati |
| Uscita tipica | Avvisi e grafici di stato | Risposte a nuove domande |
| Dettaglio dati | Spesso aggregati | Dettagliato, per richiesta ove possibile |
| Installazione | Configura controlli dall’esterno | Richiede la strumentazione del codice |
| Utilizzato da | Operazioni, personale reperibile | Sviluppatori e personale reperibile |
Questa non è una scelta tra i due. Hai ancora bisogno di avvisi che ti dicano quando guardare.
Perché il solo monitoraggio non basta
Con un’applicazione su un server, l’elenco delle cose che possono andare storte è piuttosto breve, quindi puoi controllarle tutte. Un sistema moderno può avere dozzine di servizi, code e API di terze parti, oltre a container che vanno e vengono. I guasti diventano combinazioni che nessuno aveva previsto: una regione, un tipo di cliente, una versione specifica dell’app e un’unica dipendenza lenta.
Non puoi scrivere in anticipo una dashboard per una domanda a cui non hai pensato. Hai bisogno di dati che ti permettano di chiederli in seguito.
Log, metriche e tracce
Questi tre tipi di telemetria sono spesso chiamati i pilastri dell’osservabilità. Ognuno risponde a una domanda diversa:
| Segnale | Di cosa si tratta | Risposte | Debolezza |
|---|---|---|---|
| Metriche | I numeri nel tempo | Quanto? Sta peggiorando? | Piccoli dettagli sui singoli eventi |
| Registri | Registrazioni di singoli eventi | Cosa è successo esattamente? | Può essere costoso e rumoroso |
| Tracce | Percorso di una richiesta attraverso i servizi | Dov’è finito il tempo? | Richiedono strumentazione e sono spesso campionati |
Metriche
http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4
Le metriche sono economiche da archiviare e veloci da interrogare, il che le rende ideali per dashboard e avvisi. Diffidare delle etichette ad alta cardinalità, come l’ID utente, in molti sistemi metrici, perché possono aumentare notevolmente i costi.
Tracce
Una traccia segue una richiesta tra i servizi. Ogni passaggio è un intervallo con un’ora di inizio e una durata:
POST /checkout 2410 ms
├─ auth-service: verify token 18 ms
├─ cart-service: load cart 42 ms
├─ pricing-service: calculate 2290 ms <-- slow
│ └─ SELECT coupons ... 2265 ms
└─ payment-service: not reached
Una traccia rende evidente un passaggio lento, che è molto difficile da vedere in log separati da servizi separati.
Registri
I registri forniscono i dettagli di ciò che è accaduto in un dato momento. Vediamo come renderli utili in un momento.
Una procedura dettagliata sull’incidente
Ecco come i pezzi si incastrano, in un esempio immaginario.
| Passo | Segnale | Cosa impariamo |
|---|---|---|
| 1. Allerta incendi | Metrico | La latenza di Checkout p95 ha superato il target di 1 secondo |
| 2. Scomponilo | Metrico | È interessata solo l’app mobile, non il Web |
| 3. Esaminare una richiesta | Traccia | Il tempo è nel servizio prezzi, su una richiesta di coupon |
| 4. Leggi i dettagli | Registri | Tutte le richieste lente utilizzano un coupon della campagna di oggi |
| 5. Confermare la causa | Piano di interrogazione | La ricerca del coupon non ha un indice adatto |
| 6. Risolvilo | Distribuzione | Aggiungi l’indice e osserva il ripristino della latenza |
Il monitoraggio ha gestito il passaggio 1. Tutto ciò che è seguito era osservabilità. Nota come ogni domanda deriva dalla risposta precedente. Nessuno avrebbe potuto creare in anticipo una dashboard per la “query sui coupon dell’app mobile dalla campagna di oggi”. Per quanto riguarda la correzione stessa, la nostra guida all’ottimizzazione delle query SQL mostra come leggere questo tipo di piano.
Registri migliori
I registri di testo semplice sono fatti per gli occhi umani e difficili da interrogare. I log strutturati utilizzano campi su cui una macchina può filtrare:
# Hard to search
ERROR Payment failed for user 42 after 3 tries
# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
"attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}
Con il secondo modulo puoi subito chiedere “quanti guasti per fornitore nell’ultima ora?” Il campo trace_id è particolarmente prezioso, poiché collega una riga di registro all’intera richiesta, attraverso ogni servizio toccato.
Non registrare mai password, token o numeri di carte e fai attenzione ai dati personali. Come spiega la nostra guida, i JWT possono essere riutilizzati da chiunque li legga da un registro.
Suggerimento: aggiungi il contesto che desideri durante un incidente, ad esempio versione, regione, livello del cliente e stato di flag della funzionalità. Poter dire “solo la versione 2.14 in una regione” spesso risolve da solo il problema.
I segnali d’oro
Non sai cosa monitorare? Il libro Site Reliability Engineering di Google suggerisce quattro segnali per i sistemi rivolti all’utente:
| Segnale | Domanda | Esempio |
|---|---|---|
| Latenza | Quanto tempo richiedono le richieste? | tempo di risposta p95 e p99 |
| Traffico | Quanta richiesta c’è? | Richieste al secondo |
| Errori | Quante richieste falliscono? | Tasso di 5xx risposte |
| Saturazione | Quanto è pieno il sistema? | Utilizzo della CPU, della memoria e del pool di connessioni |
Utilizza i percentili per la latenza, poiché le medie nascondono richieste lente, come abbiamo mostrato in test di carico e test di stress.
Avvisi di cui le persone si fidano
Se gli avvisi vengono attivati continuamente, le persone smettono di leggerli. Quelli bravi seguono alcune regole:
- Avviso sui sintomi avvertiti dagli utenti. “Errori di pagamento superiori al 2%” batte “CPU all’85%”. Una CPU elevata che non danneggia nessuno non dovrebbe svegliare nessuno.
- Rendi ogni avviso utilizzabile. Se nessuno ha bisogno di fare nulla, rendilo un elemento della dashboard o rimuovilo.
- Collegamento a un runbook. Indica al risponditore dove cercare e cosa provare.
- Rivedili regolarmente. Elimina o correggi eventuali avvisi ignorati il mese scorso.
Obiettivi del livello di servizio
Uno SLO trasforma “il sito deve essere veloce e affidabile” in un obiettivo misurabile, ad esempio “il 99,9% delle richieste di pagamento ha esito positivo nell’arco di 30 giorni”. Ciò consente circa lo 0,1% di errori, noto come budget di errore. Se ne hai abbastanza, puoi spedire più velocemente e, se è quasi esaurito, puoi dare priorità all’affidabilità. È un modo utile per risolvere le controversie tra velocità di consegna e stabilità.
OpenTelemetry e strumenti
OpenTelemetry è uno standard open source e indipendente dal fornitore per la generazione e l’esportazione di dati di telemetria. È un progetto della Cloud Native Computing Foundation. Strumentarlo significa che puoi modificare il tuo backend in un secondo momento senza riscrivere il codice. Non è un prodotto di archiviazione o dashboard in sé, quindi abbinalo a uno:
| Scopo | Esempi open source | Esempi commerciali |
|---|---|---|
| Metriche | Prometeo | Datadog, Nuova Reliquia |
| Cruscotti | Grafana | Datadog, Dynatrace |
| Registri | Loki, OpenSearch | Splunk, elastico |
| Tracce | Jaeger, Tempo | Favo, Datadog |
Controlla tu stesso le caratteristiche attuali e i prezzi, poiché questi prodotti cambiano spesso. I costi possono aumentare rapidamente con il volume dei dati, quindi utilizza il campionamento e imposta limiti di conservazione.
Come iniziare
- Inizia con i segnali d’oro per il tuo servizio più importante.
- Aggiungi uno o due avvisi sui sintomi notati dagli utenti.
- Passa ai log strutturati, con un ID richiesta in ogni riga.
- Aggiungi il tracciamento al percorso principale dell’utente con OpenTelemetry, poiché la strumentazione automatica può coprire molti framework comuni.
- Collega le distribuzioni ai tuoi grafici, in modo da poter vedere se un rilascio dalla tua pipeline CI/CD ha causato una modifica.
- Impara da ogni incidente. Dopo ciascuno, chiedi quali dati avrebbero reso più rapida la risoluzione e aggiungili.
Un piccolo team con un servizio non ha bisogno di una piattaforma enorme. Metriche di base, registri validi e alcuni avvisi potrebbero essere sufficienti. Il tracciamento guadagna terreno man mano che il numero di servizi cresce.
Errori comuni
- Acquistare uno strumento e chiamarlo osservabilità. Il valore deriva da una buona strumentazione e dal modo in cui si utilizzano i dati.
- Trattare i tre pilastri come una lista di controllo. Separare i dati senza alcun modo per collegarli ti costringe a cercare tra le schede. Gli ID condivisi contano.
- Raccogliere tutto. La telemetria non filtrata diventa costosa e aggiunge rumore.
- Troppe dashboard. Alcune visualizzazioni attendibili superano cento che nessuno apre.
- Pensare che sostituisca i test. Hai ancora bisogno di test prima del rilascio. Tuttavia, i rilasci Canary si abbinano bene a questi segnali.
Considerazioni finali
Il monitoraggio ti dice che qualcosa è andato storto e l’osservabilità ti dà i mezzi per scoprirne il motivo. Il test pratico è semplice: quando si presenta un problema sconosciuto, riesci a trovarne la causa senza inviare nuovo codice? La prossima volta che ti trovi coinvolto in un incidente, scrivi tutte le domande a cui non puoi rispondere. Quella lista è la tua tabella di marcia.
Domande frequenti
Qual è la differenza tra monitoraggio e osservabilità?
Il monitoraggio tiene traccia delle metriche predefinite e degli avvisi sui problemi noti. L’osservabilità è la capacità di comprendere lo stato di un sistema dai suoi output, anche in caso di problemi imprevisti.
Quali sono i tre pilastri dell’osservabilità?
Sono log, metriche e tracce. I log registrano gli eventi, le metriche misurano i valori nel tempo e le tracce seguono una singola richiesta tra i servizi.
Ho bisogno dell’osservabilità se ho il monitoraggio?
Per un sistema piccolo e semplice, un buon monitoraggio e i registri potrebbero essere sufficienti. Man mano che i sistemi diventano distribuiti e i guasti diventano meno prevedibili, l’osservabilità diventa più preziosa.
Cos’è OpenTelemetry?
Si tratta di uno standard open source e di un insieme di strumenti per la produzione e l’esportazione di log, parametri e tracce, quindi non sei legato all’agente di un singolo fornitore.
Quali sono i quattro segnali d’oro?
Sono la latenza, il traffico, gli errori e la saturazione. Le indicazioni SRE di Google li consigliano come punto di partenza per il monitoraggio dei sistemi rivolti agli utenti.
Continua a imparare
Hai bisogno di aiuto con test, WordPress o SEO?
Aiutiamo i team a fornire software migliore e a far crescere i loro siti. Raccontaci a cosa stai lavorando e ti suggeriremo chiaramente il prossimo passo.
Altre guide su test, intelligenza artificiale e sviluppo moderno
Ti è piaciuto questo articolo? Scegli un argomento e passa direttamente ai nostri tutorial più recenti.
Spiegazione delle allucinazioni dell'intelligenza artificiale: perché i modelli linguistici inventano le cose e come ridurle
Spiegazione delle allucinazioni dell'intelligenza artificiale: cosa sono, perché i modelli linguistici le producono, tipi comuni, come ridurle con b…
Leggi l'articolo →DevOpsSpiegazione delle variabili d'ambiente: file .env, segreti e configurazione eseguiti correttamente
Variabili d'ambiente spiegate con esempi Python che abbiamo eseguito: lettura e impostazione, perché ogni valore è una stringa, file .env, ereditari…
Leggi l'articolo →Sviluppo softwareSpiegazione della limitazione della velocità API: algoritmi, intestazioni e gestione degli errori 429
La limitazione della velocità dell'API spiegata con una simulazione che abbiamo eseguito: bucket di token, finestra fissa, finestra scorrevole, risp…
Leggi l'articolo →Automazione dei testDerisione in Python: unittest.mock, patch e gli errori che fanno mentire i test
Mocking in Python con unittest.mock, testato: Mock e return_value, side_effect, patch dove viene utilizzato un nome, specifiche e autospec, date moc…
Leggi l'articolo →Test del softwareSpiegazione della copertura del codice: copertura di linea o di filiale e cosa significa realmente il 100%.
Copertura del codice spiegata con una vera esecuzione di cover.py: copertura di linea, ramo e condizione, lettura di un rapporto, perché la copertur…
Leggi l'articolo →Database e SQLDELETE vs TRUNCATE vs DROP in SQL: differenze, rollback e quando utilizzarli
DELETE vs TRUNCATE vs DROP spiegato con SQL testato: cosa rimuove, rollback, trigger, reimpostazione dell'identità, velocità e come differiscono Pos…
Leggi l'articolo →Database e SQLSpiegazione delle visualizzazioni SQL: crea, utilizza ed evita le insidie, con esempi
Viste SQL spiegate con le query che abbiamo eseguito: creazione di una vista, risultati in tempo reale, nascondere colonne, prestazioni, viste aggio…
Leggi l'articolo →Sviluppo softwareInterfaccia TypeScript e tipo: differenze reali, testate con il compilatore
Interfaccia TypeScript vs tipo, verificata con il vero compilatore: cosa possono fare entrambi, cosa può fare solo uno, fusione delle dichiarazioni,…
Leggi l'articolo →Sviluppo softwareSpiegazione di Python *args e **kwargs: funzioni flessibili con esempi chiari
Python *args e **kwargs spiegati con il codice che abbiamo eseguito: compressione e decompressione, ordine dei parametri, argomenti solo per parole …
Leggi l'articolo →Sviluppo softwareFunzioni Lambda Python: sintassi, usi reali e quando non usarli
Funzioni lambda Python spiegate con il codice che abbiamo eseguito: sintassi, ordinamento con chiave, mappa e filtro, chiusure, trap dell'associazio…
Leggi l'articolo →Intelligenza artificialeCosa sono gli agenti AI? Come funzionano, con un semplice ciclo di agenti che puoi eseguire
Cosa sono gli agenti IA? Una semplice guida al ciclo dell'agente, agli strumenti, alla memoria e ai guardrail, con un piccolo ciclo Python che abbia…
Leggi l'articolo →DevOpsMonitoraggio vs osservabilità: la vera differenza, con log, metriche e tracce
Spiegazione del monitoraggio e dell'osservabilità: errori noti e sconosciuti, log, metriche e tracce, una procedura dettagliata sugli incidenti di p…
Leggi l'articolo →DevOpsVolumi Docker e montaggi di associazione: mantenere i dati del contenitore nel modo giusto
Volumi Docker e montaggi di collegamento spiegati: perché i dati del contenitore scompaiono, volumi denominati, montaggi di collegamento, tmpfs, ese…
Leggi l'articolo →Automazione dei testTDD vs BDD: differenze chiave, una caratteristica costruita in entrambi i modi e quando utilizzarli ciascuno
TDD vs BDD spiegato con una funzione di sconto costruita in entrambi i modi: refactoring rosso-verde con il codice che abbiamo eseguito, scenari "Da…
Leggi l'articolo →Sviluppo softwareGit merge vs rebase: differenze, esempi e quando usare ciascuno
Git merge vs rebase spiegato con output reale del log, una tabella di confronto, la regola d'oro del rebase e un flusso di lavoro sicuro per i team.
Leggi l'articolo →Sviluppo softwareList comprehension in Python: sintassi, esempi e quando evitarla
List comprehension in Python spiegata: sintassi, filtri, if-else, cicli annidati, tempi misurati e i casi in cui un normale ciclo for è meglio.
Leggi l'articolo →Database e SQLSQL JOIN spiegati con esempi (Inner, Left, Right, Full)
Capisci i JOIN SQL passo dopo passo con tabelle e query di esempio: INNER, LEFT, RIGHT, FULL, CROSS e SELF, con errori comuni e consigli sulle prest…
Leggi l'articolo →