Premiers pas avec Grafana Tempo

Photo of author

By pierre



Découvrons les fondements de Grafana Tempo, un outil de suivi distribué.

Le suivi distribué est essentiel pour obtenir des informations précises sur les performances d’un système. Il permet de visualiser le parcours d’une requête à travers l’application. Cette dernière peut être constituée de plusieurs services, hébergés sur un seul ou plusieurs serveurs.

Ainsi, le suivi distribué offre une vue d’ensemble de l’ensemble des services. Grafana Tempo est un outil conçu pour cela.

Qu’est-ce que Grafana Tempo?

Lors de la conférence ObservabilityCon de cette année, Grafana Labs a annoncé des mises à jour importantes, dont Grafana Tempo. Il s’agit d’un nouveau projet open source qui vient compléter leur offre.

Grafana Tempo est une solution open source, très évolutive et simple d’utilisation pour le suivi distribué. Elle est compatible avec différents protocoles de suivi, tels que Zipkin, Jaeger, OpenTelemetry et OpenCensus. Actuellement, elle prend en charge la recherche de données Tempo dans Loki, ainsi que des plateformes de surveillance telles que Prometheus et Grafana. La version 7.3 et les versions ultérieures de Grafana offrent une intégration fluide avec Tempo.

Pourquoi utiliser Tempo ?

Tempo est utilisé pour corréler les métriques, les traces et les logs. Il arrive qu’un utilisateur rencontre plusieurs fois le même type d’erreur. Pour comprendre l’origine du problème, il est nécessaire d’examiner les traces précises de l’événement. Cependant, avec le sous-échantillonnage, certaines informations cruciales peuvent être perdues. Tempo élimine le besoin de sous-échantillonner les données de suivi distribué. Il permet de stocker la trace complète dans un stockage d’objets tel que S3 ou GCS, ce qui rend Tempo très rentable.

De plus, Tempo accélère le débogage et la résolution de problèmes en permettant de passer rapidement des métriques aux traces pertinentes des journaux associés à des incidents spécifiques.

Voici les options de configuration utilisées dans Tempo:

  • Distributeur : Utilisé pour configurer les options de réception afin de recevoir les étendues et de les envoyer aux ingesters.
  • Ingester : Utilisé pour créer des lots de traces et les envoyer à TempoDB pour le stockage.
  • Compacteur : Extrait des blocs du stockage, tels que S3 ou GCS, les combine et les réécrit dans le stockage.
  • Stockage : Utilisé pour configurer TempoDB. Il faut indiquer le nom du backend de stockage (S3 ou GCS) ainsi que d’autres paramètres.
  • Liste des membres : Utilisée pour la coordination entre les différents composants de Tempo.
  • Authentification/Serveur : Tempo utilise le serveur Weaveworks/Common. Il sert à définir les configurations du serveur.

Architecture de Tempo

Le schéma ci-dessus illustre le fonctionnement de Grafana Tempo.

Tout d’abord, le distributeur reçoit les étendues dans divers formats (Zipkin, Jaeger, OpenTelemetry, OpenCensus) et les envoie aux ingesters en hachant l’ID de trace. Ensuite, l’ingester crée des lots de traces appelés « blocs ».

Ces blocs sont ensuite envoyés au stockage principal (S3/GCS). Lorsqu’un ID de trace doit être examiné, l’utilisateur entre cet ID dans la barre de recherche de l’interface utilisateur de Grafana. Le demandeur est alors chargé de récupérer les informations correspondantes auprès de l’ingester ou du stockage d’objets.

Il vérifie d’abord si l’ID de trace est présent dans l’ingester. S’il ne le trouve pas, il interroge le backend de stockage. Tempo expose les traces via un simple point de terminaison HTTP. Parallèlement, le compacteur extrait des blocs du stockage, les fusionne et les réécrit dans le stockage afin de réduire leur nombre.

Configurer Tempo avec Docker

Dans cette section, nous allons configurer Grafana Tempo étape par étape à l’aide de Docker. Il faut commencer par configurer un réseau Docker pour Tempo.

docker network create docker-tempo

Téléchargez ensuite le fichier de configuration de Tempo.

curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml

Voici la liste des protocoles pris en charge :

Protocole Port
Open Telemetry 55680
Jaeger – Thrift Compact 6831
Jaeger – Thrift Binaire 6832
Jaeger – Thrift HTTP 14268
Jaeger – GRPC 14250
Zipkin 9411

Utilisons le fichier de configuration de tempo pour lancer un conteneur Docker. Ici, nous choisissons le format Jaeger – Thrift Compact (port 6831) pour envoyer les traces.

docker run -d --rm -p 6831:6831/udp --name tempo -v $(pwd)/tempo-local.yaml:/etc/tempo-local.yaml --network docker-tempo grafana/tempo:latest -config.file=/etc/tempo-local.yaml

Il faut maintenant lancer un conteneur pour les requêtes Tempo. Téléchargez le fichier de configuration correspondant.

curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml

Utilisez ce fichier de configuration pour lancer un conteneur Docker pour les requêtes.

docker run -d --rm -p 16686:16686 -v $(pwd)/tempo-query.yaml:/etc/tempo-query.yaml --network docker-tempo grafana/tempo-query:latest --grpc-storage-plugin.configuration-file=/etc/tempo-query.yaml

L’interface utilisateur de Jaeger est maintenant accessible à l’adresse http://localhost:16686, comme illustré ci-dessous.

Vous pouvez saisir l’ID de trace d’un journal à analyser dans la barre de recherche pour générer les traces associées.

Lancer une application de démonstration sur Tempo

Il est temps de tester un exemple de démonstration fourni par Grafana Tempo. Nous utiliserons un exemple docker-compose, donc assurez-vous que docker-compose est installé sur votre machine.

Téléchargez l’archive zip de Grafana Tempo : https://github.com/grafana/tempo

Extrayez l’archive dans votre répertoire personnel et accédez au dossier docker-compose. Vous y trouverez plusieurs exemples de docker-compose. Nous utiliserons celui où les données d’une application sont stockées localement.

cd tempo-master/example/docker-compose/
ls

Exécutez la commande ci-dessous pour démarrer l’ensemble des services.

docker-compose up -d

Vous pouvez constater que des conteneurs pour Grafana, Loki, Tempo, Tempo-query et Prometheus ont été lancés.

docker ps

Vous pouvez vérifier dans votre navigateur que Grafana, l’interface utilisateur de Jaeger et Prometheus sont en cours d’exécution.

Le générateur de charge synthétique, fonctionnant dans un conteneur, génère des identifiants de trace qu’il envoie à Tempo. Vous pouvez consulter les logs en exécutant la commande ci-dessous.

docker-compose logs -f synthetic-load-generator

Voici les identifiants de trace que vous pouvez utiliser pour générer des traces.

Copiez l’un des identifiants de trace et collez-le dans la barre de recherche de l’interface utilisateur de Jaeger.

Vous pouvez constater que les traces associées à l’identifiant de trace fourni ont été générées avec succès.

Conclusion

Voilà, nous avons fait le tour de Grafana Tempo. N’hésitez pas à utiliser Tempo pour générer des traces et analyser en détail les métriques et les problèmes signalés dans vos logs.

Tempo permet de capturer l’ensemble des données, sans perte d’information due au sous-échantillonnage. C’est un outil simple à utiliser pour les développeurs et les équipes de production pour identifier la cause profonde des erreurs ou des avertissements qui peuvent apparaître dans les journaux.