• Assurez la sécurité des applications de la bonne manière! Détectez, protégez, surveillez, accélérez et plus encore…
  • Apprenons les principes de base 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 passant par l'application. L'application peut être constituée de 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 à ce sujet.

    Qu'est-ce que Grafana Tempo?

    Il y a eu quelques mises à jour majeures de Grafana Labs à la conférence ObservabilityCon cette année, et Grafana Tempo en faisait partie. Grafana Labs a ajouté un autre projet, «Grafana Tempo», à leur portefeuille open source.

    Tempo Grafana 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 Prométhée 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 dans lesquelles un utilisateur reçoit le même type d'erreur plusieurs fois. 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 se seraient 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 stockage d'objets comme S3 ou GCS, rendant Tempo très rentable.

    En outre, Tempo vous permet un débogage / dépannage plus rapide 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.

    • Distributeurs: Ceux-ci sont utilisés pour configurer les options de réception pour recevoir des délais, puis les envoyer aux ingesters.
    • Ingérer: Ils sont utilisés pour créer des lots de traces et les envoyer à TempoDB pour stockage.
    • Compactor: Il diffuse les blocs du stockage tels que S3 ou GCS, les combine et les réécrit dans le stockage.
    • Préservation : 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: Il est utilisé pour la coordination entre les composants Tempo.
    • Authentification / Serveur: Tempo utilise le serveur Weaveworks / Common. Il est utilisé pour définir les configurations de serveur.

    Architecture de tempo

    architecture de tempo

    Le diagramme ci-dessus montre l'architecture de travail de Grafana Tempo.

    Premièrement, 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 qui sont appelés blocs.

    Ensuite, il envoie ces blocs au stockage backend (S3 / GCS). Lorsque vous avez un ID de trace que vous souhaitez dépanner, vous allez utiliser l'interface utilisateur Grafana et mettre l'ID de trace dans la barre de recherche. Désormais, le demandeur est chargé d'obtenir les détails de l'ingénieur ou du stockage d'objets sur l'ID de trace que vous avez entré.

    Premièrement, 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 en utilisant 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

    Voici la liste des options de protocole que vous obtenez:

    Passerelle Port
    Télémétrie ouverte 55680
    Jaeger - Thrift Compact 6831
    Jaeger - Binaire d'épargne 6832
    Jaeger - HTTP économe 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êtes Tempo. Commencez par télécharger 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 la 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 Jaeger sera accessible à http://localhost:16686, comme indiqué ci-dessous.

    jaeger ui - geekflare

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

    traceid - nouveau

    Exécution d'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 installé docker-compose sur votre machine.

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

    Extrayez-le dans le dossier de départ et accédez au docker-compose annuaire. 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, il a démarré des conteneurs pour Grafana, Loki, Tempo, Tempo-query et Prométhée.

    [[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 fonctionnent.

    Grafana

    Prométhée

    Désormais, le générateur de charge synthétique fonctionnant à 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 pouvez 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 passer pour générer des traces.

    trace nouveau

    Je copie l'un des identifiants de trace et le mets dans la barre de recherche Jaeger UI.

    traceid

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

    Conclusion

    C'était donc à propos 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 de votre journaux en détail.

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