Erste Schritte mit Grafana Tempo

Veröffentlicht: 2021-04-19

Lernen wir die Grundlagen von Grafana Tempo, einem verteilten Tracing-Backend, kennen.

Verteiltes Tracing ist der Weg, um detaillierte Informationen über die Systemleistung zu erhalten. Es ist eine Möglichkeit, den Lebenszyklus einer Anforderung zu visualisieren, die die Anwendung durchläuft. Die Anwendung kann aus mehreren Diensten bestehen, die auf einem einzelnen Knoten vorhanden oder über Knoten verteilt sind.

Wenn Sie also verteiltes Tracing verwenden, erhalten Sie eine konsolidierte Ansicht aller Dienste. Und genau darum geht es bei Grafana Tempo.

Was ist Grafana-Tempo?

Auf der diesjährigen ObservabilityCon-Konferenz gab es einige wichtige Updates von Grafana Labs, und Grafana Tempo war eine davon. Grafana Labs hat sein Open-Source-Portfolio um ein weiteres Projekt namens „Grafana Tempo“ erweitert.

Grafana Tempo ist ein Open-Source-Backend für verteiltes Tracing, das hochgradig skalierbar und einfach zu bedienen ist. Tempo ist vollständig kompatibel mit anderen Tracing-Protokollen wie Zipkin, Jaeger, OpenTelemetry und OpenCensus. Derzeit unterstützt es die Tempo-Data-Discovery-Engine in Loki und überwacht Plattformen wie Prometheus und Grafana. Grafana 7.3+ bietet ein nahtloses Erlebnis zwischen Grafana und Tempo.

Warum Tempo verwenden?

Tempo wird verwendet, um die Metriken, Traces und Protokolle zu korrelieren. Es gibt Situationen, in denen ein Benutzer mehrmals dieselbe Art von Fehler erhält. Wenn ich verstehen will, was passiert, muss ich mir die genauen Spuren ansehen. Durch das Downsampling wären jedoch einige wertvolle Informationen verloren gegangen, nach denen ich möglicherweise suche. Mit Tempo müssen wir jetzt keine verteilten Ablaufverfolgungsdaten herunterrechnen. Wir können den kompletten Trace in Objektspeichern wie S3 oder GCS speichern, was Tempo sehr kostengünstig macht.

Außerdem ermöglicht Tempo Ihnen eine schnellere Fehlersuche/Fehlerbehebung, indem Sie schnell von Metriken zu den relevanten Spuren der spezifischen Protokolle wechseln können, in denen einige Probleme aufgezeichnet wurden.

Unten sind die Konfigurationsoptionen, die in Tempo verwendet werden.

  • Verteiler : Diese werden verwendet, um Empfangsoptionen zu konfigurieren, um Spans zu empfangen und sie dann an die Inger zu senden.
  • Ingester : Diese werden verwendet, um Batches von Traces zu erstellen und sie zur Speicherung an TempoDB zu senden.
  • Compactor : Es streamt Blöcke aus dem Speicher wie S3 oder GCS, kombiniert sie und schreibt sie zurück in den Speicher.
  • Speicher : Dies wird verwendet, um TempoDB zu konfigurieren. Sie müssen den Speicher-Back-End-Namen (S3 oder GCS) mit anderen Parametern in dieser Konfiguration angeben.
  • Memberlist : Wird für die Koordination zwischen Tempo-Komponenten verwendet.
  • Authentifizierung/Server : Tempo verwendet Weaveworks/Common-Server. Es wird verwendet, um Serverkonfigurationen festzulegen.

Tempo Architektur

Tempo Architektur

Das obige Diagramm zeigt die Arbeitsarchitektur von Grafana Tempo.

Zunächst erhält der Distributor Spans in unterschiedlichen Formaten von Zipkin, Jaeger, OpenTelemetry, OpenCensus und sendet diese Spans durch Hashing der Trace-ID an Inger. Ingester erstellt dann Batches von Traces, die als Blöcke bezeichnet werden.

Dann sendet es diese Blöcke an den Back-End-Speicher (S3/GCS). Wenn Sie eine Ablaufverfolgungs-ID haben, die Sie beheben möchten, verwenden Sie die Grafana-Benutzeroberfläche und geben Sie die Ablaufverfolgungs-ID in die Suchleiste ein. Jetzt ist der Querier dafür verantwortlich, die Details zu der von Ihnen eingegebenen Ablaufverfolgungs-ID entweder vom Inger oder Objektspeicher abzurufen.

Zunächst wird überprüft, ob diese Trace-ID im Inger vorhanden ist; Wenn es nicht gefunden wird, überprüft es das Speicher-Back-End. Es verwendet einen einfachen HTTP-Endpunkt, um die Traces bereitzustellen. Währenddessen entnimmt der Verdichter die Blöcke aus dem Speicher, kombiniert sie und schickt sie zurück zum Speicher, um die Anzahl der Blöcke im Speicher zu reduzieren.

Tempo mit Docker einrichten

In diesem Abschnitt werde ich Grafana Tempo Schritt für Schritt mit Docker einrichten. Zunächst benötigen Sie ein Tempo-Backend, richten Sie also ein Docker-Netzwerk ein.

 [[email protected] ~]$ docker network create docker-tempo

Laden Sie die Tempo-Konfigurationsdatei herunter.

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

Unten ist die Liste der Protokolloptionen, die Sie erhalten:

Protokoll Hafen
Telemetrie öffnen 55680
Jaeger – Sparsamkeit Kompakt 6831
Jaeger – Sparsamkeit Binär 6832
Jaeger – Sparsamkeit HTTP 14268
Jäger – GRPC 14250
Zipkin 9411

Führen Sie mithilfe der Tempo-Konfigurationsdatei einen Docker-Container aus. Hier wähle ich Jaeger – Thrift Compact Format (Port 6831), um die Traces zu senden.

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

Jetzt müssen Sie einen Tempo-Abfragecontainer ausführen. Laden Sie also zuerst die Konfigurationsdatei für die Tempoabfrage herunter.

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

Führen Sie mithilfe der Konfigurationsdatei für die Tempoabfrage einen Docker-Container aus.

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

Jetzt ist die Jaeger-Benutzeroberfläche unter http://localhost:16686 zugänglich , wie unten gezeigt.

jaeger ui - geekflare

In der Suchleiste können Sie die Ablaufverfolgungs-ID aus einem Protokoll hinzufügen, das Sie beheben möchten, und die Ablaufverfolgungen werden für Sie generiert.

traceid - neu

Ausführen einer Demoanwendung auf Tempo

Es ist an der Zeit, ein Demo-Beispiel von Grafana Tempo auszuführen. Ich werde ein docker-compose-Beispiel ausführen. Wenn Sie also dasselbe versuchen, muss docker-compose auf Ihrem Computer installiert sein.

Laden Sie die Grafana Tempo-Zip-Datei herunter: https://github.com/grafana/tempo

Entpacken Sie es in den Home-Ordner und wechseln Sie in das Verzeichnis docker-compose. Sie finden mehrere Beispiele für docker-compose; Ich verwende das Beispiel, in dem die Daten einer Anwendung lokal gespeichert werden.

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

Führen Sie den folgenden Befehl aus, um den Stack zu starten.

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

Wie Sie sehen, wurden Container für Grafana, Loki, Tempo, Tempo-query und Prometheus gestartet.

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

Sie können auch zu Ihrem Browser gehen und überprüfen, ob Grafana, Jaeger UI, Prometheus ausgeführt werden.

grafana

Prometheus

Jetzt generiert der synthetische Lastgenerator, der in einem Container ausgeführt wird, Trace-IDs, die er in das Tempo einfügt. Führen Sie den folgenden Befehl aus, und Sie können die Protokolle anzeigen.

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

Dies sind die Trace-IDs, die Sie zum Generieren von Traces übergeben müssen.

Spuren neu

Ich kopiere eine der Trace-IDs und füge sie in die Suchleiste der Jaeger-Benutzeroberfläche ein.

Traceid

Sie können sehen, dass die Traces erfolgreich generiert wurden, die sich auf die von mir angegebene Trace-ID beziehen.

Fazit

Das war also alles über Grafana Tempo. Fahren Sie fort und verwenden Sie Tempo, um Traces zu generieren, um die Metriken und Probleme in Ihren Protokollen im Detail zu verstehen.

Alles wird in Tempo erfasst, und Sie werden durch das frühere Downsampling kein Detail verpassen. Tempo ist für Entwickler oder Produktionsteams einfach, um die Grundursache der Fehler oder Warnungen zu verstehen, die in den Protokollen auftreten können.