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 Storage のクライアントサイドの指標の出力、保存、アクセスを行っても Cloud Monitoring の料金は発生しません。料金の詳細については、Google Cloud Observability の料金をご覧ください。

始める前に

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

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

  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

他のカスタムロール事前定義ロールを使用して、これらの権限を取得することもできます。モニタリング指標の書き込みロールの詳細については、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)。この値自体に意味はありませんが、同じ 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: xDS リソースタイプ("envoy.config.listener.v3.Listener" など)を示します。
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)

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

C++

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

次のステップ