Che cos'è l'osservabilità?
Prima di approfondire il codice, è possibile tornare indietro e parlare dell'osservabilità. È necessario disporre di strumenti che consentono di comprendere lo stato interno di un sistema in base a ciò che è visibile esternamente.
Perché implementare l'osservabilità?
Esistono diversi motivi per cui l'osservabilità è un aspetto fondamentale dello sviluppo e del miglioramento delle applicazioni native del cloud:
- Informazioni sul comportamento del sistema: l'osservabilità fornisce informazioni dettagliate sulle prestazioni dell'applicazione e sulla posizione in cui si verificano colli di bottiglia o errori.
- Debug e risoluzione dei problemi: quando si verificano problemi, gli strumenti di osservabilità possono fornire informazioni dettagliate su ciò che stava accadendo nel sistema al momento del problema.
- Miglioramento continuo: l'osservabilità non è solo per identificare e risolvere i problemi, ma viene usata anche per il miglioramento continuo. Monitorando le prestazioni del sistema nel tempo, è possibile identificare le opportunità per ottimizzare il codice, migliorare le prestazioni del sistema e migliorare in modo quantitativo l'esperienza per gli utenti.
- Rilevamento proattivo dei problemi: con gli strumenti di osservabilità corretti, è spesso possibile rilevare i problemi prima che gli utenti li visualizzino.
L'implementazione dell'osservabilità nelle applicazioni native del cloud non è solo una procedura consigliata, è necessaria per mantenere, ottimizzare e migliorare continuamente le applicazioni. Consente agli sviluppatori di offrire applicazioni affidabili e ad alte prestazioni e fornisce le informazioni necessarie per guidare il processo decisionale informato.
I tre pilastri dell'osservabilità
Esistono tre pilastri principali dell'osservabilità:
- Log: i log forniscono record dettagliati degli eventi che si verificano all'interno di un'applicazione o di un sistema. Nell'app è possibile usare l'infrastruttura
Microsoft.Extensions.Logging
per registrare gli eventi. - Metriche: le metriche fanno riferimento a misurazioni numeriche e contatori che forniscono informazioni dettagliate sulle prestazioni e sull'integrità di un sistema. Gli esempi includono tassi di richiesta, tempi di risposta, utilizzo cpu/memoria e percentuali di errore. Nell'app potrebbero essere presenti misurazioni specifiche che è necessario tenere traccia.
- Traccia distribuita: questo processo implica la traccia di una richiesta durante la propagazione di tutti i microservizi nell'app nativa del cloud. Ogni servizio registra i dati di traccia come gli ID richiesta che consentono di correlare gli eventi tra i servizi. La traccia distribuita è utile anche per il debug di problemi di prestazioni ed errori in sistemi complessi.
Insieme, questi tre pilastri forniscono un'osservabilità completa in un sistema.
Origini dei dati per i dati di telemetria
Nell'app nativa del cloud dell'azienda sono disponibili diverse origini di telemetria che è possibile scegliere di raccogliere:
- Log applicazioni: le applicazioni generano log che forniscono informazioni dettagliate sul relativo funzionamento e sugli errori se si verificano. La registrazione è un'ampia fonte di dati di telemetria.
- Database: i database possono fornire dati di telemetria sulle query elaborate, sui tempi di esecuzione e sugli errori che si verificano.
- Richieste e risposte HTTP: le richieste HTTP e le risposte tra i microservizi forniscono dati di telemetria avanzati e preziosi. Questi dati includono le intestazioni di richiesta e risposta, il contenuto del corpo, i codici di stato e le informazioni sulla tempistica.
- Dati sulle prestazioni lato client: nelle app native del cloud con un front-end è possibile raccogliere i dati sulle prestazioni lato client. Questi dati possono includere riscontri di pagina, tempi di caricamento e tempi di interazione dell'interfaccia utente.
- Metriche dell'infrastruttura: se l'applicazione è ospitata in un ambiente cloud, è possibile raccogliere metriche dell'infrastruttura come utilizzo della CPU, utilizzo della memoria, traffico di rete e operazioni di I/O su disco.
Raccogliendo e analizzando questi dati di telemetria, è possibile ottenere informazioni dettagliate preziose sulle prestazioni e sull'integrità dell'applicazione.
Implementare l'osservabilità
Per aggiungere l'osservabilità all'applicazione nativa del cloud, seguire questa procedura:
- Aggiungere la registrazione.
- Abilitare le metriche e definire metriche personalizzate da acquisire.
- Abilitare la traccia distribuita con OpenTelemetry e Zipkin.
- Instrumentare nuovamente l'app con OpenTelemetry e aggiungendo i dati di telemetria al codice.
- Analizzare i dati di telemetria con Prometheus, Grafana o Application Insights.
Introduzione a OpenTelemetry
In che modo OpenTelemetry consente di aggiungere l'osservabilità all'app e perché è presente un supporto così profondo per l'app in .NET? OpenTelemetry è un framework di osservabilità open source. Offre un modo standard indipendente dal fornitore per generare dati di telemetria.
OpenTelemetry standardizza la modalità di raccolta e trasmissione dei dati di telemetria alle piattaforme back-end. Consente di colmare i gap di visibilità fornendo un formato comune di strumentazione in tutti i microservizi. Non è necessario reinserire il codice o installare agenti proprietari diversi ogni volta che una piattaforma back-end cambia.
Poiché è uno standard aperto, supporta molti altri strumenti all'esterno di .NET. OpenTelemetry è configurato per l'uso di estensioni che consentono agli esportatori di creare dati di telemetria per tutti i diversi strumenti. Ciò significa che è possibile usare gli stessi strumenti per monitorare i microservizi indipendentemente dal linguaggio in cui sono scritti.
OpenTelemetry consente di raccogliere e monitorare tutti e tre i pilastri dell'osservabilità: log, metriche e tracce. Si vedrà come eseguire queste attività nelle unità seguenti.