OpenTelemetry (OTel) è un framework di observability open source che include una raccolta di kit di sviluppo software (SDK), API indipendenti dal fornitore e altri strumenti per la strumentazione di applicazioni, sistemi e dispositivi.
OTel semplifica il modo in cui vengono raccolti i dati di telemetria, indipendentemente dal linguaggio di programmazione, dall’infrastruttura o dall’ambiente di esecuzione, e consente agli sviluppatori di generare, raccogliere ed esportare dati di telemetria standardizzati per qualsiasi backend di observability. Questo framework standardizzato rafforza ed estende le funzionalità di observability e offre ai team IT e DevOps una maggiore flessibilità.
OTel viene implementato tra applicazioni, sistemi, dispositivi e soluzioni backend: la storage e la visualizzazione sono intenzionalmente lasciate ad altri strumenti, garantendo alle organizzazioni la libertà di scegliere gli strumenti a loro più adatti.
L’osservabilità è la capacità di ottenere informazioni dettagliate sul funzionamento interno di un sistema mediante l’analisi dei suoi output esterni. Nelle operazioni IT (ITOps) e nel cloud computing, i dati di telemetria (come registri, metriche e tracce) vengono utilizzati per valutare le prestazioni e lo stato di salute di un sistema. I professionisti DevOps si affidano alla strumentazione, aggiungendo codice ad applicazioni e sistemi per produrre e acquisire dati di telemetria, per creare sistemi osservabili.
La messa a punto della strumentazione è spesso un’impresa complessa quando si lavora in ambienti moderni, con ambienti hybrid cloud e multicloud, applicazioni basate su microservizi, contenitori Kubernetes e altre caratteristiche degli ambienti informatici attuali. Questi sistemi distribuiti, e i vari linguaggi di programmazione e runtime che incorporano, rappresentano un osso duro per la strumentazione di rilevamento, per la raccolta e l’esportazione per la memorizzazione di backend, la visualizzazione e l’analisi.
Per acquisire una comprensione completa dei servizi di rete e delle prestazioni delle applicazioni, i tecnici devono configurare una strumentazione ad hoc per applicazioni e sistemi nell’intera infrastruttura. OpenTelemetry aiuta a risolvere questo problema.
OTel fornisce un metodo standard per la raccolta e la trasmissione dei dati di observability, che aiuta a semplificare il monitoraggio nei sistemi distribuiti. Utilizza librerie e API unificate e indipendenti dal fornitore per raccogliere e inviare dati di telemetria alle piattaforme backend.
Adottando OpenTelemetry, i team possono raccogliere ed elaborare in modo uniforme la telemetria su sistemi complessi, indipendentemente dalle applicazioni che gestiscono o dagli strumenti di observability che utilizzano.
Il codice della strumentazione variava molto. E poiché nessun singolo fornitore commerciale offriva uno strumento in grado di raccogliere dati da ogni app e servizio su una rete, era difficile per le aziende raccogliere dati in lingue e formati diversi o cambiare backend.
Se, ad esempio, un team di sviluppo volesse sostituire i tool di back-end, dovrebbe ristrutturare completamente il codice e configurare nuovi agenti per inviare dati di telemetria ai nuovi server. Inoltre, questo approccio frammentato creerebbe silos di dati e confusione, rendendo difficile la risoluzione efficace dei problemi prestazionali.
OpenTelemetry ha rappresentato un avanzamento significativo nel campo degli strumenti di osservabilità, in quanto ha standardizzato il modo in cui i dati di telemetria vengono raccolti, analizzati e trasmessi alle piattaforme di backend.
Il tool fornisce una soluzione open source—basata su criteri stabiliti dalla community—per la raccolta di dati sul comportamento e la sicurezza di un sistema. Ciò consente agli specialisti di semplificare il monitoraggio e l’osservabilità negli ecosistemi distribuiti. Pertanto, OTel offre alle aziende un approccio aperto e omogeneo alla raccolta di dati fondamentali da applicazioni e servizi di rete.
OpenTelemetry è stato creato combinando le funzionalità di tracciamento distribuito di OpenTracing e OpenCensus in un unico strumento.
OpenTracing era un progetto open source progettato dalla Cloud Native Computing Foundation (CNCF) per fornire agli ingegneri un’API indipendente dal fornitore per aggiungere strumentazione di tracciamento distribuita alle applicazioni. Ha stabilito una serie di convenzioni semantiche per contribuire a garantire la coerenza dei dati di telemetria.
Tuttavia, a differenza di OpenTelemetry, OpenTracing non era di per sé un’implementazione di tracing. Piuttosto, forniva delle interfacce che i sistemi di tracciamento potevano implementare per massimizzare la compatibilità tra le piattaforme. OpenTracing è un progetto ormai defunto (che ora incoraggia gli utenti a migrare a OpenTelemetry), ma esistono svariati programmi e soluzioni di tracing che si basano ancora sulle sue API.
OpenCensus è un insieme di librerie di strumentazione, sviluppate da Google, per raccogliere metriche delle applicazioni e tracce distribuite, in grado di esportare dati su diversi backend in tempo reale. Raccoglie dati utilizzando metadati e tag di propagazione coerenti, un concetto che ora esiste in OpenTelemetry come “risorse”.
Con OpenCensus, le applicazioni possono importare ed esportare dati in base ai loro requisiti specifici, garantendo flessibilità nel modo in cui le metriche e le tracce vengono inviate ai backend di observability. OpenCensus non è stato formalmente interrotto come OpenTracing e riceve ancora aggiornamenti regolari di manutenzione e sicurezza. Tuttavia, lo sviluppo attivo si è in gran parte spostato su OpenTelemetry.
Entrambi i progetti miravano ad affrontare lo stesso problema. All’epoca, i team di sviluppo non disponevano di un modo standard per strumentare il codice e trasmettere i dati di telemetria agli strumenti di observability backend.
Tuttavia, nessuno dei due progetti è stato in grado di risolvere questo problema da solo. Così, la CNCF ha sponsorizzato il progetto OpenTelemetry, combinando le migliori caratteristiche di ciascuna soluzione.
OpenTelemetry unisce la standardizzazione delle API di OpenTracing e le capacità di raccolta dati di OpenCensus per fornire una piattaforma unificata per l’invio, la raccolta e il trasferimento dei dati di telemetria verso piattaforme backend di osservabilità.
Una parte fondamentale della gestione di reti e applicazioni veloci e ad alta disponibilità è il raggiungimento di un'osservabilità (o visibilità) completa, che richiede l'accesso ai dati di telemetria. Le soluzioni di osservabilità raccolgono, monitorano e analizzano i dati della telemetria per determinare lo stato di salute del sistema, e forniscono poi ai team IT informazioni fruibili per effettuare riparazioni e implementare ottimizzazioni.
Per comprendere più a fondo OpenTelemetry, analizziamo cosa sono i dati di telemetria e come li utilizzano le organizzazioni. OpenTelemetry supporta dati specifici, vale a dire gli output raccolti da log, metriche e tracce (spesso chiamati i "tre pilastri dell'observability").
Le metriche sono valutazioni numeriche delle prestazioni di un sistema e dell'utilizzo delle risorse. Esse forniscono una panoramica a volo d'uccello sullo stato di salute della rete, acquisendo indicatori chiave di prestazione (KPI) come la latenza, la perdita di pacchetti, l'utilizzo della larghezza di banda e della CPU di un dispositivo.
Le metriche vengono in genere riepilogate utilizzando dashboard e altre visualizzazioni. Spesso forniscono ai team le prime indicazioni di un problema di prestazioni del sistema o dell'applicazione.
I log sono registrazioni dettagliate di ogni evento o azione che si verifica all'interno dell'ambiente. Forniscono informazioni granulari su ciò che è accaduto, quando si è verificato e dove all'interno della rete, offrendo ai team un contesto prezioso per la risoluzione dei problemi, il debug e l'analisi forense.
I log rivelano le cause alla base dei problemi descrivendo in dettaglio gli eventi di sistema come modifiche alla configurazione del dispositivo, autenticazioni non riuscite e connessioni interrotte.
Le tracce catturano il flusso di dati attraverso la rete, fornendo informazioni sul percorso e sul comportamento dei pacchetti mentre attraversano più dispositivi e sistemi. Sono essenziali per comprendere i sistemi distribuiti e diagnosticare i problemi di latenza.
Il data tracing consente ai team IT di visualizzare l'intero percorso di una transazione, dall'inizio alla fine, e contribuisce a individuare i ritardi e gli errori che si verificano all'interno di ambienti complessi e multilivello.
OpenTelemetry si basa su diversi componenti e processi per garantire il successo della raccolta dei dati, tra cui:
Un'API è un insieme di regole o protocolli che consentono alle applicazioni software di comunicare tra loro per scambiare dati, caratteristiche e funzionalità.
OpenTelemetry fornisce API specifiche per ciascun linguaggio, come Java™, Ruby, JavaScript, Python e non solo, che gli sviluppatori possono utilizzare per attrezzare le applicazioni per la raccolta di dati di telemetria. Le API di OpenTelemetry disaccoppiano le app dall'infrastruttura di rete, offrendo ai team la flessibilità di utilizzare qualsiasi endpoint corrisponda al codice di strumentazione.
Gli SDK OpenTelemetry consentono agli ingegneri di configurare e personalizzare il comportamento delle API. Gli SDK costituiscono il ponte tra API e raccoglitori e consentono di collegare la strumentazione manuale per le librerie comuni alla strumentazione manuale delle app.
OTel offre SDK per una serie di linguaggi di programmazione, in modo che gli sviluppatori possano utilizzare le API OTel per generare ed esportare dati di telemetria specifici per il linguaggio e il backend scelti. Gli SDK OTel supportano anche la strumentazione personalizzata per i framework interni non ancora supportati dalla comunità OpenTelemetry.
Un collettore è un agente che raccoglie i dati di telemetria dalle applicazioni strumentate con OpenTelemetry. Composto da ricevitori, elaboratori, aggregatori ed esportatori, il collettore agisce come intermediario neutrale rispetto al fornitore, ricevendo i dati dalle applicazioni e inoltrandoli alle piattaforme di osservabilità o ad altre destinazioni per l'analisi.
Il raccoglitore OpenTelemetry supporta i pacchetti contrib che gli consentono di acquisire dati in più formati, tra cui OpenTelemetry Protocol (OTLP), Prometheus e Jaeger, ed esportarli in vari backend, a volte contemporaneamente (per ridondanza). I pacchetti contrib sono estensioni di terze parti che forniscono ai team di sviluppo strumentazione, campionatori, propagatori e rilevatori di risorse in un formato di moduli secondari.
Gli agenti di raccolta possono anche elaborare e filtrare i dati di telemetria prima di esportarli per dare priorità alla consegna dei dati più vitali e accelerare i processi di risoluzione dei problemi e debug.
Gli esportatori fanno parte del collettore e sono responsabili dell'invio dei dati di telemetria dell'applicazione a uno o più backend di osservabilità specificati. Mentre i collettori gestiscono il flusso di dati complessivo, gli esportatori danno la priorità alla trasmissione dei dati verso la destinazione.
Gli esportatori di dati OpenTelemetry disaccoppiano la strumentazione dalle configurazioni di backend e convertono i dati nel formato appropriato per ciascuna piattaforma di observability (convertendo le tracce nel protocollo Zipkin, ad esempio). Queste dinamiche consentono all'agente di raccolta di inviare gli stessi dati di telemetria a più backend, semplificando la modifica delle destinazioni senza alterare la logica di strumentazione del codice.
La strumentazione automatica fornisce librerie e framework già pronti che consentono alle app di generare automaticamente dati di telemetria con cambi di codice minimi o no-code. Questo processo semplifica la strumentazione per gli sviluppatori, riducendo e talvolta eliminando le attività di programmazione manuale.
Tuttavia, l'autostrumentazione potrebbe offrire un minor controllo su determinati tipi di raccolta dati rispetto alla strumentazione manuale. L'ampiezza della strumentazione automatica può variare anche in base ai tempi di esecuzione dei linguaggi, agli ambienti informatici e ai livelli di supporto della comunità per i framework di osservabilità.
OpenTelemetry funziona combinando API, SDK, collettori e processi di strumentazione automatica per estrarre i dati e inviarli al sistema di destinazione.
Innanzitutto, il team DevOps utilizza il codice dell’applicazione con le API OTel, specificando quali metriche, tracce e log raccogliere e come raccoglierli. L’agente di raccolta OTel SDK raccoglie i dati e li prepara per l’elaborazione e l’esportazione, quindi campiona, filtra e correla i dati con le dipendenze e altre origini dati.
Quando i dati elaborati sono formattati correttamente, l’SDK li raggruppa in batch basati sul tempo (in cui vengono sottoposti a ulteriori filtri, se necessario) e li invia al sistema backend designato.
L’obiettivo principale di OpenTelemetry è raccogliere ed esportare dati di telemetria e migliorare l’osservabilità, fornendo alle organizzazioni uno strumento che faciliti la neutralità dei fornitori e l’integrazione di piattaforme e strumenti. Aiuta i team DevOps e i tecnici per l’affidabilità dei siti (Site reliability engineers, SRE) a gestire ed eseguire il debug di applicazioni e sistemi, in modo che possano prendere decisioni più informate e rimanere agili al mutare delle esigenze di business.
Ad esempio, i vantaggi di OTel consentono di:
1 "Elastic contributes its continuous profiling agent to OpenTelemetry", OpenTelemetry.io, 7 luglio 2024