Tracing distribué avec Jaeger sur un OVHcloud Managed Kubernetes Service
Découvrez comment mettre en place le tracing distribué sur OVHcloud Managed Kubernetes Service avec Jaeger.
Objectif
Jaeger est une plateforme open source de tracing distribué.

Elle peut être utilisée pour superviser des systèmes distribués basés sur des microservices :
- Propagation de contexte distribué
- Supervision des transactions distribuées
- Analyse des causes racines
- Analyse des dépendances entre services
- Optimisation des performances et de la latence
Jaeger contient plusieurs composants :

Pour en savoir plus, consultez la documentation sur l'architecture et les composants de Jaeger.
Dans ce guide, vous allez :
- Installer Jaeger Operator
- Déployer les composants Jaeger
- Accéder à l'interface utilisateur
- Déployer votre application instrumentée
- Visualiser les traces
Vous pouvez utiliser la fonction Reset cluster dans la section Public Cloud de l' pour réinitialiser votre cluster avant de suivre ce tutoriel.
Prérequis
Ce tutoriel suppose que vous disposez déjà d'un cluster OVHcloud Managed Kubernetes fonctionnel et de connaissances de base sur son fonctionnement. Pour en savoir plus sur ces sujets, consultez le guide de démarrage rapide d'OVHcloud Managed Kubernetes Service.
Vous devez également avoir installé Helm sur votre poste de travail et sur votre cluster. Reportez-vous au tutoriel Comment installer Helm sur OVHcloud Managed Kubernetes Service.
En pratique
Ce guide vous montre comment déployer Jaeger en tant que backend de la plateforme de tracing distribué, puis comment déployer votre application instrumentée qui enverra ses traces à Jaeger.
Installation de Jaeger
Pour ce tutoriel, nous utilisons le chart Helm de Jaeger.
Ajoutez le dépôt Helm de Jaeger :
Ces commandes ajoutent le dépôt Helm de Jaeger à votre dépôt local de charts Helm et mettent à jour les dépôts de charts installés :
Le dépôt Jaeger fournit deux charts : jaeger et jaeger-operator. Pour ce guide, vous allez déployer le chart jaeger-operator, qui permet de configurer facilement une installation minimale.
Pour en savoir plus sur Jaeger Operator pour Kubernetes, consultez la documentation officielle.
Installez la dernière version de Jaeger avec la commande helm install :
Cette commande installe la dernière version de Jaeger Operator ainsi que le namespace observability :
Grâce au remplacement de la valeur rbac.clusterRole=true, vous demandez à l'opérateur de surveiller tous les namespaces.
Vérifiez que Jaeger Operator est bien en cours d'exécution :
La méthode la plus simple pour créer une instance Jaeger consiste à créer un fichier YAML qui installera l'image AllInOne par défaut. Cette image « all-in-one » regroupe : agent, collector, query, ingester et l'interface utilisateur de Jaeger au sein d'un seul pod, en utilisant par défaut un stockage en mémoire.
Pour ce guide, vous allez déployer les composants Jaeger selon cette méthode simple, adaptée au développement, aux tests et aux démonstrations, mais pour une stratégie de production, consultez la documentation officielle.
Une fois que le pod jaeger-operator du namespace observability est prêt, créez un fichier jaeger.yaml avec le contenu suivant :
Dans ce fichier manifeste YAML, vous spécifiez que vous souhaitez accéder à l'interface utilisateur de Jaeger (jaeger-query) via un Load Balancer.
Puis appliquez-le :
Ces commandes créent une nouvelle CRD Jaeger ainsi qu'une instance nommée jaeger :
Vous pouvez maintenant vérifier que l'instance Jaeger est bien en cours d'exécution avec les commandes suivantes :
Ces commandes permettent de vérifier que les instances ont bien été créées, de lister les objets Jaeger et de lister les pods en cours d'exécution :
Vous pouvez également vérifier que tous les services Jaeger ont bien été déployés :
Accès à l'interface utilisateur de Jaeger
Vous pouvez maintenant récupérer l'URL de l'interface utilisateur de Jaeger avec la commande suivante :
Vous devriez obtenir le résultat suivant :
Ouvrez votre navigateur et accédez à l'interface Jaeger.

Déployer votre application instrumentée
Pour relier votre application au backend Jaeger, vous devez utiliser un outil comme OpenTelemetry.

OpenTelemetry est un ensemble d'outils, d'API et de SDK. Il permet d'instrumenter, de générer, de collecter et d'exporter des données de télémétrie (métriques, logs et traces) afin de vous aider à analyser les performances et le comportement de votre logiciel.
OpenTelemetry s'intègre avec des bibliothèques et frameworks populaires tels que Spring, Express, Quarkus, ainsi qu'avec de nombreux langages. Consultez la documentation pour découvrir comment intégrer votre application.
Pour ce guide, vous allez déployer une application Golang, instrumentée avec OpenTelemetry, qui enverra ses traces à un fournisseur : votre collector Jaeger.
Notre fichier main.go contient :
- l'import des dépendances OpenTelemetry,
- une méthode
tracerProviderqui initie une connexion à un fournisseur Jaeger - une méthode
main()qui se connecte au collector Jaeger précédemment déployé et crée et envoie un span chaque fois que la route HTTP/est appelée
Le code source de l'application est disponible sur GitHub.
Nous avons déjà packagé une application Golang dans une image Docker et l'avons publiée dans notre dépôt Docker Hub ovhplatform afin que vous puissiez l'utiliser directement.
Pour déployer l'application sur votre OVHcloud Managed Kubernetes Service, créez un fichier deployment.yaml avec le contenu suivant :
Ce fichier manifeste de déploiement YAML définit que notre application, basée sur l'image ovhplatform/what-is-my-pod-with-tracing:1.0.2, sera déployée avec 3 réplicas (3 pods). Nous transmettons le nom du pod via une variable d'environnement afin de l'afficher dans notre application what-is-my-pod-with-tracing.
Ensuite, créez un fichier svc.yaml avec le contenu suivant pour définir notre service (un service expose un déploiement) :
Appliquez les fichiers manifestes de déploiement et de service à votre cluster avec les commandes suivantes :
Le résultat devrait être le suivant :
Vous pouvez vérifier que votre application est bien en cours d'exécution et que le service est créé en exécutant les commandes suivantes :
Le résultat devrait être le suivant :
Pour générer du trafic, vous devez récupérer l'IP externe de votre service :
Puis générez du trafic avec la commande curl :
Vous devriez obtenir le résultat suivant :
Visualiser les traces
Ouvrez votre navigateur et retournez sur l'interface Jaeger (http://$JAEGER_URL:16686).

Vous devriez maintenant voir deux services disponibles :
- go-what-is-my-pod-with-tracing
- jaeger-query
Sélectionnez le service go-what-is-my-pod-with-tracing et cliquez sur le bouton Find Traces.

Vous pouvez maintenant cliquer sur une trace pour visualiser des informations utiles.

Suppression (nettoyage)
Supprimez les composants Jaeger (créés par l'opérateur) :
Attendez que les composants soient supprimés, puis vous pouvez désinstaller l'opérateur.
Pour désinstaller Jaeger Operator, puisque vous l'avez installé via Helm, vous pouvez utiliser la commande helm uninstall afin de supprimer le chart Helm de Jaeger installé :
Supprimez le namespace observability :
Et supprimez l'application déployée :
Aller plus loin
-
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
-
Échangez avec notre communauté d'utilisateurs.