Stackdriver Trace と Zipkin の使用

このチュートリアルでは、Zipkin サーバーを使用して Zipkin クライアントからトレースを受信し、それらのトレースを分析のために Stackdriver Trace に転送します。

この Zipkin サーバーは、開発しているアプリケーションがすでに Zipkin でインストゥルメントされているが、独自のトレース バックエンドを実行したくない、または Stackdriver Trace の高度な解析ツールを利用したいという場合に役立ちます。

この機能は Zipkin プロジェクトによって管理されており、Google では正式にサポートしていないことに注意してください。

この機能を設定するには次のような方法があります。

コンテナ イメージを使用してサーバーを設定する

Stackdriver Trace Zipkin Collector のコンテナ イメージは、GitHub で入手できます。このリポジトリには、Docker ビルド定義が格納されており、ベースの Zipkin Docker イメージに GCP サポートを追加します。詳細な設定手順も含まれています。

Google Kubernetes Engine を含む任意のコンテナホストで実行できます。

このイメージを実行するには、次のコマンドを実行します。

$ docker run -d -p 9411:9411 \
-e STORAGE_TYPE=stackdriver \
-e GOOGLE_APPLICATION_CREDENTIALS=/root/.gcp/credentials.json \
-e STACKDRIVER_PROJECT_ID=your_project \
-v $HOME/.gcp:/root/.gcp:ro \
openzipkin/zipkin-gcp

このコンテナを Google Cloud Platform 内(Compute Engine インスタンスや Google Kubernetes Engine クラスタなど)で実行すると、環境のデフォルトの認証情報が自動的に取得され、Stackdriver Trace にトレースが送信されます。

設定の詳細についてはこちらをご覧ください。

Zipkin トレーサーを構成する必要もあります。

Google Cloud Platform の外部でサーバーを実行する

GCP の外部(オンプレミスで実行されている物理サーバーなど)でコレクタをビルドして実行するには、次のようにします。

プロジェクトを作成または選択する

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Google Cloud Platform プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

コレクタを Google のリソースで実行しないため、請求先アカウントは必要ありません。

サービス アカウントを作成する

Stackdriver Trace API に対してサービスが認証されるようにします。

  1. サービス アカウントを作成します
    1. Trace API にデータを書き込めるように、プロジェクト編集者の役割を付与する必要があります。
    2. [新しい秘密鍵の提供] を選択し、[JSON] を選択します。
    3. コレクタ サービスを実行するマシンのディレクトリに JSON 認証情報ファイルを保存します。

ファイアウォールを構成する

Zipkin コレクタを実行しているマシンへの TCP トラフィックがポート 9411 を通過できるようにネットワークを構成します。

ファイアウォールの外側でホストされているアプリケーションからトレースを送信する場合は、Zipkin トレーサーから Zipkin コレクタへのトラフィックでは暗号化や認証が行われないことに注意してください。Stackdriver Trace Zipkin Collector と Stackdriver Trace API の間の接続では、Stackdriver Trace インストゥルメンテーション ライブラリからの接続と同様に、暗号化と認証が行われます

コンテナ イメージを使用してサーバーを設定する

上記のコンテナ イメージを使用するをご覧ください。

Zipkin トレーサーを構成する

共通の手順に沿って Zipkin トレーサーを構成します。

既存の Zipkin サーバーを変更する

Zipkin プロジェクトでは、Stackdriver Trace を既存の Zipkin サーバーの保存先として使用する方法について説明しています。詳細については GitHub をご覧ください。

Zipkin トレーサーを構成する方法

Stackdriver Trace Zipkin Collector をホストする方法にかかわらず、そこにデータを送信するように Zipkin トレーサーを構成する必要があります。

コレクタは、内部 IP アドレス、外部 IP アドレス(Google Cloud Platform の外部でホストされているアプリケーションのトレースを収集する場合)、またはホスト名で参照できます。Zipkin トレーサーの構成方法はそれぞれ異なります。たとえば、IP アドレス 1.2.3.4 のコレクタを参照するように Brave トレーサーを構成するには、Java コードベースに次の行を追加する必要があります。

Reporter reporter = AsyncReporter.builder(OkHttpSender.create("1.2.3.4:9411/api/v1/spans")).build();
Brave brave = Brave.Builder("example").reporter(reporter).build()

よくある質問

Q: 制限事項はありますか?

このリリースには、次の 2 つの既知の制限事項があります。

  1. Zipkin トレーサーが、Zipkin の時刻と期間の正しいセマンティクスをサポートしている必要があります。詳細については、ライブラリのインストゥルメントに進み、タイムスタンプと期間までスクロールしてください。

  2. Zipkin トレーサーと Stackdriver Trace インストゥルメンテーション ライブラリで同じトレースにスパンを追加することはできません。したがって、一方のライブラリでキャプチャされたトレースに、もう一方のライブラリでインストゥルメントされたサービスのスパンが含まれることはありません。次に例を示します。

    Node.js ウェブ アプリケーションに対するリクエストは、Zipkin ライブラリでトレースされて Stackdriver Trace に送信されますが、これらのトレースには、API アプリケーション内で生成されたスパンや、API アプリケーションからデータベースへの RPC コールに対して生成されたスパンは含まれません。これは、Zipkin と Stackdriver Trace では、サービス間でトレース コンテキストをプロパゲートするための形式が異なるからです。

    そのため、Stackdriver Trace を使用するプロジェクトでは、Zipkin と互換性のあるトレーサーのみを Zipkin Collector と組み合わせて使用するか、Stackdriver Trace にネイティブで対応しているインストゥルメンテーション ライブラリ(Node.jsJavaGo の公式ライブラリなど)を使用することをおすすめします。

Q: このサーバーは完全な Zipkin サーバーとして使用できますか?

いいえ。サポートされているのは Stackdriver Trace へのデータの書き込みのみです。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Stackdriver Trace ドキュメント