Apprenons les bases de Grafana Tempo, un backend de traçage distribué.
Le traçage distribué est le moyen d’obtenir des informations précises sur les performances du système. C’est un moyen de visualiser le cycle de vie d’une requête transitant par l’application. L’application peut consister en plusieurs 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. Et Grafana Tempo est tout cela.
Table des matières
Qu’est-ce que Grafana Tempo ?
Il y a eu quelques mises à jour majeures de Grafana Labs lors de la conférence ObservabilityCon cette année, et Grafana Tempo était l’une d’entre elles. Grafana Labs a ajouté un autre projet, « Grafana Tempo », à son portefeuille open source.
Grafana Tempo 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, des plates-formes 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 existe des situations où un utilisateur reçoit plusieurs fois le même type d’erreur. Si je veux comprendre ce qui se passe, je devrai regarder 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 d’objets comme S3 ou GCS, ce qui rend Tempo très rentable.
En outre, Tempo vous permet d’accélérer le débogage/dépannage en vous permettant de passer rapidement des métriques aux traces pertinentes des journaux spécifiques qui ont enregistré certains problèmes.
Vous trouverez ci-dessous les options de configuration utilisées dans Tempo.
- Distributeur : Ceux-ci sont utilisés pour configurer les options de réception afin de recevoir des étendues, puis de les envoyer aux ingesters.
- Ingester : Ceux-ci sont utilisés pour créer des lots de traces et les envoient à TempoDB pour le stockage.
- Compacteur : il diffuse des blocs depuis le stockage, tels que S3 ou GCS, les combine et les réécrit dans le stockage.
- Stockage : Ceci 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 Tempo
Le diagramme ci-dessus montre l’architecture de travail de Grafana Tempo.
Tout d’abord, le distributeur reçoit des étendues dans différents formats de Zipkin, Jaeger, OpenTelemetry, OpenCensus et envoie ces étendues aux ingesters en hachant l’ID de trace. Ingester crée alors des lots de traces appelés blocs.
Ensuite, il envoie ces blocs au stockage principal (S3/GCS). Lorsque vous avez un ID de trace que vous souhaitez dépanner, vous utiliserez l’interface utilisateur Grafana et placez l’ID de trace dans la barre de recherche. Désormais, le demandeur est chargé d’obtenir les détails de l’ingester ou du stockage d’objets concernant l’ID de trace que vous avez entré.
Tout d’abord, il vérifie si cet ID de trace est présent dans l’ingester ; s’il ne le trouve pas, il vérifie alors le backend de stockage. Il utilise un simple point de terminaison 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 le tempo à l’aide de Docker
Dans cette section, je vais configurer Grafana Tempo étape par étape à l’aide de Docker. Tout d’abord, vous avez besoin d’un backend Tempo, alors configurez un réseau Docker.
[[email protected] ~]$ docker network create docker-tempo
Téléchargez le fichier de configuration Tempo.
[[email protected] ~]$ 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 obtenez :
Protocole
Port
Télémétrie ouverte
55680
Jaeger – Thrift Compact
6831
Jaeger – Thrift binaire
6832
Jaeger – Thrift HTTP
14268
Jaeger – GRPC
14250
Zipkin
9411
À l’aide du fichier de configuration de tempo, exécutez un conteneur Docker. Ici je choisis Jaeger – Format Thrift Compact (port 6831) pour envoyer les traces.
[[email protected] ~]$ 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
Vous devez maintenant exécuter un conteneur de requête Tempo. Alors d’abord, téléchargez le fichier de configuration de la requête de tempo.
[[email protected] ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yaml
À l’aide du fichier de configuration de requête de tempo, exécutez un conteneur Docker.
[[email protected] ~]$ 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
Désormais, l’interface utilisateur de Jaeger sera accessible à l’adresse http://localhost:16686, comme indiqué ci-dessous.
Dans la barre de recherche, vous pouvez ajouter l’ID de trace d’un journal que vous souhaitez dépanner, et il générera les traces pour vous.
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 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 Grafana Tempo : https://github.com/grafana/tempo
Extrayez-le dans le dossier d’accueil et accédez au 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.
[[email protected] ~]$ cd tempo-master/example/docker-compose/ [[email protected] 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.
[[email protected] docker-compose]$ docker-compose up -d Starting docker-compose_prometheus_1 ... done Starting docker-compose_tempo_1 ... done Starting docker-compose_grafana_1 ... done Starting docker-compose_tempo-query_1 ... done Starting docker-compose_synthetic-load-generator_1 ... done
Vous pouvez voir qu’il a lancé des conteneurs pour Grafana, Loki, Tempo, Tempo-query et Prometheus.
[[email protected] docker-compose]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 84cd557ce07b grafana/tempo-query:latest "/go/bin/query-linux…" 10 minutes ago 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" 10 minutes ago Up 4 seconds docker-compose_synthetic-load-generator_1 6d9d9fbdb8f1 grafana/grafana:7.3.0-beta1 "/run.sh" 10 minutes ago Up 6 seconds 0.0.0.0:3000->3000/tcp docker-compose_grafana_1 d8574ea25028 grafana/tempo:latest "/tempo -config.file…" 10 minutes ago Up 6 seconds 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…" 10 minutes ago Up 6 seconds 0.0.0.0:9090->9090/tcp docker-compose_prometheus_1
Vous pouvez également accéder à votre navigateur et vérifier si Grafana, Jaeger UI, Prometheus sont en cours d’exécution.
Maintenant, le générateur de charge synthétique s’exécutant à l’intérieur d’un conteneur génère des identifiants de trace qu’il met à l’intérieur du tempo. Exécutez la commande ci-dessous et vous pourrez afficher les journaux.
[[email protected] docker-compose]$ docker-compose logs -f synthetic-load-generator Attaching to docker-compose_synthetic-load-generator_1 synthetic-load-generator_1 | using params: --jaegerCollectorUrl http://tempo:14268 synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /product, 2880 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /cart, 14400 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /checkout, 480 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 17867942c5e161f2 for service frontend route /currency synthetic-load-generator_1 | 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 3d9cc23c8129439f for service frontend route /shipping synthetic-load-generator_1
Ce sont les identifiants de trace que vous devez transmettre pour générer des traces.
Je copie l’un des identifiants de trace et le place dans la barre de recherche de l’interface utilisateur Jaeger.
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
C’était donc tout à propos de Grafana Tempo. Allez-y et commencez à utiliser Tempo pour générer des traces afin de comprendre en détail les métriques et les problèmes de vos journaux.
Tout est capturé dans Tempo, et vous ne manquerez aucun détail à cause du sous-échantillonnage, 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 se produire dans les journaux.