gRPC クライアントサイドの指標を使用する

このページでは、gRPC を使用して、次のいずれかのサポートされているインターフェースを使用して Cloud Storage とやり取りするときに、gRPC クライアントサイドの指標を Cloud Monitoring に出力する方法について説明します。

クライアントサイドの指標を使用すると、gRPC を使用して Cloud Storage とやり取りするクライアント アプリケーションのパフォーマンスをモニタリングできます。クライアントサイドの指標は、サーバーサイドの視点から Cloud Storage のパフォーマンスに関する分析情報を提供するサーバーサイドの指標とは異なります。

仕組み

gRPC を使用してサポートされているインターフェースのいずれかを使用して Cloud Storage を操作する場合は、クライアントサイド指標を Cloud Monitoring に出力するようにオプトインできます。Metrics Explorer を使用してクライアントサイドの指標を表示すると、Cloud Storage と gRPC クライアント間のインタラクションをモニタリングして最適化し、使用状況を管理し、パフォーマンスのボトルネックや技術的な問題のトラブルシューティングを行うことができます。

料金

Cloud Storage クライアントサイド指標は課金対象外です。つまり、Cloud Monitoring の料金が発生することなく、Cloud Storage クライアントサイド指標を出力、保存、アクセスできます。料金の詳細については、Google Cloud Observability の料金をご覧ください。

始める前に

クライアントサイド指標を使用するには、まず次の手順を完了する必要があります。

  1. 使用する Cloud Storage クライアント ライブラリまたはコネクタが gRPC をサポートしていることを確認します。次の Cloud Storage クライアント ライブラリとコネクタは gRPC をサポートしています。

  2. 認証を設定します

  3. Cloud Monitoring API を有効にします。

  4. Cloud Storage API を有効にします。

    Cloud Storage API に移動

  5. クライアントサイド指標の出力に必要なロールと権限を設定します。

必要なロール

gRPC クライアントサイド指標を Cloud Monitoring に出力するために必要な権限を設定するには、gRPC クライアントが使用するサービス アカウントに モニタリング指標書き込みroles/monitoring.metricWriter)IAM ロールを付与します。

この事前定義ロールには、gRPC クライアントサイド指標を Cloud Monitoring に出力するために必要な権限が含まれています。必要とされる正確な権限については、必要な権限セクションをご覧ください。

必要な権限

  • monitoring.timeSeries.create

他のカスタムロール事前定義ロールを使用して、これらの権限を取得することもできます。Monitoring Metric Writer ロールの詳細については、roles/monitoring.metricWriter に関する IAM のドキュメントをご覧ください。

考慮事項

Metrics Explorer で指標を表示する

Metrics Explorer で Cloud Storage gRPC クライアントサイドの指標を表示する手順は次のとおりです。

  1. Google Cloud コンソールで、[Metrics Explorer] ページに移動します。

    [Metrics Explorer] に移動

  2. 指標を表示するプロジェクトを選択します。

  3. [指標] プルダウン メニューで [指標を選択] をクリックします。

  4. [リソース名または指標名でフィルタ] 検索バーに「storage.googleapis.com/Client」と入力するか、適用する指標を指標名で検索して、[適用] をクリックします。複数の指標を追加するには、[クエリを追加] をクリックします。

    Cloud Storage は、プロジェクトに指標を適用します。次のプルダウン メニューを使用して、指標をフィルタまたは集計できます。

    • 指定した条件に基づいてデータのサブセットを選択して表示するには、[フィルタ] プルダウン メニューを使用します。

    • 複数のデータポイントを 1 つの値に結合して指標の概要ビューを表示するには、[集計] プルダウン メニューを使用します。

    公開された指標を確認する前に、アプリケーションを 1 分以上実行します。

ダッシュボードを使用してプロジェクトに追加した指標を表示するには、ダッシュボードの概要をご覧ください。

指標の説明

以降のセクションでは、gRPC クライアントのパフォーマンスをモニタリングするために使用できる Cloud Storage クライアントサイドの指標について説明します。

クライアントの試行ごとの指標

次の指標は、クライアントがサーバーとの通信を試みた個々の試行に関するパフォーマンス データを収集します。クライアントの試行ごとの指標は、再試行動作やボトルネックを測定し、クライアントとサーバー間の通信を最適化するのに役立ちます。

完全な指標 説明 支払いタイプ ユニット 属性
storage.googleapis.com/client/grpc/client/attempt/started Preview。開始された RPC の試行の合計数(完了していない試行を含む)。 カウンタ {attempt}
  • grpc.method: パッケージ、サービス、メソッドを含む完全な gRPC メソッド名。
  • grpc.target: gRPC チャネルの作成時に使用される正規化されたターゲット URI。
storage.googleapis.com/client/grpc/client/attempt/duration Preview。RPC の試行を完了するまでにかかる時間(サブチャネルの選択に要する時間を含む)。 ヒストグラム s
  • grpc.method: パッケージ、サービス、メソッドを含む完全な gRPC メソッド名。
  • grpc.target: gRPC チャネルの作成時に使用される正規化されたターゲット URI。
  • grpc.status: 受信した gRPC サーバーのステータス コード(OKCANCELLEDDEADLINE_EXCEEDED など)。
  • grpc.lb.locality: トラフィックが送信されるロケーション。これは、weighted_target ポリシーから渡されたリゾルバ属性に設定されます。リゾルバ属性が未設定の場合は空の文字列になります。
storage.googleapis.com/client/grpc/client/attempt/sent_total_compressed_message_size Preview。RPC の試行ごとに、メタデータを除くすべてのリクエスト メッセージで送信されたバイト数の合計(圧縮、暗号化なし)。これには、gRPC またはトランスポート フレーミング バイトは含まれません。 ヒストグラム By
  • grpc.method: パッケージ、サービス、メソッドを含む完全な gRPC メソッド名。
  • grpc.target: gRPC チャネルの作成時に使用される正規化されたターゲット URI。
  • grpc.status: 受信した gRPC サーバーのステータス コード(OKCANCELLEDDEADLINE_EXCEEDED など)。
  • grpc.lb.locality: トラフィックが送信されるロケーション。これは、weighted_target ポリシーから渡されたリゾルバ属性に設定されます。リゾルバ属性が未設定の場合は空の文字列に設定されます。
storage.googleapis.com/client/grpc/client/attempt/rcvd_total_compressed_message_size Preview。RPC の試行ごとに、メタデータを除くすべてのレスポンス メッセージで受信したバイト数の合計(圧縮、暗号化なし)。これには、gRPC またはトランスポート フレーミング バイトは含まれません。 ヒストグラム By
  • grpc.method: パッケージ、サービス、メソッドを含む完全な gRPC メソッド名。
  • grpc.target: gRPC チャネルの作成時に使用される正規化されたターゲット URI。
  • grpc.status: 受信した gRPC サーバーのステータス コード(OKCANCELLEDDEADLINE_EXCEEDED など)。
  • grpc.lb.locality: トラフィックが送信されるロケーション。これは、weighted_target ポリシーから渡されたリゾルバ属性に設定されます。リゾルバ属性が未設定の場合は空の文字列になります。

クライアントの試行ごとの計測の詳細については、GitHub の OpenTelemetry 指標のドキュメントをご覧ください。

クライアントの通話ごとの指標

次の指標は、サーバーへのクライアント呼び出しのライフサイクル全体の集計ビューを提供します。クライアントごとの通話指標は、クライアント呼び出しに関する概要データを提供し、呼び出しパターンを把握するためのトラッキング指標を提供し、エラーの頻度を特定するのに役立ちます。

完全な指標 説明 支払いタイプ ユニット 属性
storage.googleapis.com/client/grpc/client/call/duration Preview。アプリケーションの観点から gRPC ライブラリが RPC を完了するのに要するエンドツーエンドの時間を測定します。 ヒストグラム s
  • grpc.method: パッケージ、サービス、メソッドを含む完全な gRPC メソッド名。
  • grpc.target: gRPC チャネルの作成時に使用される正規化されたターゲット URI。
  • grpc.status: 受信した gRPC サーバーのステータス コード(OKCANCELLEDDEADLINE_EXCEEDED など)。

クライアント呼び出しごとの計測の詳細については、GitHub の OpenTelemetry 指標のドキュメントをご覧ください。

負荷センサーの指標をリクエストする

次の指標は、クライアント アプリケーションでのリクエスト負荷センシングの有効性に関する分析情報を提供します。リクエスト負荷センサー指標は、サーバー負荷のバランスをとったり、リソース使用率を最適化したり、クライアントの応答時間を改善したりするのに役立ちます。次の指標は、直接接続でのみ使用できます。

完全な指標 説明 支払いタイプ ユニット 属性
storage.googleapis.com/client/grpc/lb/rls/cache_entries Preview。リクエスト負荷センシング キャッシュ内のエントリ数。 ゲージ {entry}
  • grpc.target: WRR が使用される gRPC チャネルのターゲットを示します。
  • grpc.lb.rls.server_target: リクエスト ロード センシング サーバーが通信するターゲット URI。
  • grpc.lb.rls.instance_uuid: 個々のリクエスト負荷センシング クライアント インスタンスの UUID(Universally Unique Identifier)。この値自体は意味がありませんが、同じ gRPC チャンネルに複数のインスタンスがある場合や、同じターゲットへの複数のチャンネルがある場合に、リクエスト負荷を検出するクライアント インスタンスを区別するのに役立ちます。
storage.googleapis.com/client/grpc/lb/rls/cache_size Preview。リクエスト負荷センシング キャッシュの現在のサイズ。 ゲージ By
  • grpc.target: WRR が使用される gRPC チャネルのターゲット。
  • grpc.lb.rls.server_target: リクエスト ロード センシング サーバーが通信するターゲット URI。
  • grpc.lb.rls.instance_uuid: 個々のリクエストの負荷センサー クライアント インスタンスの UUID。この値自体は意味がありませんが、同じ gRPC チャンネルに複数のインスタンスがある場合や、同じターゲットへの複数のチャンネルがある場合に、リクエスト負荷を検出するクライアント インスタンスを区別するのに役立ちます。
storage.googleapis.com/client/grpc/lb/rls/default_target_picks Preview。デフォルトのターゲットに送信されたロードバランサ(LB)選択の数。 カウンタ {pick}
  • grpc.target: リクエスト ロード センシングが使用される gRPC チャネルのターゲットを示します。
  • grpc.lb.rls.server_target: リクエスト ロード センシング サーバーが通信するターゲット URI。
  • grpc.lb.rls.data_plane_target: データプレーン トラフィックのルーティング リクエストのロード センシングに使用されるターゲット文字列。この値は、特定のキーのリクエスト ロード センシング サーバーから返されるか、リクエスト ロード センシング構成でデフォルトのターゲットとして構成されます。
  • grpc.lb.pick_result:LB 選択の結果("complete""fail""drop" など)。
storage.googleapis.com/client/grpc/lb/rls/target_picks Preview。各リクエストの負荷センサー ターゲットに送信された LB ピックの数。リクエスト負荷センサー サーバーからデフォルト ターゲットも返された場合、キャッシュからそのターゲットに送信された RPC は、grpc.rls.default_target_picks ではなくこの指標でカウントされます。 カウンタ {pick}
  • grpc.target: リクエスト ロード センシングが使用される gRPC チャネルのターゲット。
  • grpc.lb.rls.server_target: リクエスト ロード センシング サーバーが通信するターゲット URI。
  • grpc.lb.rls.data_plane_target: データプレーン トラフィックのルーティングのリクエスト ロード センシングで使用されるターゲット文字列。この値は、特定のキーのリクエスト ロード センシング サーバーから返されるか、リクエスト ロード センシング構成でデフォルトのターゲットとして構成されます。
  • grpc.lb.pick_result: LB 選択の結果("complete""fail""drop" など)。
storage.googleapis.com/client/grpc/lb/rls/failed_picks Preview。リクエストの負荷感知リクエストの失敗、またはリクエストの負荷感知チャネルのスロットリングが原因で失敗した LB ピックの数。 カウンタ {pick}
  • grpc.target: リクエスト ロード センシングが使用される gRPC チャネルのターゲット。
  • grpc.lb.rls.server_target: リクエスト ロード センシング サーバーが通信するターゲット URI。

xDiscovery Service クライアントの指標

次の指標は、クライアント アプリケーションが xDiscovery Service(xDS)コントロール プレーンとやり取りしてバックエンド サービスへの接続を検出して構成する方法に関する分析情報を提供します。xDS 指標は、サービス リクエストのレイテンシの追跡、構成の更新のモニタリング、xDS の全体的なパフォーマンスの最適化に役立ちます。

次の指標は、直接接続でのみ使用できます。

完全な指標 説明 支払いタイプ ユニット 属性
storage.googleapis.com/client/grpc/xds_client/connected Preview。xDS クライアントが xDS サーバーに機能する ADS ストリームを持っているかどうかを測定します。特定のサーバーの場合、この指標はストリームが最初に作成されたときに 1 に設定されます。接続エラーが発生した場合、または A57 に従ってレスポンス メッセージが表示されずに ADS ストリームが失敗した場合、指標は 0 に設定されます。0 に設定すると、ADS ストリームで最初のレスポンスが受信されたときに、この指標は 1 にリセットされます。この指標は、C++ 用 Cloud クライアント ライブラリでのみ使用できます。 ゲージ {bool}
  • grpc.target: クライアントの場合、XdsClient が使用される gRPC チャネルのターゲットを示します。サーバーの場合には、文字列 "#server" になります。
  • grpc.xds.server: XdsClient が通信している xDS サーバーのターゲット URI。
storage.googleapis.com/client/grpc/xds_client/resource_updates_invalid Preview。無効と見なされた受信リソースの数。この指標は、C++ 用 Cloud クライアント ライブラリでのみ使用できます。 カウンタ {resource}
  • grpc.target: クライアントの場合、XdsClient が使用される gRPC チャネルのターゲットを示します。サーバーの場合には、文字列 "#server" になります。
  • grpc.xds.server: XdsClient が通信している xDS サーバーのターゲット URI。
  • grpc.xds.resource_type: xDS リソースタイプ("envoy.config.listener.v3.Listener" など)を示します。
storage.googleapis.com/client/grpc/xds_client/resource_updates_valid Preview。変更されていない場合でも有効と見なされた受信リソースの数。この指標は、C++ 用 Cloud クライアント ライブラリでのみ使用できます。 カウンタ {resource}
  • grpc.target: クライアントの場合、XdsClient が使用される gRPC チャネルのターゲットを示します。サーバーの場合には、文字列 "#server" になります。
  • grpc.xds.server: XdsClient が通信している xDS サーバーのタグ URI。
  • grpc.xds.resource_type: xDS リソースタイプ("envoy.config.listener.v3.Listener" など)を示します。
storage.googleapis.com/client/grpc/xds_client/resources Preview。XDS リソースの数。この指標は、C++ 用 Cloud クライアント ライブラリでのみ使用できます。 ゲージ {resource}
  • grpc.target: クライアントの場合、XdsClient が使用される gRPC チャネルのターゲットを示します。サーバーの場合には、文字列 "#server" になります。
  • grpc.xds.authority: xDS 認証局。xdstp:// URI 表現が導入される前、xDS API で識別された xdstp 以外のリソース名の場合、値は "#old" になります。
  • grpc.xds.cache_state: xDS リソースのキャッシュ状態を示します。
  • grpc.xds.resource_type は、"envoy.config.listener.v3.Listener" などの xDS リソースタイプを示します。
storage.googleapis.com/client/grpc/xds_client/server_failure Preview。正しく機能しなくなり、使用できなくなった、過負荷になった、または正しくない構成データまたは無効な構成データを提供している xDS サーバーの数。この指標は、C++ 用 Cloud クライアント ライブラリでのみ使用できます。 カウンタ {failure}
  • grpc.target: XdsClient が通信している xDS サーバーのターゲット URI。
  • grpc.xds.server: クライアントの場合、これは XdsClient が使用される gRPC チャネルのターゲットを示します。サーバーの場合は、文字列 "#server" です。

xDS クライアント指標の詳細については、GitHub の xDS ベースのグローバル ロード バランシングのドキュメントをご覧ください。

クライアントサイドの指標をオプトアウトする

必要に応じて、クライアントサイド指標をオプトアウトできます。

Java

public GrpcStorageOptions.Builder setEnableGrpcClientMetrics(false enableGrpcClientMetrics)

詳細については、gRPC クライアント指標の Cloud Client Libraries for Java クラス GrpcStorageOptions.Builder メソッドをご覧ください。

C++

C++ 用 Cloud クライアント ライブラリを使用して gRPC API のクライアントサイド指標をオプトアウトするには、構造体 EnableGrpcMetricsOption をご覧ください。

次のステップ