In questo articolo che vi proponiamo qui di seguito, Dave McAllister (in foto), Senior OSS Technical Evangelist per NGINX, F5, spiega come OpenTelemetry sta cambiando le modalità di tracciamento e design delle applicazioni.
Buona lettura
Quando si eseguono applicazioni cloud native, l’osservabilità svolge un ruolo fondamentale. Le funzionalità dell’interfaccia utente, infatti, vengono realizzate mediante l’integrazione di un gran numero di microservizi in esecuzione su più ambienti, spesso in sedi differenti. Questa configurazione fa sì che, potenzialmente, ogni componente applicativo possa esportare i propri log indipendentemente dalle altre componenti applicative. Senza uno strumento che raccolga e metta in relazione i dati di telemetria, è estremamente difficile, a volte quasi impossibile, seguire l’elaborazione di una determinata richiesta dall’inizio alla fine, variabile fondamentale nella risoluzione dei problemi e nel processo di troubleshooting.
Ecco perché, nella ricerca di uno strumento di osservabilità multifunzionale, il team del progetto NGINX Modern Apps Reference Architecture (MARA) ha scelto OpenTelemetry.
Come OpenTelemetry alimenta l’Observability 2.0
Annunciato per la prima volta al KubeCon 2019 di Barcellona, OpenTelemetry ha attratto fin da subito un gruppo di collaboratori entusiasti, diventando in pochissimo tempo, in termini di numero di contributi, il secondo progetto più popolare della Cloud Native Computing Foundation (CNCF). Negli ultimi sei mesi il tasso di partecipazione è stato più alto che mai, a riprova del fatto che OpenTelemetry rappresenta ormai uno strumento maturo che sta passando dall’essere utilizzato dagli early adopters, desiderosi di essere sempre all’avanguardia, ai pragmatici, che preferiscono invece prodotti più maturi.
OpenTelemetry si concentra su dati e flusso di dati (telemetria) necessari a comprendere, risolvere e ottimizzare al meglio le nostre applicazioni. I dati sono utili solo se possono essere aggregati, analizzati e visualizzati in scala.
È importante notare inoltre che la capacità di OpenTelemetry di correlare gli eventi tra le applicazioni ci sta portando all’Observability 2.0, un nuovo benchmark di misurazione dell’attività delle applicazioni nel cloud. Con l’Observability 2.0, i dati sono già correlati per noi, il che porta a un cambiamento della modalità di approccio e relazione verso il nostro spazio applicativo. Non ci limitiamo più a sapere se un’applicazione è in esecuzione o meno: ora possiamo comprendere il percorso di ogni singola richiesta attraverso le nostre applicazioni.
Storicamente, due importanti iniziative open-source hanno preceduto OpenTelemetry: OpenTracing (OT) e OpenCensus (OC), che hanno standardizzato il formato dei dati di tracciamento in modo che potessimo ottenere gli insights necessari e capire l’impatto degli stessi sulle nostre app moderne.
Nel marzo 2019, OpenTracing e OpenCensus hanno annunciato la loro fusione in OpenTelemetry con l’obiettivo di unificare le modalità di generazione e formattazione dei dati di tracciamento. Il progetto OpenTelemetry sta definendo ulteriori standard per l’acquisizione di altre classi di dati di osservabilità (metriche e log) attraverso gli stessi canali di telemetria delle tracce.
Tra gli aspetti funzionali degni di nota di OpenTelemetry vi sono il tracciamento distribuito e l’intelligence delle applicazioni.
Perché il tracciamento distribuito è necessario nelle moderne architetture delle app
Sebbene il tracciamento distribuito esista da anni, nell’ultimo decennio si sono verificati diversi cambiamenti, tra cui l’emergere e la crescita di ambienti cloud come Amazon Web Services (AWS), Microsoft Azure e Google Cloud Platform (GCP), che ne hanno aumentato la necessità. Con il maggiore impatto dell’orchestrazione dei container (attraverso l’utilizzo di Kubernetes), oggi si inizia a osservare un comportamento “caotico”, quando il numero e la posizione delle risorse cambiano nel tempo.
All’interno delle architetture moderne, che dispongono di molte componenti separate che producono quella telemetria di cui abbiamo bisogno per monitorare e mantenere le nostre applicazioni, il carico di dati è enorme e decisamente complesso. C’è bisogno quindi di una tecnologia che ci consenta di tracciare tutte le attività e gli elementi correlati, in modo da poter comprendere e analizzare gli ambienti attuali in continua evoluzione. È qui che entra in gioco OpenTelemetry.
Il futuro del tracciamento distribuito con OpenTelemetry
Con il tracciamento distribuito siamo in grado di disporre di nuove metriche diverse, soprattutto quelle relative al numero di richieste per unità di tempo, al numero di errori per unità di tempo e alla durata impiegata da una richiesta aggregata in quella stessa unità di tempo.
In OpenTelemetry, tutte le applicazioni che generano metriche possono inviarle a un punto di raccolta comune tramite un livello di telemetria (transfer), che aiuta ad allineare i dati dei microservizi che li generano. Questo include l’allineamento con l’infrastruttura sottostante.
Anche se OpenTelemetry assegna a ogni richiesta un TraceId, i dati possono comunque essere influenzati dal data skew e drift (distorsione e deriva degli stessi) che spesso compaiono nelle architetture cloud native e che possono derivare da percorsi di reporting con durata variabile o dalla mancanza di una stretta sincronizzazione tra i vari host. Tracciando la comunicazione tra i componenti durante l’elaborazione del traffico, il tracciamento distribuito consente a OpenTelemetry di misurare i singoli span – le unità di lavoro e gli elementi costitutivi di un tracciamento – senza che vi sia bisogno di una orchestrazione profonda dell’applicazione associata.
La combinazione di questi tre segnali (ovvero delle categorie di telemetria) ci permette di correggere i problemi e di riportare le nostre applicazioni a una produzione di qualità:
- Metriche: “C’è un problema?”
- Tracce: “Dove si trova il problema?”
- Log: “Qual è il problema?”
Ed è qui che torniamo all’Observability 2.0. La possibilità di ottenere tracce e di conoscere immediatamente quali metriche corrispondono a una determinata traccia ci conferisce molto potere. Ad esempio, quando le metriche indicano un problema, il tracciamento distribuito consente di risalire alla richiesta specifica che ha causato il problema iniziale e di seguire i progressi in ogni fase dell’adempimento della richiesta. Poiché la nostra traccia è costituita da intervalli nell’ordine in cui si verificano, possiamo seguire la richiesta in ogni fase del suo percorso.
Il tracciamento distribuito offerto da OpenTelemetry può offrire una grande comprensione dell’esperienza degli utenti. Come utente, è ovvio che io sia interessato alla mia singola richiesta. Come ingegnere di site reliability, mi interessano invece le richieste aggregate. OpenTelemetry offre entrambe le cose, oltre alla possibilità di passare dall’aggregato a uno specifico spaccato, poiché è progettato per rendere disponibili tutti i dati necessari in tutte le app.
App intelligence abilitata da Intelligenza Artificiale e Machine Learning
Questo nuovo flusso di dati di OpenTelemetry ci permette anche di essere “adattivi” e “automatizzati” nello sviluppo e nella risposta operativa. Avendo tutti questi dati a nostra disposizione, possiamo rendere le nostre applicazioni più intelligenti. In F5 ci impegniamo ad aiutare i clienti a sviluppare e distribuire quelle che chiamiamo applicazioni adattive, che regolano automaticamente e in modo intelligente il loro comportamento in reazione ai cambiamenti dell’ambiente esterno.
Oggi, diversi tipi di prodotti iniziano a produrre metriche simili, e grazie a OpenTelemetry si utilizzano convenzioni semantiche consolidate, per questo diventa più facile correlare le loro azioni durante l’elaborazione delle richieste e fornire tali informazioni agli algoritmi di ML e AI per consentire alle applicazioni e all’infrastruttura di adattarsi dinamicamente.
Un approccio win-win
La codifica della telemetria rappresenta un vantaggio evidente sia per gli utenti di OpenTelemetry sia per le applicazioni che la utilizzano come canale di telemetria.
I dati possono essere raccolti da più fonti e inoltrati a qualsiasi strumento di aggregazione e analisi compatibile. OpenTelemetry Collector libera inoltre i vendor dalla necessità di implementare i collettori stessi, lasciandoli liberi di concentrarsi sul miglioramento del loro codice per eseguire analisi significative, intraprendere azioni intelligenti e costruire nuovi strumenti per aiutare a comprendere questo nuovo mondo complesso e caotico. In effetti, OpenTelemetry Collector – sostenuto da un approccio di innovazione open source – è capace di lavorare con quasi tutti i formati esistenti e di fare avanzare così la tecnologia verso il futuro.
Concentrandosi sulle principali classi di dati di cui abbiamo bisogno per comprendere le nostre app, OpenTelemetry permette di offrire preziosi insights sia sulle prestazioni che sulle criticità del complesso mondo applicativo moderno. Correlando i nostri dati, allineandoli alle convenzioni semantiche e standard, OpenTelemetry rende più accessibile il viaggio verso le applicazioni moderne. Inoltre, man mano che il progetto continua a evolversi e l’adozione a crescere, OpenTelemetry offre una comprensione sempre più profonda e abilita l’applicazione di tecniche di intelligenza artificiale e di machine learning per semplificare, rendere chiara e intellegibile la complessità applicativa di oggi.