Jump to section

Jaeger, qu'est-ce que c'est ?

Copier l'URL

Jaeger est un logiciel Open Source qui s'utilise pour tracer les transactions entre plusieurs services distribués. Il permet de surveiller les environnements de microservices complexes et d'en résoudre les problèmes.

Le traçage distribué est un moyen d'observer et de comprendre l'ensemble de la chaîne d'événements lors d'une interaction complexe entre des microservices.

Le développement moderne d'applications cloud-native repose sur les microservices, c'est-à-dire des services indépendants qui fournissent chacun une fonction essentielle différente. Lorsqu'un utilisateur lance une requête dans une application, de nombreux services individuels répondent pour produire un résultat.

Dans une application, une requête unique peut appeler des dizaines de services différents qui interagissent les uns avec les autres.Lorsqu'elles doivent isoler un problème en cas de panne ou de ralentissement, les équipes de développement et d'ingénierie doivent pouvoir retracer toutes les connexions.

C'est là qu'intervient le traçage distribué. Ce mécanisme s'exécute souvent au sein d'un Service Mesh, qui est un moyen de gérer et d'observer les microservices.

Jaeger utilise le traçage distribué pour suivre le chemin d'une requête au travers des différents microservices. Comme cette solution offre une représentation visuelle des flux d'appels, elle élimine toute supposition.

Que ce soit pour la résolution des problèmes ou l'optimisation, il est utile de disposer d'informations bien organisées. Jaeger inclut des outils de surveillance des transactions distribuées, d'optimisation des performances et de la latence, ainsi que d'analyse des causes profondes, une méthode de résolution des problèmes.

En tant que projet Open Source, Jaeger s'appuie sur une communauté de centaines de contributeurs. Jaeger repose sur des API OpenTracing et des instruments qui ne dépendent d'aucun fournisseur.

C'est l'entreprise de covoiturage Uber qui a développé le projet Open Source Jaeger en 2015. Il a été accepté en 2017 comme projet d'incubation par la Cloud Native Computing Foundation (CNCF) et a été approuvé en 2019.

Jaeger recueille, stocke et visualise les « traces » en provenance des systèmes distribués. Ces traces permettent de comprendre le parcours des requêtes au sein d'un système, et également de localiser les points de latence et les erreurs.

Jaeger présente les requêtes d'exécution sous la forme de traces. Une trace montre le chemin des données ou de l'exécution à travers un système. 

Une trace se compose d'au moins un intervalle. Un intervalle est une unité logique de travail dans Jaeger, par exemple une requête de base de données ou une demande HTTP. Chaque intervalle comporte le nom de l'opération, l'heure de début et la durée. Les intervalles peuvent être imbriqués et classés.

Processus Jaeger

Le processus consiste à tracer les exécutions d'une opération dans un système distribué, chaque composant Jaeger étant responsable de tâches courantes spécifiques. 

Le SDK OpenTelemetry peut être utilisé avec n'importe quel langage de programmation, puis exporté dans un format lisible par Jaeger ou par une autre plateforme de traçage.

Une fois en place, le processus Jaeger se déroule de la manière suivante :

  1. La première étape du traçage consiste à instrumenter une application, c'est-à-dire à modifier son code de manière qu'elle puisse générer des traces. L'instrumentation peut être réalisée de façon manuelle, à l'aide des bibliothèques client Jaeger disponibles pour une multitude de langages de programmation, ou automatisée au moyen de solutions de middleware et de frameworks compatibles avec les API OpenTracing ou OpenTelemetry.
  2. Lorsque l'application est exécutée, les traces indiquent le chemin d'exécution détaillé d'une opération entre les microservices. Une trace se compose de plusieurs intervalles contenant chacun des informations (comme le nom de l'opération, l'heure de début et l'heure de fin), ainsi que des paires clé-valeur qui fournissent des données contextuelles (codes d'état HTTP, messages d'erreur, etc.).
  3. Pour relier les intervalles afin de former une trace unique, Jaeger transmet des identifiants et d'autres informations contextuelles entre les différents services dans des requêtes et des réponses. Cette étape correspond à la propagation du contexte. Chaque intervalle et chaque trace porte un identifiant unique qui permet de rassembler tous les composants individuels du parcours d'une requête.
  4. Les intervalles sont collectés à l'aide de bibliothèques client Jaeger avant d'être envoyés à l'agent Jaeger, généralement déployé en parallèle de l'application ou en tant que démon dans des environnements comme Kubernetes.
  5. Le collecteur Jaeger reçoit les intervalles et les stocke dans une base de données back-end. Plusieurs solutions de stockage permettent de gérer les données de trace Jaeger de manière évolutive et flexible, parmi lesquelles Elasticsearch, Cassandra et Google Cloud Bigtable.
  6. Le service Query de Jaeger fournit une interface pour la recherche et la visualisation des traces. Les équipes de développement et d'exploitation peuvent y recourir pour examiner chaque trace, visualiser la hiérarchie des intervalles et leurs horaires, mais aussi pour analyser le comportement et les performances des systèmes.
  7. La console Jaeger est une interface utilisateur qui permet de visualiser toutes les données de traçage distribué et d'obtenir ainsi des informations sur les problèmes de latence, les erreurs, les dépendances ou encore l'optimisation des performances.

Le logiciel Jaeger permet de comprendre le fonctionnement des microservices et des requêtes au sein d'un système distribué. Il convient donc pour les cas d'utilisation suivants :

  1. Optimisation des performances : en plus de localiser les points de latence dans les microservices, Jaeger permet de visualiser les interactions et les dépendances entre les différents services, ce qui aide à optimiser l'allocation des ressources.
  2. Analyse des causes profondes : avec les traces, il est possible de remonter à l'origine d'un problème (un service défaillant ou un résultat inattendu, par exemple) et d'en accélérer sa résolution. L'association de Jaeger à un système de surveillance offre l'avantage supplémentaire de pouvoir être averti de tout comportement inhabituel (par exemple, un pic de latence ou d'erreurs).
  3. Sécurité et conformité : parce que les traces montrent les flux de données à travers un système, elles peuvent servir de piste d'audit, un élément essentiel pour garantir le respect des réglementations en matière de traitement des données.
  4. Développement et tests : pour l'équipe de développement, le traçage Jaeger dans les environnements locaux facilite la détection des erreurs et des problèmes de latence et de dépendance, avant même le déploiement de l'application. 

Red Hat® OpenShift® Observability est un ensemble complet de capacités d'observabilité qui fournissent des informations détaillées sur les performances et l'intégrité des applications et infrastructures basées sur OpenShift. Le traçage distribué fait partie de ces fonctions et incluait Jaeger jusqu'en 2024. Depuis début 2024, les logiciels Jaeger et Elasticsearch ont été remplacés par l'opérateur Tempo et la version Red Hat d'OpenTelemetry.

Notre version d'OpenTelemetry permet de recueillir des traces dans une multitude de formats, notamment via les clients Jaeger mais aussi Zipkin et OTLP (OpenTelemetry Protocol). Cette solution s'utilise aussi pour collecter tous les signaux d'observabilité et a été largement améliorée au fil des versions. En plus de la génération automatisée d'indicateurs de mesure concernant les intervalles, elle permet en effet de créer des alertes basées sur ces indicateurs. Et pour faciliter l'intégration de la pile Prometheus, nous avons ajouté le composant Target Allocator à notre version, avec pour objectif de simplifier l'extraction des points de terminaison Prometheus, tout en optimisant leur gestion et leur mise à l'échelle.

L'opérateur Tempo vient remplacer les fonctions de stockage et de visualisation du traçage distribué que le logiciel Jaeger assurait jusqu'alors. Il convient pour les déploiements simples en local, dans le cadre de tests ou de la résolution rapide de problèmes où les besoins en stockage de traces sont réduits, comme pour les projets de plus grande envergure. Pour permettre de visualiser les traces de manière fluide, l'interface utilisateur de Jaeger reste intégrée à Tempo.

Découvrir les composants et fonctionnalités d'OpenShift →

Pour aller plus loin

ARTICLE

Les microservices comme technologie d'intégration dans le secteur de la santé

Les microservices permettent aux développeurs, notamment ceux du secteur de la santé, de créer des applications qui sont constituées de services faiblement couplés, ce qui facilite les étapes de développement, de test, de déploiement et de mise à niveau.

ARTICLE

Les microservices, qu'est-ce que c'est ?

Les microservices désignent une approche architecturale du développement d'applications selon laquelle les différentes parties d'une application fonctionnent en synergie tout en étant séparées.

ARTICLE

Un Service Mesh, qu'est-ce que c'est ?

Un Service Mesh est une couche d'infrastructure comprise dans une application qui permet de documenter les interactions entre les services, pour simplifier l'optimisation des communications et réduire les temps d'arrêt.