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.
Terminologia e componenti di Jaeger
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
ed è costituita da uno o più span, che rappresentano le unità logiche di lavoro. Ogni span include il nome, l'orario di avvio e la durata dell'operazione. Gli span possono essere nidificati e ordinati.
Jaeger include svariati componenti che interagiscono tra loro per raccogliere, archiviare e visualizzare span e tracce.
Jaeger Client include le implementazioni specifiche di linguaggio dell'API OpenTracing per il tracciamento distribuito. Queste possono essere utilizzate manualmente o con diversi framework open source.
Jaeger Agent è un daemon di rete, in ascolto degli span inviati tramite il protocollo User Datagram. L'agente deve trovarsi sullo stesso host dell'applicazione in questione. Questa implementazione viene in genere eseguita tramite un sidecar in ambienti containerizzati come Kubernetes.
Jaeger Collector riceve gli span e li colloca nella coda di elaborazione.
Poiché i collector richiedono un back end di storage permanente, Jaeger è dotato anche di un meccanismo collegabile per lo storage degli span.
Query è il servizio che recupera le tracce dallo storage.
Jaeger Console è l'interfaccia utente che consente di visualizzare i dati del tracciamento distribuito.
Jaeger e Red Hat
Jaeger viene installato per impostazione predefinita come parte di Red Hat® OpenShift® Service Mesh, che include un'implementazione di Istio, una service mesh open source.
Questa implementazione di tracciamento distribuito offre svariati vantaggi. Jaeger si integra con Kiali, una console per la visibilità di Istio. Il back end di Jaeger offre un'elevata scalabilità senza singoli punti di errore. Jaeger può collegare i dati di diversi componenti per creare una traccia completa end to end. Jaeger è inoltre retrocompatibile con Zipkin.