GrafanaTempo入門

公開: 2021-04-19

分散トレースバックエンドであるGrafanaTempoの基礎を学びましょう。

分散トレースは、システムパフォーマンスに関する詳細な情報を取得する方法です。 これは、アプリケーションを通過するリクエストのライフサイクルを視覚化する方法です。 アプリケーションは、単一のノードに存在するか、ノード全体に分散された複数のサービスで構成されている可能性があります。

したがって、分散トレースを使用することで、すべてのサービスの統合ビューを取得できます。 そして、GrafanaTempoはそれがすべてです。

Grafana Tempoとは何ですか?

今年のObservabilityConカンファレンスでGrafanaLabsからいくつかの主要な更新があり、GrafanaTempoもその1つでした。 Grafana Labsは、オープンソースポートフォリオにもう1つのプロジェクト「GrafanaTempo」を追加しました。

Grafana Tempoは、拡張性が高く使いやすいオープンソースの分散トレースバックエンドです。 Tempoは、Zipkin、Jaeger、OpenTelemetry、OpenCensusなどの他のトレースプロトコルと完全に互換性があります。 現在、LokiのTempoデータ検出エンジン、PrometheusやGrafanaなどの監視プラットフォームをサポートしています。 Grafana 7.3+は、GrafanaとTempoの間のシームレスなエクスペリエンスを提供します。

なぜTempoを使うのですか?

テンポは、メトリック、トレース、およびログを相互に関連付けるために使用されます。 ユーザーが同じ種類のエラーを複数回受ける場合があります。 何が起こっているのかを理解したい場合は、正確なトレースを調べる必要があります。 しかし、ダウンサンプリングのために、私が探していたかもしれないいくつかの貴重な情報が失われていたでしょう。 Tempoを使用すると、分散トレースデータをダウンサンプリングする必要がなくなります。 完全なトレースをS3やGCSなどのオブジェクトストレージに保存できるため、Tempoのコスト効率が非常に高くなります。

また、Tempoを使用すると、メトリックから、いくつかの問題を記録した特定のログの関連するトレースにすばやく移動できるため、デバッグ/トラブルシューティングを高速化できます。

以下は、Tempoで使用される構成オプションです。

  • ディストリビューター:これらは、スパンを受信して​​インジェスターに送信する受信オプションを構成するために使用されます。
  • インジェスター:これらは、トレースのバッチを作成し、それらをTempoDBに送信して保存するために使用されます。
  • Compactor :S3やGCSなどのストレージからブロックをストリーミングし、それらを結合して、ストレージに書き戻します。
  • ストレージ:これは、TempoDBを構成するために使用されます。 この構成では、ストレージバックエンド名(S3またはGCS)を他のパラメーターとともに指定する必要があります。
  • メンバーリスト:Tempoコンポーネント間の調整に使用されます。
  • 認証/サーバー:TempoはWeaveworks / Commonサーバーを使用します。 サーバー構成を設定するために使用されます。

テンポアーキテクチャ

テンポアーキテクチャ

上の図は、GrafanaTempoの動作アーキテクチャを示しています。

まず、ディストリビューターはZipkin、Jaeger、OpenTelemetry、OpenCensusからさまざまな形式のスパンを受信し、トレースIDをハッシュすることでこれらのスパンをインジェスターに送信します。 次に、インジェスターはブロックと呼ばれるトレースのバッチを作成します。

次に、それらのブロックをバックエンドストレージ(S3 / GCS)に送信します。 トラブルシューティングするトレースIDがある場合は、Grafana UIを使用して、トレースIDを検索バーに配置します。 これで、クエリアは、入力したトレースIDに関する詳細をingesterまたはオブジェクトストレージから取得する責任があります。

まず、そのトレースIDが初期に存在するかどうかを確認します。 見つからない場合は、ストレージバックエンドをチェックします。 単純なHTTPエンドポイントを使用してトレースを公開します。 一方、コンパクターはストレージからブロックを取り出し、それらを結合してストレージに送り返し、ストレージ内のブロック数を減らします。

Dockerを使用してテンポを設定する

このセクションでは、Dockerを使用してGrafanaTempoを段階的に設定します。 まず、Tempoバックエンドが必要なので、Dockerネットワークをセットアップします。

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

テンポ設定ファイルをダウンロードします。

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

以下は、取得するプロトコルオプションのリストです。

プロトコルポート
オープンテレメトリ55680
イエーガー–スリフトコンパクト6831
イエーガー–スリフトバイナリ6832
Jaeger – Thrift HTTP 14268
イエーガー– GRPC 14250
ジプキン9411

テンポ構成ファイルを使用して、Dockerコンテナーを実行します。 ここでは、トレースを送信するためにJaeger – Thrift Compact形式(ポート6831)を選択しています。

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

次に、Tempoクエリコンテナを実行する必要があります。 そこでまず、テンポクエリ設定ファイルをダウンロードします。

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

テンポクエリ構成ファイルを使用して、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

これで、以下に示すように、Jaeger UIにhttp:// localhost:16686からアクセスできるようになります。

jaegerui-geekflare

検索バーで、トラブルシューティングするログからトレースIDを追加すると、トレースが生成されます。

traceid-新しい

Tempoでデモアプリケーションを実行する

GrafanaTempoによるデモの例を実行するときが来ました。 docker-composeの例を実行するので、同じことを試みる場合は、マシンにdocker-composeをインストールする必要があります。

Grafana Tempo zipファイルをダウンロードします:https://github.com/grafana/tempo

それをホームフォルダーに抽出し、docker-composeディレクトリーに移動します。 docker-composeの例が複数あります。 アプリケーションのデータがローカルに保存されている例を使用しています。

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

以下のコマンドを実行して、スタックを開始します。

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

ご覧のとおり、Grafana、Loki、Tempo、Tempo-query、および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

ブラウザにアクセスして、Grafana、Jaeger UI、Prometheusが実行されているかどうかを確認することもできます。

grafana

プロメテウス

現在、コンテナ内で実行されているsynthetic-load-generatorは、テンポ内に配置しているトレースIDを生成しています。 以下のコマンドを実行すると、ログを表示できます。

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

これらは、トレースを生成するために渡す必要のあるトレースIDです。

新しいトレース

トレースIDの1つをコピーして、JaegerUI検索バーに配置しています。

traceid

指定したトレースIDに関連するトレースが正常に生成されたことがわかります。

結論

これがGrafanaTempoのすべてです。 先に進み、Tempoを使用してトレースを生成し、ログのメトリックと問題を詳細に理解します。

すべてがTempoでキャプチャされており、以前に行われていたダウンサンプリングのために詳細を見逃すことはありません。 Tempoは、開発者または本番チームがログで発生する可能性のあるエラーまたは警告の根本原因を理解するのに簡単です。