Qu'est-ce que Jaeger ?
Jaeger est un logiciel que vous pouvez utiliser pour surveiller et résoudre les problèmes des composants logiciels interconnectés appelés micro-services. Plusieurs microservices communiquent entre eux pour remplir une seule fonction logicielle. Les développeurs utilisent Jaeger pour visualiser la chaîne d'événements dans ces interactions de microservices pour isoler le problème lorsque quelque chose ne va pas. Jaeger est également appelé Jaeger Tracing, car il suit, ou trace, le parcours d'une requête à travers une série d'interactions entre microservices.
En quoi Jaeger est-il important ?
Jusqu'à présent, la conception des logiciels était monolithique, plusieurs fonctions étant regroupées dans une seule base de code. Par exemple, pour concevoir une application de commande de nourriture, le menu, les restaurants et les systèmes de paiement étaient tous regroupés dans une seule unité logicielle. Une telle conception du logiciel rendait la solution plus complexe et difficile à maintenir. Lorsque les développeurs apportaient des modifications au code dans un domaine, l'ensemble du système était affecté, ce qui faisait de la gestion des modifications un processus long et fastidieux. Pour résoudre ce problème, la conception de l'architecture est devenue plus modulaire.
Microservices
Les applications modernes fonctionnent comme un ensemble de petites unités indépendantes appelées microservices. Par exemple, une application moderne de commande de nourriture peut se composer des éléments suivants :
- Un service de géolocalisation pour retrouver l'endroit où se trouve le client
- Un service qui collecte et envoie les commandes aux restaurants
- Une passerelle de paiement offrant plusieurs options de paiement
Chaque microservice fonctionne comme une application indépendante et a accès à sa propre base de données et à sa propre logique. Les microservices communiquent entre eux à l'aide de demandes et de réponses, comme une application web. Un système de microservices de base est également appelé système distribué.
Dépannage de l'architecture des microservices
L'examen des problèmes dans les systèmes distribués est une tâche difficile, en raison des comportements complexes des microservices. Par exemple, commander un repas sur une application modulaire peut déclencher plusieurs demandes vers divers microservices. Ces demandes peuvent avoir lieu simultanément et indépendamment, et ne doivent pas être séquentielles. Si un problème se produit lors de la commande de repas, les développeurs doivent déterminer quel microservice en est à l'origine. Les approches classiques de suivi des problèmes offrent uniquement une vue parcellaire de la demande, ce qui rend difficile le dépannage des microservices.
Jaeger est un outil logiciel que les équipes informatiques utilisent pour avoir visibilité et clarté sur l'ensemble de la chaîne des événements. Elles peuvent ainsi résoudre plus rapidement les problèmes et améliorer l'expérience client.
À quoi sert Jaeger ?
Les développeurs utilisent Jaeger pour améliorer les performances des systèmes distribués de différentes manières. Nous en donnons quelques exemples ci-dessous.
Surveillance des transactions distribuées
Jaeger dispose de fonctionnalités qui surveillent les mouvements de données entre les microservices. Les développeurs peuvent chercher à détecter et à résoudre les problèmes de manière proactive avant qu'ils ne perturbent l'expérience des utilisateurs.
Optimisation de la latence
L'analytique de Jaeger permet de localiser les goulots d'étranglement dans les microservices qui ralentissent une application. Jaeger permet aux développeurs d'inspecter le comportement des microservices et de trouver des moyens de les rendre plus rapides.
Analyse de la cause racine
Dans une architecture de microservices, un problème peut en entraîner d'autres. Jaeger peut permettre aux développeurs de trouver le point de départ d'une série de problèmes connexes dans une application.
Analyse des dépendances de services
La dépendance de service signifie qu'une application dépend de plusieurs composants pour fonctionner. Par exemple, une application de navigation dépend des services de localisation de l'application mobile. Jaeger permet aux développeurs de comprendre les relations complexes entre les différents microservices.
Propagation du contexte distribué
La propagation du contexte distribué est la façon dont une application transmet des informations descriptives avec les données. Les développeurs peuvent ainsi évaluer les performances des microservices dans leur ensemble. Par exemple, Jaeger marque les demandes de commande avec le nom du client afin que les développeurs puissent associer le chemin de la demande à un client spécifique.
Comment fonctionne Jaeger ?
Jaeger fonctionne sur les principes du traçage distribué et utilise le cadre OpenTracing.
Traçage distribué
Le traçage distribué est une technique logicielle qui surveille les séquences d'événements entre les microservices. Il garde la trace de toutes les connexions et fournit des diagrammes et des graphiques pour visualiser les chemins de requête dans une application. En tant qu'outil de traçage distribué, Jaeger suit les mouvements des requêtes en attribuant un identifiant unique à chaque requête et en collectant des informations lorsqu'un service particulier traite la requête.
OpenTracing
OpenTracing est un cadre open source (accessible gratuitement), qui fournit les normes permettant de faire du traçage distribué précis et clé en main une réalité dans les systèmes logiciels modernes. Par exemple, il fournit une norme commune pour définir la structure des informations de suivi qui circulent entre les microservices. Jaeger utilise OpenTracing pour fournir une solution complète permettant de collecter, stocker, gérer, analyser et visualiser les données des microservices.
Modèle de données OpenTracing
Le modèle de données OpenTracing présente la définition de base pour connecter les données de différents composants. Les deux principaux termes qu'il utilise sont span et trace.
Span
Un span est une unité logique unique de travail effectuée dans un système de traçage distribué. Chaque span comporte les éléments suivants :
- Un nom d'opération
- Une heure de début et une heure de fin
- Des balises ou des valeurs qui aident les développeurs à analyser le span
- Des journaux qui stockent tous les messages générés par le microservice
- Le contexte du span ou des descriptions supplémentaires du span
Trace
Une trace est une collection d'un ou plusieurs spans qui appartiennent au même processus. Elle représente les événements qui se produisent pendant un temps spécifique. Les spans qui appartiennent à la même trace partagent le même ID de trace. Par exemple, une trace qui est générée lorsqu'un client commande de la nourriture donne lieu aux spans suivants :
- Le client soumet une commande
- Le paiement est effectué
- La liste des commandes est envoyée au restaurant
- La commande est récupérée
- La commande est livrée
Quels sont les éléments qui composent Jaeger ?
La plateforme de traçage distribuée Jaeger comprend les éléments suivants.
Client Jaeger
Le client Jaeger contient des implémentations spécifiques au langage de l'API OpenTracing dans des langages de programmation comme Go, JavaScript, Java, Python, Ruby et PHP.
Les développeurs utilisent ces API pour créer des spans Jaeger sans écrire le code source du traçage distribué.
Agent Jaeger
L'agent Jaeger est un démon réseau ou un processus qui fonctionne en permanence en arrière-plan pour exécuter des fonctions requises par d'autres processus. Il écoute les spans que le client envoie à travers le protocole UDP (User Datagram Protocol), un type de méthode de communication qui permet aux applications d'échanger des messages sur un réseau.
L'agent se connecte au client dans des environnements de conteneurs comme Amazon Elastic Kubernetes Service. Les groupes d'agents créent des spans par lots et les envoient au collecteur. Ainsi, l'application peut s'exécuter sans envoyer activement des informations de trace au backend Jaeger.
Collecteur Jaeger
Il s'agit d'un composant logiciel qui récupère les traces du collecteur Jaeger. Il vérifie, traite et stocke les traces dans la base de données.
Stockage
Le système de traçage Jaeger reçoit les spans et les stocke dans une base de données ou un backend de stockage persistant. Le stockage persistant signifie que les données stockées restent intactes même si l'ordinateur est éteint. Par exemple, les développeurs utilisent AWS OpenSearch Service comme stockage persistant pour stocker et accepter les spans.
Solution d'ingestion
Le déploiement de Jaeger peut se faire entre autres en envoyant des données de trace à Kafka, un système distribué permettant aux applications de stocker et de récupérer des flux d'informations. Une solution d'ingestion est un module qui lit les données de trace à partir de Kafka et les stocke séparément.
Requête
Le service de requêtes récupère les informations de traces dans la base de données. Les développeurs utilisent des requêtes pour trouver des traces avec une heure, des balises, une durée et une opération spécifiques.
Jaeger Console
Jaeger Console est un logiciel doté d'une interface utilisateur que vous pouvez utiliser pour visualiser et analyser les traces. Il affiche les données des traces sous forme de graphiques et de diagrammes.
Comment les développeurs utilisent-ils Jaeger ?
Lorsque les développeurs construisent une application, ils utilisent les bibliothèques clientes Jaeger pour créer des portées. En ajoutant des codes au programme pour produire des données de trace, ils créent ce que l'on appelle une application instrumentée. L'application instrumentée génère automatiquement les éléments suivants :
- Des spans contenant l'ID du span, l'ID de la trace, les balises, les journaux et le contexte du span
- Des traces pour chaque requête
Les développeurs utilisent la console Jaeger pour rechercher, filtrer, visualiser et analyser ces données de traçage distribuées. Ils peuvent utiliser le logiciel Jaeger UI pour visualiser des informations détaillées telles que la durée du processus, les erreurs et les journaux des microservices.
Quelles sont les méthodes d'échantillonnage de Jaeger ?
Une application instrumentée transmet automatiquement des données de suivi lorsque l'application est en cours d'exécution. Vous pouvez utiliser ces données de suivi pour mesurer les performances de l'application. Ces données sont également appelées données de télémétrie. Pour éviter que le backend de Jaeger ne soit submergé par un excès de données télémétriques, vous pouvez les filtrer ou les échantillonner en configurant des stratégies d'échantillonnage dans votre implémentation de Jaeger. Voici quelques méthodes d'échantillonnage :
- L'échantillonnage constant collecte le même nombre d'échantillons pour tous les types de traces.
- L'échantillonnage probabiliste collecte des échantillons de manière aléatoire jusqu'à ce qu'il atteigne un certain pourcentage.
- L'échantillonnage à débit limité récupère un nombre spécifique d'échantillons par seconde.
- L'échantillonnage adaptatif ajuste automatiquement le taux d'échantillonnage pour obtenir un certain nombre de traces pendant une durée spécifique.
Qu'est-ce que le AWS App Mesh ?
AWS App Mesh est un maillage de services ou une infrastructure logicielle qui fait le gros du travail pour que vous puissiez gérer plus facilement les systèmes distribués basés sur des micro-services. AWS App Mesh fait ce qui suit :
- AWS App Mesh offre une visibilité de bout en bout et une forte disponibilité de vos applications.
- AWS App Mesh configure chaque service pour exporter les données de surveillance et implémente une logique de contrôle des communications cohérente au sein de votre application.
- Fournit un contrôle du trafic réseau pour aider les développeurs à créer des applications cloud sécurisées.
Vous pouvez utiliser AWS App Mesh comme solution autonome pour vos besoins de traçage distribué. Elle prend également en charge plusieurs outils tiers non AWS, comme Jaeger, que vous pouvez utiliser pour surveiller, enregistrer ou tracer les communications des micro-services.
Commencez à utiliser Jaeger sur App Mesh en créant un compte AWS dès aujourd'hui.
Jaeger : Prochaines étapes sur AWS
Commencez à créer avec AWS dans la Console de gestion AWS.