Che cos'è Jaeger?

Jaeger è un software che si può usare per monitorare e risolvere i problemi dei componenti software interconnessi, chiamati microservizi. Diversi microservizi comunicano tra loro per completare una singola funzione software. Gli sviluppatori utilizzano Jaeger per visualizzare la catena di eventi in queste interazioni tra microservizi, per isolare il problema quando qualcosa va storto. Jaeger è chiamato anche Jaeger Tracing perché segue, o traccia, il percorso di una richiesta attraverso una serie di interazioni tra microservizi.   

Perché Jaeger è importante?

In passato, la struttura dei software era monolitica, con diverse funzioni unite da una base di codice singola. Ad esempio, per progettare un'app per ordinare cibo, il menu, i ristoranti e i sistemi di pagamento venivano collegati in un'unica unità software. Questo tipo di struttura del software ha reso la soluzione più complessa e più difficile da mantenere. Quando gli sviluppatori realizzavano delle modifiche al codice in un'area, questa azione danneggiava tutto il sistema, e questo rendeva la gestione delle modifiche un processo lungo e faticoso. Per risolvere il problema, la progettazione dell'architettura è diventata più modulare.

Microservizi

Le applicazioni moderne funzionano come delle raccolte di unità indipendenti più piccole chiamate microservizi. Ad esempio, un'app moderna per ordinare il cibo può comprendere le seguenti parti:

  • Un servizio di geolocalizzazione per individuare dove si trova il cliente 
  • Un servizio di raccolta e invio degli ordini ai ristoranti  
  • Un gateway per i pagamenti con diverse opzioni di pagamento

 

Ogni microservizio funziona come applicazione indipendente e ha accesso al suo database a alla sua logica. I microservizi comunicano tra loro usando richieste e risposte, come un'applicazione Web. Il sistema di base di un microservizio viene chiamato anche sistema distribuito.

Risoluzione dei problemi dell'architettura di microservizi

Analizzare i problemi dei servizi distribuiti è molto complicato a causa dei comportamenti complessi dei microservizi. Ad esempio, realizzare un ordine di cibo su un'app modulare può provocare molte richieste a microservizi diversi. Queste richieste possono avvenire contemporaneamente o in modo indipendente e non devono essere in sequenza. Se si verifica un problema con un ordine di cibo, gli sviluppatori devono determinare quale microservizio lo ha causato. Gli approcci tradizionali di tracciamento dei problemi forniscono solo una visione parziale della richiesta, rendendo la risoluzione del problema del microservizio molto lunga.

 

Jaeger è uno strumento software che i team IT utilizzano per ottenere visibilità e chiarezza su tutta la catena degli eventi. Così, riescono a risolvere i problemi più rapidamente e, di conseguenza, a migliorare l'esperienza cliente.

Per cosa viene utilizzato Jaeger?

Gli sviluppatori utilizzano Jaeger per migliorare le prestazioni del sistema distribuito in diversi modi. Di seguito riportiamo alcuni esempi.

Monitoraggio distribuito delle transazioni

Jaeger ha funzionalità che monitorano i movimenti dei dati tra microservizi. Gli sviluppatori possono adottare un approccio proattivo per rilevare e risolvere i problemi prima di interrompere l'esperienza utente.

Ottimizzazione della latenza

Le analisi di Jaeger possono individuare dei colli di bottiglia nei microservizi che rallentano l'applicazione. Gli sviluppatori utilizzano Jaeger per ispezionare il comportamento dei microservizi e trovare dei modi per velocizzarli.

Analisi della causa principale

Nell'architettura di un microservizio, un problema ne può creare un altro. Gli sviluppatori possono utilizzare Jaeger per trovare il punto di partenza di una serie di problemi correlati in un'applicazione.

Analisi della dipendenza dei servizi

Per dipendenza dei servizi si intende che un'applicazione dipende dall'esecuzione di una serie di componenti. Ad esempio, un'app di navigazione dipende dai servizi di localizzazione sull'app mobile. Gli sviluppatori utilizzano Jaeger per comprendere la relazione complessa tra i diversi microservizi. 

Propagazione distribuita del contesto

La propagazione distribuita del contesto è il modo in cui l'applicazione trasmette le informazioni descrittive con i dati. Questo processo aiuta gli sviluppatori a valutare le prestazioni del microservizio come un unico nucleo. Ad esempio, Jaeger assegna i tag delle richieste degli ordini secondo il nome del cliente in modo che gli sviluppatori possano associare il percorso della richiesta al cliente che l'ha realizzata. 

Come funziona Jaeger?

Jaeger funziona tramite principi di tracciamento distribuito e utilizza il framework OpenTracing.

Tracciamento distribuito

Il tracciamento distribuito è una tecnica software che monitora le sequenze degli eventi tra microservizi. Tiene traccia di tutte le connessioni e fornisce diagrammi e grafici per visualizzare i percorsi delle richieste in un'applicazione. Come strumento di tracciamento distribuito, Jaeger traccia i movimenti delle richieste assegnando loro un identificatore univoco e raccogliendo le informazioni quando un servizio specifico le elabora. 

OpenTracing

OpenTracing è un framework open-source, ovvero disponibile per tutti, che offre degli standard per realizzare tracciamenti distribuiti accurati e pronti all'uso sui sistemi software moderni. Per esempio, fornisce uno standard comune per definire la struttura delle informazioni monitorate che si spostano tra i microservizi. Jaeger utilizza OpenTracing per offrire una soluzione completa per raccogliere, archiviare, gestire, analizzare e visualizzare i dati dei microservizi.  

Modello di dati di OpenTracing

Il modello di dati di OpenTracing fornisce la definizione di base per connettere i dati da componenti diverse. I due termini principali che utilizza sono span e traccia.

Span

Uno span è un'unità logica relativo al lavoro realizzato in un sistema di tracciamento distribuito. Ogni span ha i seguenti componenti:

  • Un nome relativo all'operazione
  • Un orario di inizio e di fine
  • Tag o valori che aiutano gli sviluppatori ad analizzarlo
  • Registri che archiviano i messaggi generati dal microservizio
  • Contesto dello span o descrizioni aggiuntive

Traccia

Una traccia è una raccolta di uno o più span che appartengono allo stesso processo. Rappresenta gli eventi che accadono durante un periodo specifico. Gli span che appartengono alla stessa traccia condividono lo stesso ID traccia. Per esempio, una traccia generata quando un cliente ordina del cibo ha come risultato i seguenti span: 

  • Il cliente invia l'ordine
  • Il pagamento viene elaborato
  • L'ordine viene inviato al ristorante
  • Il cibo viene ritirato
  • Il cibo viene consegnato

Quali sono i componenti di Jaeger?

La piattaforma di tracciamento distribuito Jaeger è composta dai seguenti componenti. 

Client Jaeger

Il client Jaeger contiene implementazioni specifiche per lingua di API OpenTracing in linguaggi di programmazione come Go, JavaScript, Java, Python, Ruby e PHP.

Gli sviluppatori utilizzano queste API per creare span Jaeger senza scrivere il codice fonte per il tracciamento distribuito. 

Agente Jaeger

L'agente Jaeger è un daemon di rete o un processo eseguito continuamente in background per realizzare funzioni richieste da altri processi. Ascolta gli span inviati dal client tramite il protocollo di datagramma dell'utente (UDP), un metodo di comunicazione che permette alle applicazioni di scambiare messaggi su una rete.  

L'agente si collega al cliente in ambienti container come Amazon Elastic Kubernetes Service. I gruppi di agenti creano span in batch e le inviano ai raccoglitori. Questo permette alle applicazioni di essere eseguite senza inviare attivamente informazioni sul tracciamento al backend Jaeger. 

Raccoglitore Jaeger

Un raccoglitore Jaeger è un componente software che recupera le tracce dal raccoglitore Jaeger. Controlla, elabora e archivia le tracce nel database.

Archiviazione

Il sistema di tracciamento Jaeger riceve gli span e li archivia in un backend o in un database di archiviazione persistenti. L'archiviazione persistente significa che i dati archiviati rimangono intatti anche se il computer si spegne. Per esempio, gli sviluppatori utilizzano il servizio AWS OpenSearch come archiviazione persistente per archiviare e accettare gli span.

Ingester

Un modo per implementare Jaeger consiste nell'inviare dati di tracciamento a Kafka, un sistema distribuito che permette alle applicazioni di archiviare e recuperare i flussi di informazioni. Un ingester è un modulo che legge i dati di tracciamento da Kafka e li archivia separatamente. 

Query

Il servizio di query recupera le informazioni di tracciamento dal database. Gli sviluppatori utilizzano le query per trovare tracce con tempo, tag, durata e operazioni specifici. 

Console Jaeger

La console Jaeger è un programma software con un'interfaccia utente che puoi utilizzare per visualizzare e analizzare le tracce. Infatti, mostra i dati di tracciamento in grafici e diagrammi. 

In che modo gli sviluppatori utilizzano Jaeger?

Quando gli sviluppatori creano un'applicazione, utilizzano le librerie del client Jaeger per creare degli span. Aggiungendo i codici al programma per produrre dati di tracciamento, creano quella che è nota come applicazione strumentalizzata. L'applicazione strumentalizzata genera automaticamente quanto segue:

 

  1. Span che contengono ID span, ID traccia, tag, registri e contesto degli span 
  2. Tracce per ogni richiesta

 

Gli sviluppatori utilizzano la console Jaeger per cercare, filtrare, visualizzare e analizzare questi dati di tracciamento distribuiti. Possono utilizzare il software di interfaccia utente Jaeger per visualizzare informazioni dettagliate come la durata del processo, gli errori e i registri dei microservizi. 

Che cosa sono le strategie di campionamento Jaeger?

Un'applicazione strumentalizzata trasmette automaticamente i dati di tracciamento ovunque venga eseguita l'applicazione. Puoi utilizzare questi dati di tracciamento per misurare le prestazioni dell'applicazione. Questi dati vengono chiamati anche dati telemetrici. Per evitare che il backend Jaeger sia sopraffatto da un numero troppo alto di dati telemetrici, puoi filtrarli configurando delle strategie di campionamento nell'implementazione Jaeger. Ecco alcune strategie di campionamento:

  • Il campionamento costante raccoglie lo stesso numero di campioni per tutti i tipi di traccia.
  • Il campionamento probabilistico raccoglie i campioni in modo casuale finché non raggiunge una certa percentuale.
  • Il campionamento con rate limiting recupera un numero specifico di campioni ogni secondo.
  • Il campionamento adattivo regola la frequenza di campionamento per raggiungere un certo numero di tracce per una durata specifica.

Cos'è AWS App Mesh?

AWS App Mesh è una mesh di servizi o un'infrastruttura software che fa il lavoro pesante in modo da poter gestire più facilmente i sistemi distribuiti basati su microservizi. AWS App Mesh consente di: 

  • Fornire visibilità end-to-end e disponibilità elevata per le applicazioni.
  • Configurare ogni servizio per esportare i dati di monitoraggio, oltre a implementare costantemente la logica di controllo delle comunicazioni nell'applicazione. 
  • Fornire il controllo del traffico di rete per aiutare gli sviluppatori a creare applicazioni cloud sicure. 

AWS App Mesh può essere utilizzato come soluzione autonoma per le tue esigenze di tracciamento distribuito. Supporta inoltre diversi strumenti di terze parti non AWS, come Jaeger, che possono essere utilizzati per monitorare, registrare o tracciare le comunicazioni dei microservizi.

Inizia oggi stesso a utilizzare Jaeger su App Mesh creando un account AWS.

Passaggi successivi di Jaeger su AWS

Scopri ulteriori risorse correlate al prodotto
Ulteriori informazioni su AWS App Mesh 
Registrati per creare un account gratuito

Ottieni accesso istantaneo al piano gratuito di AWS. 

Registrati 
Inizia subito nella console

Inizia subito a costruire con AWS nella Console di gestione AWS.

Accedi