Reading Time: 10 minutes

Durante il FOSDEM 2024, ho dedicato particolare attenzione alle presentazioni su Monitoring e Observability. Dalle discussioni è emerso un trend chiaro: Opentelemetry si sta affermando come punto di riferimento nell’ambito dell’observability open source. Si prevede che nei prossimi anni verrà adottato da un’ampia gamma di clienti e integrato in diverse soluzioni industriali. Procederemo ora con una panoramica generale della tecnologia, per poi analizzare nel dettaglio alcuni degli argomenti trattati durante le conferenze.

Definizione di Opentelemetry

L’osservabilità è la capacità di monitorare e comprendere il comportamento delle applicazioni, sia in termini di prestazioni che di funzionalità. Si tratta di una pratica essenziale per garantire la qualità del software e la soddisfazione degli utenti. Tuttavia, l’osservabilità non è sempre facile da ottenere, soprattutto in contesti complessi e dinamici, come quelli delle architetture distribuite, dei microservizi e del cloud.

Per questo motivo, è nato Opentelemetry, un progetto open source che mira a fornire uno standard unificato e flessibile per la raccolta e l’analisi dei dati di telemetria, come logs, tracce e metriche.

Opentelemetry è un insieme di API, SDK, strumenti e integrazioni progettati per la creazione e la gestione di dati di telemetria come tracce, metriche e log. Il progetto fornisce un’implementazione indipendente dal fornitore (vendor-agnostic) che può essere configurata per inviare i dati di telemetria al backend di propria scelta. Supporta una serie di progetti open-source popolari tra cui Jaeger, OpenSearch, Prometheus, OpenTelemetry Protocol (OTLP) e OpenMetrics.

In questo articolo, vedremo alcune novità maturate di recente in modo da capire quali sono alcune caratteristiche distintive di Opentelemetry e per comprenderne gli sviluppi nel prossimo futuro.

1. Standardizzazione con Opentelemetry

Uno dei principali obiettivi di Opentelemetry è quello di creare uno standard definitivo nel campo dell’osservabilità, grazie all’introduzione di una comune convenzione semantica. Questa convenzione, nota come Semantic Conventions, definisce una serie di regole e di termini per la denominazione e la strutturazione dei dati di telemetria, in modo da garantire una coerenza e una compatibilità tra diverse fonti e destinazioni.

La Semantic Conventions di Opentelemetry è il risultato della convergenza di diverse convenzioni preesistenti, come quelle di Openmetrics, Opentracing e OpenCensus, che sono state donate a Opentelemetry per creare uno standard unico e universale.

L’adozione della Semantic Conventions di Opentelemetry comporta diversi vantaggi, tra cui:

  • La semplificazione dell’interpretazione dei dati di telemetria tra diverse piattaforme e strumenti, promuovendo l’interoperabilità e la portabilità dei dati.
  • L’ottimizzazione delle correlazioni tra eventi appartenenti a diversi servizi e tecnologie, facilitando la diagnosi e la risoluzione dei problemi.
  • La riduzione della dispersione e della cardinalità dei campi utilizzati, migliorando l’efficienza e la scalabilità dei sistemi di memorizzazione e analisi dei dati.

Documentazione

La Semantic Conventions di Opentelemetry è in continua evoluzione e aggiornamento, per adattarsi alle esigenze e alle innovazioni del panorama tecnologico. Per consultare la documentazione e i dettagli della convenzione, è possibile visitare il seguente link: https://github.com/open-telemetry/semantic-conventions

La documentazione ufficiale di Opentelemetry fornisce anche una guida dettagliata al seguente link: https://opentelemetry.io/docs/specs/semconv/  . In queste pagine è possibile trovare delle raccomandazioni su come scegliere i nomi, i valori e i tipi dei dati di telemetria, in modo da rendere i dati più chiari e consistenti.

La Semantic Conventions di Opentelemetry è anche disponibile in forma di codice generato per diversi linguaggi di programmazione come Java, Python, Go, Ruby, e altri. Questo permette di utilizzare le convenzioni in modo più semplice e diretto, senza doverle ricordare o scrivere manualmente. Il codice generato è basato sulle definizioni YAML presenti nel repository Semantic Conventions, che vengono trasformate in classi, moduli, costanti, e altri elementi specifici per ogni linguaggio.

2. Auto-Instrumentazione con Opentelemetry

Un altro vantaggio evidente di Opentelemetry è la sua capacità di instrumentare automaticamente le applicazioni senza richiedere modifiche al codice sorgente. Questo significa che gli sviluppatori possono monitorare le proprie applicazioni in modo non invasivo, evitando la necessità di riavviare i servizi o di inserire manualmente codice aggiuntivo per la raccolta dei dati.

Opentelemetry offre due modalità principali di auto-instrumentazione: la modalità agente e la modalità libreria. La modalità agente consiste nell’utilizzare un agente Java che si occupa di strumentare le applicazioni Java al momento dell’avvio, senza bisogno di alcuna configurazione. La modalità libreria consiste nell’utilizzare una libreria specifica per il linguaggio di programmazione utilizzato, che si occupa di strumentare le applicazioni al momento della compilazione, con una minima configurazione.

Entrambe le modalità di auto-instrumentazione permettono di raccogliere dati di logs, tracce e metriche da diverse fonti, come framework, librerie, middleware e sistemi operativi, e di instradarli verso i sistemi di memorizzazione e analisi dei dati, utilizzando la Semantic Conventions di Opentelemetry per garantire una struttura uniforme e facilmente interpretabile.

Questa funzionalità allinea Opentelemetry a tecnologie dello stack ELK come APM, che offrono soluzioni di auto-instrumentazione per il monitoraggio delle applicazioni. Le prime funzionalità di auto-instrumentazione di Opentelemetry sono uscite dalla beta negli ultimi mesi del 2023, e sono in continua espansione e miglioramento.

3. Ottimizzazione della Raccolta Dati con Opentelemetry

Opentelemetry offre anche strumenti per ottimizzare la raccolta di dati, consentendo di raccogliere solo le informazioni rilevanti per l’analisi. Tra questi, spicca il “tail-based sampling”, un metodo che campiona gli eventi rari ma cruciali, garantendo un monitoraggio efficace senza sovraccaricare l’infrastruttura con una mole eccessiva di dati.

Il tail-based sampling si basa sul principio che gli eventi più interessanti da monitorare sono quelli che presentano anomalie o errori, che sono spesso rari e difficili da prevedere. Per questo motivo, il tail-based sampling campiona gli eventi in base al loro esito finale, e non in base alla loro frequenza o alla loro origine. In questo modo, si evita di scartare eventi importanti o di raccogliere eventi irrilevanti, ottimizzando l’uso delle risorse e la qualità dei dati.

Inoltre, con politiche di campionamento ben definite, è possibile impostare limiti alle tracce per evitare un’eccessiva proliferazione di dati. Ad esempio, è possibile limitare il numero di span per traccia, il tempo massimo di durata di una traccia, o il numero di attributi per span. Questo permette di ridurre il rumore e di focalizzarsi sugli eventi più significativi.

Scalabilità del sistema di osservabilità

Un altro aspetto da considerare per ottimizzare la raccolta di dati è la scalabilità del sistema di osservabilità. In scenari complessi e dinamici, come quelli delle architetture distribuite, dei microservizi e del cloud, il volume e la varietà dei dati di telemetria possono variare notevolmente in base al carico e alla domanda. Per questo motivo, è importante avere un sistema di osservabilità che sia in grado di adattarsi alle fluttuazioni del traffico, garantendo una raccolta e un’analisi efficienti e affidabili.

Al momento non esistono soluzioni di autoscaling per Opentelemetry. Un possibile approccio per gestire la scalabilità è quello di usare Kafka per fare da intermediario tra i load balancer e i collector di Opentelemetry. Kafka è un sistema di messaggistica e streaming distribuito, che offre elevate prestazioni, resilienza e scalabilità. Kafka può essere usato per instradare i dati di telemetria dai load balancer ai collector, gestendo l’auto-scaling in base al carico e alla domanda. In questo modo, si evita il sovraccarico dei collector e si garantisce una raccolta e un’analisi ottimali dei dati.

4. Innovazioni Tecnologiche e Supporto di Opentelemetry

Opentelemetry si adatta rapidamente all’evoluzione del panorama tecnologico, supportando e integrandosi con le più recenti innovazioni. Una di queste innovazioni è l’introduzione del frame pointer di default in Ubuntu 24.04 LTS, che permetterà di sfruttare la tecnologia eBPF per garantire una maggiore precisione nella tracciatura delle prestazioni delle applicazioni.

Il frame pointer è un registro del processore che contiene l’indirizzo della base dello stack frame corrente. Lo stack frame è una struttura dati che memorizza le informazioni relative a una chiamata di funzione, come i parametri, le variabili locali e il valore di ritorno. Il frame pointer permette di ricostruire la catena delle chiamate di funzione, facilitando il processo di stack tracing, che consiste nel determinare la sequenza delle funzioni eseguite da un programma.

eBPF è una tecnologia che permette di eseguire codice in modo sicuro e efficiente nel kernel del sistema operativo, senza la necessità di ricompilare il kernel o di installare moduli aggiuntivi. eBPF offre la possibilità di strumentare le applicazioni a livello di kernel, raccogliendo dati di basso livello, come il tempo di CPU, la latenza di I/O, il consumo di memoria e altro. Questi dati possono essere poi correlati con i dati di alto livello, come le tracce e le metriche, per ottenere una visione completa e dettagliata delle prestazioni delle applicazioni.

Opentelemetry supporta eBPF tramite il suo componente Collector, che si occupa di raccogliere, trasformare e instradare i dati di telemetria verso le piattaforme di analisi. Il Collector può essere configurato per utilizzare eBPF come sorgente di dati, e per inviare i dati verso le destinazioni preferite, come Elasticsearch, Prometheus, Jaeger e altre.

Frame pointer per ottenere stack trace più completi e precisi

L’abilitazione del frame pointer di default in Ubuntu 24.04 LTS è una novità importante, che migliora la qualità e l’accuratezza dei dati di telemetria raccolti da eBPF. Infatti, il frame pointer permette di ottenere stack trace più completi e precisi, senza la necessità di utilizzare tecniche di inferenza basate su euristiche, che possono essere soggette a errori o incompletezze. Questo rende più facile e affidabile il processo di profilazione e di debugging delle applicazioni, e consente di individuare e risolvere più rapidamente eventuali problemi di prestazioni.

Questa innovazione è stata resa possibile grazie alla collaborazione tra Canonical, la società che sviluppa e supporta Ubuntu, e Polar Signals, una società che offre una piattaforma di osservabilità basata su Opentelemetry. Insieme, hanno deciso di abilitare il frame pointer di default nella compilazione dei pacchetti di Ubuntu 24.04 LTS, con poche eccezioni per i casi in cui il frame pointer potrebbe causare un impatto negativo sulle prestazioni. Questa decisione è stata presa dopo aver analizzato il trade-off tra il costo e il beneficio del frame pointer, e aver constatato che il costo è trascurabile (tra l’1% e il 2%) rispetto al beneficio ottenuto in termini di osservabilità.

Questa decisione è stata anche influenzata dal fatto che Fedora, un’altra distribuzione Linux, aveva già abilitato il frame pointer di default per i suoi pacchetti, creando uno standard de facto nel mondo open source. Inoltre, il frame pointer di default è già una pratica comune in altri sistemi operativi, come Windows e MacOS, che lo utilizzano per facilitare il debugging e la profilazione delle applicazioni.

Conclusione

Opentelemetry offre una soluzione completa e flessibile, che si propone di semplificare e ottimizzare il processo di osservabilità, offrendo agli sviluppatori dei mezzi per raccogliere i dati di monitoraggio da una pletora di sorgenti e instradarli verso le piattaforme di analisi preferite.

Grazie alla sua versatilità, sarà possibile garantire una maggiore standardizzazione e interoperabilità tra gli strumenti e le piattaforme di osservabilità.

Tutto questo porta Opentelemetry e le Semantic Conventions a diventare lo standard de facto nell’observability open-source, definendo uno standard universale per la denominazione semantica nel monitoraggio delle applicazioni.

Opentelemetry è una tecnologia promettente e in continua evoluzione, che sembra essere maturata molto negli ultimi anni e che sicuramente diventerà un prodotto di riferimento nell’observability nel prossimo futuro.