OpenTelemetry トレースを使用すると、バッチ処理、リース管理、フロー制御など、さまざまな Pub/Sub クライアント ライブラリ オペレーションのレイテンシを特定してトレースできます。この情報を収集すると、クライアント ライブラリの問題のデバッグに役立ちます。
OpenTelemetry トレースには、次のようなユースケースがあります。
- サービスで公開レイテンシが通常より長くなっている。
- メッセージの再配信が多い。
- 定期購入クライアントのコールバック関数を変更すると、処理に通常より時間がかかる。
始める前に
OpenTelemetry を構成する前に、次のタスクを完了します。
- いずれかのクライアント ライブラリを使用して Pub/Sub を設定する。
- OpenTelemetry SDK をインストールし、トレース エクスポータとトレーサー プロバイダを設定する。
- Cloud Trace API を有効にする。
- Cloud Observability のトレースを読む方法を理解する。
必要なロール
サービス アカウントに Cloud Trace にトレースをエクスポートするために必要な権限が付与されるように、プロジェクトのサービス アカウントに次の IAM ロールを付与するよう管理者に依頼します。
-
すべて:
Cloud Trace エージェント (
roles/cloudtrace.agent
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、Cloud Trace にトレースをエクスポートするために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
トレースを Cloud Trace にエクスポートするには、次の権限が必要です。
-
すべて:
cloudtrace.traces.patch
管理者は、サービス アカウントに、カスタムロールや他の事前定義ロールを付与することもできます。
OpenTelemetry トレース ワークフロー
OpenTelemetry トレースを設定するには、Pub/Sub クライアント ライブラリと OpenTelemetry SDK を使用します。SDK では、Pub/Sub ライブラリに接続する前に、トレース エクスポータとトレーサー プロバイダを設定する必要があります。一部のライブラリでは、トレーサー プロバイダの設定は省略可能です。
トレース エクスポータ。OpenTelemetry SDK は、トレース エクスポータを使用して、トレースを送信する場所を決定します。
トレース プロバイダ。Pub/Sub クライアント ライブラリは、トレーサー プロバイダを使用してトレースを作成します。
トレースを設定する手順の概要は次のとおりです。
- Cloud Trace OpenTelemetry エクスポータをインスタンス化します。
- 必要に応じて、OpenTelemetery SDK を使用して Tracer Provider をインスタンス化し、登録します。
- OpenTelemetry トレース オプションを有効にしてクライアントを構成します。
- Pub/Sub クライアント ライブラリを使用してメッセージをパブリッシュします。
トレースの仕組み
パブリッシュされたメッセージごとに、クライアント ライブラリは新しいトレースを作成します。このトレースには、メッセージをパブリッシュしてからメッセージが確認応答されるまでのメッセージのライフサイクル全体が示されます。トレースは、オペレーションの所要時間、親スパン、子スパン、リンクされたスパンなどの情報をカプセル化します。
トレースには、ルートスパンとそれに関連する子スパンが含まれます。これらのスパンは、クライアント ライブラリがメッセージを処理する際に行う処理を表します。各メッセージ トレースには次のものが含まれます。
- 公開用。フロー制御、順序付けキーのスケジューリング、バッチ処理、パブリッシュ RPC の長さ。
- サブスクリプション用. 同時実行制御、注文キーのスケジュール設定、リース管理。
パブリッシュ側からサブスクライブ側に情報を伝播するために、クライアント ライブラリはパブリッシュ側にトレース固有の属性を挿入します。コンテキスト伝播メカニズムは、トレースがオンになっていて、googclient_
接頭辞が付加されている場合にのみ有効になります。
トレースを有効にしてメッセージをパブリッシュする
次のコードサンプルは、Pub/Sub クライアント ライブラリと OpenTelemetry SDK を使用してトレースを有効にする方法を示しています。このサンプルでは、トレース結果が Cloud Trace にエクスポートされます。
考慮事項
トレーサー プロバイダをインスタンス化するときに、OpenTelemetry SDK でサンプリング比率を構成します。この比率によって、SDK がサンプリングするトレースの数が決まります。サンプリング レートを下げると、課金費用を削減し、サービスが Cloud Trace スパン割り当てを超えるのを防ぐことができます。
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
トレースを使用してメッセージを受信する
トレースを分析する
以降のセクションでは、 Google Cloud コンソールでトレースを追跡して分析する方法について詳しく説明します。
考慮事項
- メッセージのバッチをパブリッシュすると、パブリッシュ RPC スパンは別のトレースにキャプチャされます。
- 複数の作成呼び出しがバッチ処理されると、公開 RPC が生成される可能性があるため、公開 RPC には複数の送信元スパンが存在します。
OpenTelemetry のスパンには、親スパンが 0 個または 1 個あります。
バッチ処理されたオペレーションを表すスパンは、0 個または 1 個の親スパンで表すことはできません。たとえば、パブリッシュ バッチ(論理的には複数の親を持つ必要があります)は、0 個または 1 個の親スパンで表すことはできません。
メッセージのライフサイクル中に作成されたスパンをトラッキングする
次の図は、単一のメッセージに対して単一のトレースで作成されるスパンの例を示しています。
各スパンに、メッセージのバイトサイズや順序付けキー情報などの追加情報を提供する追加属性を設定できます。
スパンの属性は、メッセージの順序付けキー、メッセージ ID、メッセージのサイズなどの追加のメタデータを伝達します。
メインのパブリッシュ スパンとサブスクライブ スパンは、ネットワーク呼び出しが発行されたときと完了したときに対応するスパンイベントで拡張されます。
一般的な問題のトラブルシューティング
次の問題により、トレースに関する問題が発生する可能性があります。
- トレースのエクスポートに使用するサービス アカウントに、必要な
roles/cloudtrace.agent
ロールがありません。 - Cloud Trace に取り込まれるスパンの最大数の割り当てに達しました。
- 適切なフラッシュ関数を呼び出すことなく、アプリケーションが終了します。