• Erledigen Sie die Anwendungssicherheit auf die richtige Weise! Erkennen, schützen, überwachen, beschleunigen und mehr…
  • Lernen wir die Grundlagen von Grafana Tempo, einem verteilten Tracing-Backend.

    Verteilte Ablaufverfolgung ist der Weg, um detaillierte Informationen über die Systemleistung zu erhalten. Auf diese Weise können Sie den Lebenszyklus einer Anforderung visualisieren, die die Anwendung durchläuft. Die Anwendung kann aus mehreren Diensten bestehen, die auf einem einzelnen Knoten vorhanden oder auf mehrere Knoten verteilt sind.

    Durch die Verwendung der verteilten Ablaufverfolgung erhalten Sie eine konsolidierte Ansicht aller Dienste. Und Grafana Tempo dreht sich alles darum.

    What is 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, "Grafana Tempo", erweitert.

    Grafana Tempo ist ein Open-Source-Backend für verteilte Ablaufverfolgung, das hoch skalierbar und einfach zu verwenden ist. Tempo ist vollständig kompatibel mit anderen Ablaufverfolgungsprotokollen 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 eine nahtlose Erfahrung zwischen Grafana und Tempo.

    Why use Tempo?

    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. Aber aufgrund von Downsampling wären einige wertvolle Informationen, nach denen ich suchen könnte, verloren gegangen. Mit Tempo müssen wir jetzt verteilte Tracing-Daten nicht mehr herunterrechnen. Wir können die komplette Spur in speichern Objektspeicher wie S3 oder GCS, was Tempo sehr kosteneffizient macht.

    Außerdem ermöglicht Tempo Ihnen ein schnelleres Debuggen / Beheben von Problemen, indem Sie schnell von Metriken zu den relevanten Spuren der spezifischen Protokolle wechseln können, in denen einige Probleme aufgezeichnet wurden.

    Nachfolgend finden Sie die in Tempo verwendeten Konfigurationsoptionen.

    • Verteiler: Diese werden verwendet, um Empfangsoptionen für den Empfang von Bereichen zu konfigurieren und diese dann an die Ingester zu senden.
    • Einnahme: Diese werden verwendet, um Stapel von Traces zu erstellen und diese zur Speicherung an TempoDB zu senden.
    • Compactor: Es überträgt Blöcke aus dem Speicher wie S3 oder GCS, kombiniert sie und schreibt sie zurück in den Speicher.
    • Lagerung: Hiermit wird TempoDB konfiguriert. Sie müssen den Namen des Speicher-Backends (S3 oder GCS) mit anderen Parametern in dieser Konfiguration angeben.
    • Mitgliederliste: Es wird zur Koordination zwischen Tempo-Komponenten verwendet.
    • Authentifizierung / Server: Tempo verwendet Weaveworks / Common Server. Es wird verwendet, um Serverkonfigurationen festzulegen.

    Tempo Architecture

    Tempo Architektur

    Das obige Diagramm zeigt die Arbeitsarchitektur von Grafana Tempo.

    Erstens empfängt der Distributor Spans in verschiedenen Formaten von Zipkin, Jaeger, OpenTelemetry, OpenCensus und sendet diese Spans an die Ingester, indem er die Trace-ID hasht. Ingester erstellt dann Stapel von Traces, die als Blöcke bezeichnet werden.

    Anschließend werden diese Blöcke an den Backend-Speicher (S3 / GCS) gesendet. Wenn Sie eine Trace-ID haben, die Sie beheben möchten, verwenden Sie die Grafana-Benutzeroberfläche und fügen die Trace-ID in die Suchleiste ein. Jetzt ist der Abfrager dafür verantwortlich, die Details der von Ihnen eingegebenen Trace-ID entweder vom Ingester oder vom Objektspeicher abzurufen.

    Zunächst wird überprüft, ob diese Trace-ID im Ingester vorhanden ist. Wenn es nicht gefunden wird, überprüft es das Speicher-Backend. Es verwendet einen einfachen HTTP-Endpunkt, um die Traces verfügbar zu machen. In der Zwischenzeit nimmt der Verdichter die Blöcke aus dem Speicher, kombiniert sie und sendet sie zurück an den Speicher, um die Anzahl der Blöcke im Speicher zu verringern.

    Setup Tempo using Docker

    In diesem Abschnitt werde ich Grafana Tempo Schritt für Schritt mit einrichten Docker. Zunächst benötigen Sie ein Tempo-Backend. Richten Sie daher 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 finden Sie eine Liste der Protokolloptionen, die Sie erhalten:

    Protokoll Hafen
    Öffnen Sie die Telemetrie 55680
    Jaeger - Thrift Compact 6831
    Jaeger - Thrift Binary 6832
    Jaeger - Thrift HTTP 14268
    Jaeger - 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) 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 unter verfügbar http://localhost:16686, Wie nachfolgend dargestellt.

    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

    Running a Demo Application on Tempo

    Es ist Zeit, ein Demo-Beispiel von Grafana Tempo zu starten. 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

    Extrahieren Sie es in den Home-Ordner und gehen Sie zu Docker-komponieren Verzeichnis. 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 Stapel 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

    Sie können sehen, es hat Container für Grafana, Loki, Tempo, Tempo-Abfrage und gestartet 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

    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 läuft, 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 Ablaufverfolgungs-IDs, die Sie übergeben müssen, um Ablaufverfolgungen zu generieren.

    Spuren neu

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

    Traceid

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

    Fazit

    Das war also alles über Grafana Tempo. Verwenden Sie Tempo, um Traces zu generieren, um die Metriken und Probleme in Ihrem System zu verstehen Protokolle im Detail.

    Alles wird in Tempo erfasst, und Sie werden kein Detail verpassen, da früher ein Downsampling durchgeführt wurde. Tempo ist für Entwickler oder Produktionsteams unkompliziert, um die Hauptursache für die Fehler oder Warnungen zu verstehen, die in den Protokollen auftreten können.