Erste Schritte mit Grafana Tempo

Lassen Sie uns die Grundlagen von Grafana Tempo lernen, einem verteilten Ablaufverfolgungs-Backend.

Die verteilte Ablaufverfolgung ist die Möglichkeit, detaillierte Informationen zur Systemleistung zu erhalten. Es ist eine Möglichkeit, den Lebenszyklus einer Anfrage zu visualisieren, die die Anwendung durchläuft. Die Anwendung könnte aus mehreren Diensten bestehen, die auf einem einzelnen Knoten vorhanden oder über Knoten verteilt sind.

Durch die Verwendung der verteilten Ablaufverfolgung erhalten Sie also 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 ein weiteres Projekt, „Grafana Tempo“, zu ihrem Open-Source-Portfolio hinzugefügt.

Grafana Tempo ist ein Open-Source-Backend für die verteilte Ablaufverfolgung, das hochgradig skalierbar und einfach zu verwenden 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, Ablaufverfolgungen 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. Aber durch das Downsampling wären einige wertvolle Informationen verloren gegangen, nach denen ich vielleicht gesucht habe. Mit Tempo brauchen wir jetzt kein Downsampling von verteilten Ablaufverfolgungsdaten. Wir können die vollständige Ablaufverfolgung in Objektspeichern wie S3 oder GCS speichern, was Tempo sehr kosteneffizient macht.

Außerdem ermöglicht Ihnen Tempo eine schnellere Fehlerbehebung/Fehlerbehebung, indem es Ihnen ermöglicht, schnell von Metriken zu den relevanten Ablaufverfolgungen der spezifischen Protokolle zu wechseln, die einige Probleme aufgezeichnet haben.

Nachfolgend sind die in Tempo verwendeten Konfigurationsoptionen aufgeführt.

  • Distributor: 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 Ablaufverfolgungen zu erstellen und sie zur Speicherung an TempoDB zu senden.
  • Compactor: Er 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.
  • Mitgliederliste: Wird zur Koordination zwischen Tempo-Komponenten verwendet.
  • Authentifizierung/Server: Tempo verwendet Weaveworks/Common-Server. Es wird verwendet, um Serverkonfigurationen festzulegen.
  Rette dich selbst im Multi-Plattformer Beyond Gravity [Paid]

Tempo-Architektur

Das obige Diagramm zeigt die Arbeitsarchitektur von Grafana Tempo.

Erstens erhält der Verteiler Spans in verschiedenen Formaten von Zipkin, Jaeger, OpenTelemetry, OpenCensus und sendet diese Spans an Ingers, indem er die Trace-ID hasht. Ingester erstellt dann Batches von Ablaufverfolgungen, die als Blöcke bezeichnet werden.

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

Zuerst prüft es, ob diese Ablaufverfolgungs-ID im Inster vorhanden ist; Wenn es es nicht findet, überprüft es das Speicher-Backend. Es verwendet einen einfachen HTTP-Endpunkt, um die Traces verfügbar zu machen. In der Zwischenzeit nimmt der Kompaktor die Blöcke aus dem Lager, kombiniert sie und schickt sie zurück zum Lager, um die Anzahl der Blöcke im Lager 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:

  So erstellen Sie eine Umfrage in Zoom

Protokoll
Hafen
Telemetrie öffnen
55680
Jaeger – Sparbüchse
6831
Jaeger – Binäre Sparsamkeit
6832
Jaeger – Sparsamkeit HTTP
14268
Jaeger – GRPC
14250
Zipkin
9411

Führen Sie mithilfe der Tempo-Konfigurationsdatei einen Docker-Container aus. Hier wähle ich Jäger – Thrift Compact-Format (Port 6831) zum Senden der 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

Jetzt müssen Sie einen Tempo-Abfragecontainer ausführen. Laden Sie also zuerst die Konfigurationsdatei für die Tempo-Abfrage 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 Tempo-Abfrage 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 wie unten gezeigt unter http://localhost:16686 zugänglich.

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.

Ausführen einer Demo-Anwendung 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 ZIP-Datei von Grafana Tempo herunter: https://github.com/grafana/tempo

Extrahieren Sie es in den Home-Ordner und wechseln Sie in das Docker-Compose-Verzeichnis. Sie werden mehrere Beispiele für docker-compose finden; 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.

  7 Fangen Sie betrügende Ehepartner-Apps, die Sie jetzt ausprobieren können

Jetzt generiert der synthetische Lastgenerator, der in einem Container ausgeführt wird, Ablaufverfolgungs-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 übergeben müssen, um Traces zu generieren.

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

Sie können sehen, dass die Ablaufverfolgungen für die von mir angegebene Ablaufverfolgungs-ID erfolgreich generiert wurden.

Fazit

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

Alles wird in Tempo erfasst, und Sie werden kein Detail aufgrund von Downsampling verpassen, was früher geschah. Tempo ist für ein Entwickler- oder Produktionsteam einfach, um die Ursache der Fehler oder Warnungen zu verstehen, die in den Protokollen auftreten können.