Open Telemetry per Osservabilità Centralizzata

Open Telemetry

Durante il Workshop Fest di Codemotion che si è svolto lo scorso marzo, i nostri colleghi Simone Esposito e Simone Ripamonti hanno avuto la possibilità di tenere un intervento su Open Telemetry, uno dei progetti open source riconosciuti dalla Cloud Native Computing Foundation

Abbiamo iniziato con una panoramica teorica, seguita da un workshop pratico in cui abbiamo dimostrato come utilizzare Open Telemetry per fornire un’osservabilità centralizzata in un sistema basato su Kubernetes su cui sono state distribuite diverse applicazioni scritte con varie tecnologie.

Che cos’è l’“osservabilità”?

L’osservabilità è la capacità di comprendere lo stato interno di un sistema attraverso i suoi output. Gli output esterni del software sono segnali di telemetria, che possono essere classificati in tre categorie: traces, metrics e logs. Per osservare un sistema, il software deve essere strumentato per fornire dati di telemetria che possono essere “osservati”.

Perché osservare?

L’osservabilità è importante perché permette di:

  • Identificare i problemi: l’osservabilità aiuta gli sviluppatori a individuare potenziali problemi, fornendo informazioni sull’attività del sistema. È molto utile per individuare i bug, perché permette di identificare il problema attraverso l’analisi dei log.
  • L’analisi delle prestazioni consente di capire come il sistema risponde alle richieste e di valutarne le prestazioni.
  • Analisi della sicurezza: la sicurezza è una priorità assoluta e il monitoraggio attivo consente di identificare determinati modelli di utilizzo che possono rilevare potenziali problemi di sicurezza.
  • Pianificazione delle risorse: l’osservabilità consente di prevedere la domanda e di allocare correttamente le risorse, nonché di scalare tempestivamente le risorse.
  • Il rilevamento delle tendenze comporta l’identificazione di modelli e tendenze comuni che possono essere utilizzati per caratterizzare l’evoluzione del sistema.
  • Feedback continuo: fornisce un feedback continuo su ciò che gli utenti stanno utilizzando.
  • Alerting: l’osservabilità consente di scoprire segnali di allarme specifici basati su criteri comuni
  • KPI / SLA: Le misurazioni oggettive consentono di valutare con precisione i KPI e gli SLA.

Che cos’è Open Telemetry

Open Telemetry è un framework per la gestione dei dati di telemetria, che comprende la generazione, la raccolta, la gestione e l’esportazione dei segnali. Si differenzia da un Backend di Observability per il fatto che non si concentra sulla memorizzazione e sulla visualizzazione.
Si basa su due principi.

  • Neutralità rispetto ai fornitori, poiché i dati appartengono allo sviluppatore dell’applicazione. Questa strategia evita il vendor lock-in, dando all’utente il controllo completo sui propri dati e la possibilità di utilizzare strumenti alternativi.
  • Drop in: il suo utilizzo è facilitato dalla definizione di un insieme distinto di API per interagire con il framework stesso. Open Telemetry definisce una specifica e un protocollo standard per la telemetria e i modelli, offre SDK che consentono l’integrazione con diversi linguaggi, fornisce una strumentazione automatica, un collettore che funge da raccoglitore di metriche e si interfaccia con i servizi di back-end per l’osservabilità, e una serie di altri utili a seconda del tipo di sistema e di come il sistema viene distribuito.

Telemetry data

Esistono 3 tipi di dati di telemetria: Logs, Metrics e Traces.

Logs: possono essere considerati come i dati più ‘legacy’, perché la maggior parte dei linguaggi moderni prevede la gestione dei log. Un log è un record di testo con un timestamp. Può essere strutturato o non strutturato, e quest’ultimo è più difficile da controllare.

La telemetria aperta presenta un collegamento tra i log e le tracce/metriche, consentendo di arricchire il log tradizionale con metadati che semplificano la correlazione.

Open Telemetry_1

Le metriche sono misurazioni in tempo reale di un servizio, identificate dal valore della misurazione, dal timestamp e dai metadati. I dati raccolti sono spesso utilizzati per avvisi e decisioni.

Open Telemetry fornisce le seguenti metriche: 

  • Counter: valori monotonici crescenti (ad esempio, il totale delle richieste HTTP ricevute dall’applicazione).
  • Updown counter: quantità monotone crescenti e decrescenti, come la quantità di messaggi in una coda.
  • Gauge: rappresenta un valore intorno al tempo dell’applicazione (ad esempio, l’utilizzo della CPU in un momento specifico).
  • Histograms: sono metriche più complesse che vengono comunemente impiegate in ragionamenti statistici (ad esempio, per valutare la latenza delle richieste).
  • Aggregation metrics derivano da numerosi valori e misure aggregati rispetto a una determinata finestra temporale.
Open Telemetry_2

Traces

Forniscono ciò che accade all’interno del sistema dopo una richiesta, consentendo di tracciare il flusso di richieste all’interno dell’applicazione. Sono disponibili sia per i sistemi monolitici che per quelli distribuiti.

In genere, le tracce sono costituite da:

  • Name
  • Context: SpanID and TraceID (Parent SpanID)
  • KV characteristics
  • Events sono messaggi di log all’interno di una traccia che forniscono informazioni tempestive su ciò che si è verificato in un periodo specifico della traccia stessa.

Si differenziano dagli Span perché questi ultimi si riferiscono a operazioni con un inizio, un avanzamento e una fine, mentre gli Events sono eventi puntuali che si verificano all’interno di uno Span specifico. Per comprendere meglio la distinzione, un intervallo è il caricamento di una pagina web considerato come processo completo, mentre un evento è il momento.

Open Telemetry_3

Cos’è la strumentazione

Come già detto, la strumentazione è essenziale per monitorare un sistema generando e registrando informazioni e dati telemetrici.
Esistono due modalità di strumentazione che possono essere utilizzate insieme:

  • Code Based: Open Telemetry definisce una serie di API e SDK per i vari linguaggi supportati per definire i segnali di telemetria utilizzando il codice. Questo metodo garantisce un elevato livello di controllo su ciò che viene emesso, ma è più oneroso e impegnativo e comporta anche una perdita di trasparenza nel codice dell’applicazione, che viene “alterato”.
  • Zero Code: In questo metodo non viene aggiornato il codice, ma vengono utilizzati meccanismi di strumentazione automatica dei servizi dipendenti dalla lingua. Ad esempio, la manipolazione del codice byte.

Che cos’è l’osservabilità centralizzata

Open Telemetry_4

L’osservabilità centralizzata significa che le nostre applicazioni su alcuni dei nostri cluster concentrano l’osservabilità in un’unica posizione.

I vantaggi sono numerosi.

  • Facilità di gestione e utilizzo: l’aggregazione di tutta la telemetria in un’unica gestione garantisce una manutenzione più semplice e rende i dati più fruibili.
  • Maggiore uniformità grazie all’adozione di standard e politiche di osservabilità simili.
  • Risparmio di risorse
  • Miglioramento e rafforzamento dei controlli di sicurezza
  • Maggiore disponibilità

Per ascoltare l’intero intervento e il workshop, visita la pagina dedicata.


Autori: Simone Esposito Software Engineer Team Leader e Simone Ripamonti DevOps Engineer Team Leader @ Bitrock

Vuoi saperne di più sui nostri servizi? Compila il modulo e fissa un incontro con il nostro team!

Skip to content