Cloud Trace と Zipkin の使用

このページでは、Zipkin サーバーを使用して Zipkin クライアントからトレースを受信し、それらのトレースを分析のために Cloud Trace に転送する方法について説明します。

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

このページでは、Zipkin サーバーを設定する方法について説明します。

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

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

このイメージは、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 内(Compute Engine インスタンスや Google Kubernetes Engine クラスタなど)で実行すると、環境のデフォルトの認証情報が自動的に取得され、Cloud Trace にトレースが送信されます。

設定の詳細については、Zipkin Docker イメージの GitHub リポジトリをご覧ください。

このページで説明しているように、Zipkin トレーサーも構成する必要があります。

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

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

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

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

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

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

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

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

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

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

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

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

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

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

詳細については、コンテナ イメージを使用するをご覧ください。

Zipkin トレーサーを構成する

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

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

Zipkin プロジェクトでは、Cloud Trace を既存の Zipkin サーバーの保存先として使用する方法について説明しています。これらの手順については、Zipkin Docker イメージの GitHub リポジトリをご覧ください。

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

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

コレクタは、内部 IP アドレス、外部 IP アドレス(Google Cloud の外部でホストされているアプリケーションからトレースを受信する場合)、またはホスト名で参照できます。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 トレーサーと Cloud Trace インストゥルメンテーション ライブラリで同じトレースにスパンを追加することはできません。これは、サービス間でトレース コンテキストをプロパゲートするための形式が異なるからです。その結果、一方のライブラリでキャプチャされたトレースに、もう一方のライブラリでインストゥルメントされたサービスのスパンが含まれることはありません。

    このため、Cloud Trace を使用するプロジェクトでは、Zipkin と互換性のあるトレーサーのみを Zipkin Collector と組み合わせて使用するか、Cloud Trace に対応しているインストゥルメンテーション ライブラリを使用することをおすすめします。Cloud Trace ライブラリの詳細については、Node.jsJavaGo をご覧ください。

    例:

    スパン制限の表示。

    Node.js ウェブ アプリケーションに対するリクエストは、Zipkin ライブラリでトレースされて Cloud Trace に送信されます。しかし、これらのトレースには ASP.NET API アプリケーションによって生成されたスパンは含まれません。Zipkin ライブラリによってキャプチャされたトレースにも、APS.NET API アプリケーションが MySQL データベースに対して行う RPC 呼び出しのスパンは含まれません。

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

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