Panoramica
Jaeger è un software open source per il tracciamento delle transazioni tra servizi distribuiti, che serve a monitorare e risolvere i problemi negli ambienti di microservizi complessi.
Cos'è il tracciamento distribuito?
Il tracciamento distribuito è un approccio all'analisi dell'intera catena di eventi che hanno luogo in un'interazione complessa tra microservizi.
Lo sviluppo software moderno e cloud native si basa sui microservizi: servizi indipendenti con ciascuno una funzione di base differente. Quando un utente invia una richiesta in un'app, rispondono diversi singoli servizi che concorrono a generare il risultato.
Una singola chiamata in un'applicazione può invocare decine di servizi diversi che interagiscono tra loro. Nei casi in cui qualcosa non funzioni come previsto o una richiesta venga elaborata troppo lentamente, gli sviluppatori e gli ingegneri devono riuscire a isolare il problema. Come? Monitorando tutte queste connessioni.
E qui entra in gioco il tracciamento distribuito, che viene spesso eseguito come parte di una service mesh, ovvero una modalità per gestire e monitorare i microservizi.
Jaeger utilizza il tracciamento distribuito per seguire il percorso di una richiesta attraverso i diversi microservizi, offrendo una rappresentazione visiva dei flussi della chiamata.
Disporre di informazioni organizzate sulle transazioni è utile per le attività di debugging e ottimizzazione. Jaeger include strumenti per monitorare le transazioni distribuite, ottimizzare le prestazioni e la latenza e per applicare il metodo di risoluzione dei problemi chiamato Root Cause Analysis (RCA).
La community open source di Jaeger
Come ogni altro progetto open source, Jaeger può contare su una community di centinaia di contributori. Senza alcun vendor lock-in, Jaeger si basa sulle API e sugli strumenti interoperabili OpenTracing.
Jaeger è nato come progetto open source nel 2015, per conto di Uber, l'azienda che offre servizi di trasporto automobilistico privato. Accettato nel 2017 come progetto con livello di maturità "Incubating" dalla Cloud Native Computing Foundation (CNCF), passa al livello successivo di "Graduated" nel 2019.
Come funziona Jaeger?
Jaeger monitora i sistemi distribuiti per raccogliere, archiviare e visualizzare le cosiddette "tracce", allo scopo di offrire informazioni dettagliate sul percorso delle richieste nel sistema, sulla distribuzione del tempo e sulla posizione degli errori.
Jaeger presenta le richieste di esecuzione in forma di tracce. Una traccia mostra i dati e il percorso di esecuzione all'interno di un sistema.
È costituita da uno o più span, che rappresentano le unità logiche di lavoro, ad esempio query relative a un database o richieste HTTP. Ogni span include il nome, l'orario di avvio e la durata dell'operazione. Gli span possono essere nidificati e ordinati.
Jaeger passo passo
Jaeger traccia le attività di esecuzione di un'operazione in un sistema distribuito e assegna routine specifiche ad alcuni dei suoi componenti.
L'SDK OpenTelemetry può essere utilizzato in qualsiasi linguaggio di programmazione per poi essere esportato in un formato leggibile da Jaeger o da altre piattaforme di tracciamento.
Una volta operativo, Jaeger segue questi passaggi:
- Il tracciamento di Jaeger ha inizio con la strumentazione di un'applicazione. Questa procedura ha lo scopo di modificare il codice dell'applicazione per generare tracce. Può essere eseguita manualmente, utilizzando le librerie client di Jaeger disponibili per diversi linguaggi di programmazione, o in automatico, impiegando middleware e framework che supportano le API OpenTracing o OpenTelemetry.
- Quando l'app viene eseguita, le tracce mostrano in dettaglio il percorso di esecuzione di un'operazione tra i microservizi. Ciascuna traccia è composta da più span; ognuno di essi contiene informazioni come il nome dell'operazione, l'orario di inizio e di fine e i tag della coppia chiave-valore, che offrono maggiore contesto (es. codici di stato HTTP, messaggi di errore).
- Per collegare gli span in una singola traccia, Jaeger passa gli identificatori e altri dettagli sul contesto delle tracce tra i servizi, come richieste e risposte. Questa operazione è detta propagazione del contesto. Ogni traccia e ogni span hanno un ID univoco che consente di assemblare i singoli componenti del percorso di una richiesta.
- Gli span vengono raccolti con le librerie client di Jaeger e inviati a Jaeger Agent, solitamente distribuito insieme all'applicazione o come daemonset in ambienti come Kubernetes.
- Jaeger Collector riceve gli span da Jaeger Agent e li archivia in un database back end. Jaeger supporta numerose opzioni di storage, come Elasticsearch, Cassandra o Google Cloud Bigtable, offrendo così una gestione scalabile e flessibile del tracciamento dei dati.
- Il servizio Jaeger Query costituisce un'interfaccia utente per la ricerca e la visualizzazione delle tracce. Grazie all'interfaccia utente di Jaeger, sviluppatori e operatori sono in grado di approfondire i dettagli di ciascuna traccia, visualizzare le tempistiche e la gerarchia degli span e analizzare le prestazioni e il comportamento del sistema.
- Jaeger Console è un'interfaccia utente che consente di visualizzare i dati del tracciamento distribuito per ottenere informazioni approfondite su problemi di latenza, analisi degli errori, analisi delle dipendenze e ottimizzazione delle prestazioni.
Scenari di utilizzo di Jaeger
Jaeger fornisce approfondimenti sul comportamento dei microservizi e delle richieste nei sistemi distribuiti. In questo senso, offre le seguenti funzionalità:
- Ottimizzazione delle prestazioni: Jaeger è in grado di individuare dove avvengono i ritardi in una serie di microservizi e consente di visualizzare le interazioni e le dipendenze dei servizi per ottimizzare l'allocazione delle risorse.
- Analisi delle cause root: le tracce di Jaeger permettono di risalire all'origine di un errore del servizio o un risultato inaspettato per velocizzare la risoluzione. Inoltre, può essere integrato con sistemi di monitoraggio per avvisare i team quando vengono rilevati modelli inaspettati, come picchi di latenza o percentuali di errore più elevate.
- Sicurezza e conformità: poiché mostrano il percorso dei dati in un sistema, le tracce possono fungere da audit trail, indispensabili per la conformità con i requisiti normativi relativi all'elaborazione e alla gestione dei dati.
- Sviluppo e test: gli sviluppatori possono eseguire il tracciamento con Jaeger negli ambienti locali per rilevare errori e problemi relativi alle dipendenze e alla latenza prima di distribuire un'applicazione.
Tracciamento distribuito e Red Hat
Red Hat® OpenShift® Observability è una piattaforma completa per l'osservabilità che permette agli utenti di ottenere informazioni approfondite sulle prestazioni e sull'integrità dell'infrastruttura e delle applicazioni basate su OpenShift. Una delle funzionalità dello stack di osservabilità di Red Hat è il tracciamento distribuito, che fino al 2024 includeva Jaeger. All'inizio dell'anno, Red Hat ha abbandonato Jaeger e Elasticsearch a favore di Tempo Operator e della build di Red Hat OpenTelemetry.
Quest'ultima può essere utilizzata per raccogliere le tracce in molti formati, non solo provenienti dai client Jaeger, ma anche Zipkin e OpenTelemetry Protocol (OTLP). Ma è solo l'inizio, perché questo collector può essere utilizzato per raccogliere tutti i segnali di osservabilità. Le release di Red Hat più recenti in termini di tracciamento distribuito comprendono numerosi miglioramenti. Oltre all'implementazione della generazione automatica delle metriche dagli span, consentono la creazione di avvisi basati su tali metriche. Per favorire l'integrazione dello stack Prometheus, abbiamo aggiunto alla build il componente Target Allocator, con cui i clienti possono estrarre gli endpoint Prometheus in modo semplice e rendere efficienti la gestione e la distribuzione su scala.
Tempo funge da sostituzione immediata delle funzionalità di storage e visualizzazione del tracciamento distribuito offerte dal prodotto Jaeger. Consente di semplificare i deployment locali per la sperimentazione con il tracciamento distribuito o per la risoluzione agevole dei problemi sia nei deployment che non richiedono grandi capacità di storage di tracciamento, sia deployment più grandi. Tempo presenta ancora l'interfaccia utente di Jaeger, che consente una visualizzazione comoda delle tracce.