Stackdriver Trace と Zipkin の使用

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

この Zipkin サーバーが役立つケースは 2 つ考えられます。1 つは、Stackdriver Trace を使用したいが、開発しているアプリケーションの言語またはフレームワークがまだ公式ライブラリでサポートされていない場合、もう 1 つは、所有しているアプリケーションがすでに Zipkin でインストルメントされているが、独自のトレース バックエンドを実行したくない、または Stackdriver Trace の高度な解析ツールを利用したいという場合です。

このサーバーのコードは、GitHub で、パーミッシブ ライセンスの下に提供されています。すばやくセットアップできるコンテナ イメージも用意されています。

このチュートリアルには、次の 3 種類のシナリオの手順が含まれています。

オプション 1: コンテナ イメージを使用してサーバーを設定する

Stackdriver Trace Zipkin Collector のコンテナ イメージは、Google Container Registry でホストされています。任意のコンテナホストで実行できます。

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

docker pull gcr.io/stackdriver-trace-docker/zipkin-collector

Zipkin トレーサーを設定する必要もあります。

オプション 2: Google Compute Engine で Maven JAR を使用してサーバーを設定する

Google Compute Engine でコレクタを設定するには、Maven から .jar ファイルを取得して新しい VM で実行します。

プロジェクトを作成または選択して課金を有効にする

  1. Google アカウントへのログイン

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

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

    [プロジェクト] ページに移動

  3. プロジェクトの課金を有効にします。

    課金の有効化

Compute Engine のインスタンスを作成する

インスタンスの作成には、デフォルトの Debian GNU/Linux イメージを使用することをおすすめします。

アカウントの選択を求められたら、Compute Engine のデフォルトのサービス アカウントを選択します。プロジェクト編集者の役割が付与されていれば、カスタム サービス アカウントも使用できます。

  1. Cloud Platform Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動する

  2. [インスタンスを作成] ボタンをクリックします。
  3. [作成] ボタンをクリックし、インスタンスを作成します。

スクリプトを実行する

次のスクリプトを実行します。Google 提供の Linux イメージを使用している場合は、このスクリプトを Cloud Console で直接起動スクリプトとして設定できます。これにより、自動的に Maven から JAR が取得されます。

set -e
set -v

# Talk to the metadata server to get the project id
PROJECT_ID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")

apt-get update
apt-get install -yq openjdk-8-jre-headless

wget -O collector.jar 'https://search.maven.org/remote_content?g=com.google.cloud.trace.adapters.zipkin&a=collector&v=LATEST'

PROJECT_ID=$PROJECT_ID java -jar collector.jar

ファイアウォールを設定する

Google Cloud Platform の外部でホストされているトレーサーからテレメトリーを収集する場合は、ポート 9411 で TCP トラフィックを受け入れるようにプロジェクトのファイアウォールを設定します。

Zipkin トレーサーを設定する

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

オプション 3: Google Cloud Platform 外でサーバーを実行する

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

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

  1. Google アカウントへのログイン

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

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

    [プロジェクト] ページに移動

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

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

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

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

コードをビルドする

  1. GitHub の Stackdriver Trace Zipkin Collector プロジェクトのマスター ブランチから最新のコードをダウンロードします。次の 2 つの方法があります。
  2. コードをビルドします。mvn package
  3. 認証情報を設定します。レポジトリの作業ディレクトリで次のスクリプトを実行して、GOOGLE_APPLICATION_CREDENTIALS 環境変数と PROJECT_ID 環境変数を設定します。プレースホルダ値を独自の値に置き換えます。
    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/credentials.json" PROJECT_ID="my_project_id"
  4. 生成された JAR ファイルを実行します。java -jar collector/target/collector-*.jar
    1. 必要に応じて、この jar がシステムの起動時に実行されるように設定することもできます。

ファイアウォールを設定する

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

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

Zipkin トレーサーを設定する

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

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 サーバーとして使用できますか?

いいえ。この最初のリリースでサポートされているのは書き込みオペレーションだけです。

Q: Stackdriver Trace の料金はいくらですか?

Zipkin と Stackdriver Trace は無料でご利用いただけます。

Q: Stackdriver Trace は、AWS、オンプレミス、ハイブリッドの各アプリケーションの解析に使用できますか?それとも、Google Cloud Platform で実行されているサービス専用ですか?

すでにいくつかのプロジェクトでそのような使い方がされています。Stackdriver Trace は、インストルメントされたサービスがホストされている場所に関係なく、Stackdriver Trace API を使用して送信されたすべてのデータを解析します。したがって、Stackdriver Trace インストルメンテーション ライブラリや Zipkin Collector から収集されるトレースとスパンをあらゆる場所で使用できます。

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

Stackdriver Trace ドキュメント