Nous allons apprendre les bases de Grafana Tempo, un backend de traçage distribué.

Le traçage distribué est le moyen d’obtenir des informations fines sur les performances du système. C’est un moyen de visualiser le cycle de vie d’une requête passant par l’application. L’application peut consister en de multiples services présents sur un seul nœud ou répartis sur plusieurs nœuds.

Ainsi, en utilisant le traçage distribué, vous pouvez obtenir une vue consolidée de tous les services. C’est ce que propose Grafana Tempo.

Qu’est-ce que Grafana Tempo ?

Grafana Labs a fait quelques mises à jour majeures lors de la conférence ObservabilityCon de cette année, et Grafana Tempo était l’une d’entre elles. Grafana Labs a ajouté un nouveau projet, “Grafana Tempo”, à son portefeuille open-source.

Grafana Tem po est un backend de traçage distribué open-source, hautement évolutif et facile à utiliser. Tempo est entièrement compatible avec d’autres protocoles de traçage tels que Zipkin, Jaeger, OpenTelemetry et OpenCensus. Actuellement, il prend en charge le moteur de découverte de données Tempo dans Loki, les plateformes de surveillance telles que Prometheus et Grafana. Grafana 7.3 offre une expérience transparente entre Grafana et Tempo.

Pourquoi utiliser Tempo ?

Tempo est utilisé pour corréler les métriques, les traces et les journaux. Il y a des situations où un utilisateur obtient le même type d’erreur plusieurs fois. Si je veux comprendre ce qui se passe, je dois examiner les traces exactes. Mais à cause du sous-échantillonnage, certaines informations précieuses que je pourrais rechercher auraient été perdues. Avec Tempo, nous n’avons plus besoin de sous-échantillonner les données de traçage distribuées. Nous pouvons stocker la trace complète dans un stockage objet comme S3 ou GCS, ce qui rend Tempo très rentable.

En outre, Tempo vous permet d’accélérer le débogage et le dépannage en vous permettant de passer rapidement des métriques aux traces pertinentes des journaux spécifiques qui ont enregistré des problèmes.

Vous trouverez ci-dessous les options de configuration utilisées dans Tempo.

  • Distributeur: Ces options sont utilisées pour configurer les options de réception afin de recevoir les travées et de les envoyer aux injecteurs.
  • Ingéreur: Ces options sont utilisées pour créer des lots de traces et les envoyer à TempoDB pour le stockage.
  • Compacteur: Il lit en continu les blocs depuis le stockage tel que S3 ou GCS, les combine et les réécrit dans le stockage.
  • Stockage: Il est utilisé pour configurer TempoDB. Vous devez mentionner le nom du backend de stockage (S3 ou GCS) avec d’autres paramètres dans cette configuration.
  • Liste des membres: Elle est utilisée pour la coordination entre les composants de Tempo.
  • Authentification/Serveur: Tempo utilise le serveur Weaveworks/Common. Il est utilisé pour définir les configurations du serveur.

Architecture de Tempo

tempo architecture

Le diagramme ci-dessus montre l’architecture de fonctionnement de Grafana Tempo.

Tout d’abord, le distributeur reçoit des traces dans différents formats de Zipkin, Jaeger, OpenTelemetry, OpenCensus et envoie ces traces aux ingesters en hachant l’ID de la trace. L’ingestionur crée alors des lots de traces qui sont appelés blocs.

Il envoie ensuite ces blocs au stockage dorsal (S3/GCS). Lorsque vous disposez d’un identifiant de trace que vous souhaitez dépanner, vous utilisez l’interface utilisateur Grafana et saisissez l’identifiant de trace dans la barre de recherche. Le quêteur est alors chargé d’obtenir les détails de l’ingester ou du stockage d’objets concernant l’identifiant de trace que vous avez saisi.

Tout d’abord, il vérifie si cette trace ID est présente dans l’ingester ; s’il ne la trouve pas, il vérifie alors le backend de stockage. Il utilise un simple point d’accès HTTP pour exposer les traces. Pendant ce temps, le compacteur prend les blocs du stockage, les combine et les renvoie au stockage pour réduire le nombre de blocs dans le stockage.

Configurer Tempo en utilisant Docker

Dans cette section, je vais configurer Grafana Tempo étape par étape en utilisant Docker. Tout d’abord, vous avez besoin d’un backend Tempo, donc mettez en place un réseau Docker.

[geekflare@geekflare ~]$ docker network create docker-tempo

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

[geekflare@geekflare ~]$ curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yaml

Vous trouverez ci-dessous la liste des options de protocole que vous obtiendrez :

Protocole Port
Ouvert Télémétrie 55680
Jaeger – Thrift Compact 6831
Jaeger – Thrift Binary 6832
Jaeger – Thrift HTTP 14268
Jaeger – GRPC 14250
Zipkin 9411

En utilisant le fichier de configuration tempo, lancez un conteneur docker. Ici, je choisis Jaeger – Thrift Compact format (port 6831) pour envoyer les traces.

[geekflare@geekflare ~]$ 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

Maintenant, vous devez exécuter un conteneur de requête Tempo. Tout d’abord, téléchargez le fichier de configuration de la requête tempo.

[geekflare@geekflare ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml

En utilisant le fichier de configuration de la requête tempo, lancez un conteneur docker.

[geekflare@geekflare ~]$ 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

Maintenant, l’interface utilisateur de Jaeger sera accessible à l’adresse http://localhost:16686, comme indiqué ci-dessous.

jaeger ui - geekflare

Dans la barre de recherche, vous pouvez ajouter l’ID de la trace d’un journal que vous voulez dépanner, et il générera les traces pour vous.

traceid - new

Exécuter une application de démonstration sur Tempo

Il est temps d’exécuter un exemple de démonstration donné par Grafana Tempo. Je vais exécuter un exemple de docker-compose, donc si vous essayez la même chose, vous devez avoir docker-compose installé sur votre machine.

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

Extrayez-le dans le dossier personnel et allez dans le répertoire docker-compose. Vous trouverez plusieurs exemples de docker-compose ; j’utilise l’exemple où les données d’une application sont stockées localement.

[geekflare@geekflare ~]$ cd tempo-master/example/docker-compose/
[geekflare@geekflare docker-compose]$ ls
docker-compose.loki.yaml docker-compose.s3.minio.yaml docker-compose.yaml etc
example-data readme.md tempo-link.png

Exécutez la commande ci-dessous pour démarrer la pile.

[geekflare@geekflare docker-compose]$ docker-compose up -d
Démarrage de docker-compose_prometheus_1 ... done
Démarrage de docker-compose_tempo_1 ... done
Démarrage de docker-compose_grafana_1 ... done
Démarrage de docker-compose_tempo-query_1 ... terminé
Démarrage de docker-compose_synthetic-load-generator_1 ... done

Vous pouvez voir qu’il a démarré les conteneurs pour Grafana, Loki, Tempo, Tempo-query, et Prometheus.

[geekflare@geekflare docker-compose]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
84cd557ce07b grafana/tempo-query:latest "/go/bin/query-linux..." il y a 10 minutes Up 4 seconds 0.0.0.0:16686->16686/tcp docker-compose_tempo-query_1
f7cd9cf460d9 omnition/synthetic-load-generator:1.0.25 "./start.sh" Il y a 10 minutes En haut 4 secondes docker-compose_synthetic-load-generator_1
6d9d9fbdb8f1 grafana/grafana:7.3.0-beta1 "/run.sh" Il y a 10 minutes En haut 6 secondes 0.0.0.0:3000->3000/tcp docker-compose_grafana_1
d8574ea25028 grafana/tempo:latest "/tempo -config.file..." Il y a 10 minutes En haut 6 secondes 0.0.0.0:49173->3100/tcp, 0.0.0.0:49172->14268/tcp docker-compose_tempo_1
5f9e53b5a09c prom/prometheus:latest "/bin/prometheus --c..." Il y a 10 minutes En haut 6 secondes 0.0.0.0:9090->9090/tcp docker-compose_prometheus_1

Vous pouvez également aller dans votre navigateur et vérifier si Grafana, Jaeger UI, Prometheus sont en cours d’exécution.

grafana

prometheus

Maintenant, le générateur de charge synthétique fonctionnant à l’intérieur d’un conteneur génère des identifiants de trace qu’il place dans tempo. Exécutez la commande ci-dessous, et vous pourrez voir les logs.

[geekflare@geekflare docker-compose]$ docker-compose logs -f synthetic-load-generator
Attachement à docker-compose_synthetic-load-generator_1
synthetic-load-generator_1 
| en utilisant les paramètres : 
--jaegerCollectorUrl http://tempo:14268
générateur_de_charge_synthétique_1 
| Le service de génération de traces a été lancé le 21/04/17 14:24:34 INFO ScheduledTraceGenerator : Démarrage de la génération de traces pour le service frontend, route /product, 2880 traces/hr
synthetic-load-generator_1 
| Le générateur de charge synthétique_1 a été mis en service le 21/04/17 14:24:34 INFO ScheduledTraceGenerator : Démarrage de la génération de traces pour le frontend du service, route /cart, 14400 traces/hr
synthetic-load-generator_1 
| Le générateur de charges synthétiques_1 a été mis en service le 21/04/17 14:24:34 INFO ScheduledTraceGenerator : Démarrage de la génération de traces pour le service frontend, route /checkout, 480 traces/hr
synthetic-load-generator_1 
| Le générateur de traces est en train de générer des traces pour le service frontend, route /checkout, 480 traces par heure : Emitted traceId 17867942c5e161f2 for service frontend route /currency
synthetic-load-generator_1 
| Le générateur de trace a émis la traceId 17867942c5e161f2 pour le service frontend route /currency synthetic-load-generator_1 : Emitted traceId 3d9cc23c8129439f for service frontend route /shipping
générateur de charge synthétique_1 

Ce sont les identifiants de trace que vous devez passer pour générer des traces.

traces new

Je copie l’un des identifiants de trace et le place dans la barre de recherche de l’interface utilisateur de Jaeger.

traceid

Vous pouvez voir qu’il a généré avec succès les traces liées à l’identifiant de trace que j’ai fourni.

Conclusion

Voilà pour ce qui est de Grafana Tempo. Allez-y et commencez à utiliser Tempo pour générer des traces afin de comprendre les métriques et les problèmes dans vos journaux en détail.

Tout est capturé dans Tempo, et vous ne manquerez aucun détail à cause du sous-échantillonnage, ce qui se produisait auparavant. Tempo est simple pour un développeur ou une équipe de production pour comprendre la cause première des erreurs ou des avertissements qui peuvent survenir dans les journaux.