このドキュメントでは、OpenTelemetry を使用してクライアントサイドとエンドツーエンドのトレースを設定する方法について説明します。エンドツーエンド トレースを有効にするには、クライアントサイド トレースを設定する必要があります。詳細については、トレースのコレクションの概要をご覧ください。
始める前に
-
アプリケーションで使用するサービス アカウントにトレースのコレクションの設定に必要な権限が付与されるように、プロジェクトに対してアプリケーションで使用するサービス アカウントに Cloud Trace エージェント(
roles/cloudtrace.agent
)IAM ロールを付与するよう管理者に依頼してください。
クライアントサイド トレースを構成する
クライアントサイド トレースを構成するには、トレースをエクスポートする必要があります。トレースはコレクタにエクスポートすることも、オブザーバビリティ バックエンドに直接エクスポートすることもできます。トレースは OpenTelemetry API を使用して構成できます。
OpenTelemetry API を使用してコレクタにトレースをエクスポートする
OpenTelemetry API を使用してコレクタにトレースをエクスポートするには、OpenTelemetry SDK と OTLP エクスポータを構成します。
次のコードを使用して、必要な依存関係をアプリケーションに追加します。
Java
Go
go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0
OpenTelemetry オブジェクトを構成して、トレースを有効にします。
Java
Go
OpenTelemetry API を使用してオブザーバビリティ バックエンドに直接エクスポートする
トレーススパンを Cloud Trace または別のオブザーバビリティ サービス プロバイダのバックエンドに直接エクスポートするように Spanner クライアント ライブラリを構成する手順は次のとおりです。
次のコードを使用して、必要な依存関係をアプリケーションに追加します。
Java
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-spanner</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-api</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk-common</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk-trace</artifactId> </dependency> <dependency> <groupId>com.google.cloud.opentelemetry</groupId> <artifactId>exporter-trace</artifactId> <version>0.30.0</version> </dependency>
Go
go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.24.1
OpenTelemetry オブジェクトを構成して、トレースを有効にします。
Java
Go
エンドツーエンドのトレースを構成する
このセクションでは、Spanner クライアント ライブラリでエンドツーエンドのトレース(プレビュー)を構成する手順について説明します。
次のコードを使用して、必要な依存関係をアプリケーションに追加します。
Java
エンドツーエンドのトレースを構成するには、既存のクライアントサイド トレースの依存関係で十分です。追加の依存関係は必要ありません。
Go
クライアントサイド トレースに必要な依存関係に加えて、次の依存関係も必要です。
go.opentelemetry.io/otel/propagation v1.28.0
エンドツーエンドのトレースを有効にします。
Java
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
Go
有効にするには、クライアント構成で
EnableEndToEndTracing
オプションを使用します。client, _ := spanner.NewClientWithConfig(ctx, "projects/test-project/instances/test-instance/databases/test-db", spanner.ClientConfig{ SessionPoolConfig: spanner.DefaultSessionPoolConfig, EnableEndToEndTracing: true, }, clientOptions...)
OpenTelemetry でトレース コンテキストの伝播を設定します。
Java
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider(sdkTracerProvider) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) .buildAndRegisterGlobal();
Go
// Register the TraceContext propagator globally. otel.SetTextMapPropagator(propagation.TraceContext{})
エンドツーエンドのトレース属性
エンドツーエンドのトレースには、次の情報が含まれます。
属性名 | 説明 |
---|---|
service.name | 属性値は常に spanner_api_frontend です。 |
cloud.region | アプリケーション リクエストを処理する Spanner API フロントエンドの Google Cloud クラウド リージョン。 |
gcp.spanner.query.fingerprint | 属性値はクエリ フィンガープリントです。このクエリをさらにデバッグするには、クエリ統計テーブルの TEXT_FINGERPRINT 列をご覧ください。 |
gcp.spanner.participants.count | トランザクションに関与する参加者数。詳細については、Spanner の読み取りと書き込みのライフサイクルをご覧ください。 |
サンプル トレース
エンドツーエンドのトレースでは、次の詳細を確認できます。
- アプリケーションと Spanner の間のレイテンシ。ネットワーク レイテンシを計算して、ネットワークに問題があるかどうかを確認できます。
- アプリケーション リクエストが処理される Spanner API フロントエンド クラウド リージョン。これを使用して、アプリケーションと Spanner の間のクロスリージョン呼び出しを確認できます。
次の例では、アプリケーション リクエストは us-west1
リージョンの Spanner API フロントエンドによって処理され、ネットワーク レイテンシは 8.542 ミリ秒(55.47 ミリ秒 ~ 46.928 ミリ秒)です。
次のステップ
- OpenTelemetry の詳細については、OpenTelemetry のドキュメントをご覧ください。