アプリケーション ロードバランサと Cloud CDN プラグインのロギングとモニタリング

このページでは、Cloud Load Balancing と Cloud CDN の Service Extensions プラグインで Cloud LoggingCloud Monitoring を構成して使用する方法について説明します。

ロギング

このセクションでは、アプリケーション ロードバランサ プラグインのロギングについて説明します。ロギングは、プラグインの観点とロードバランサの観点の両方から行うことができます。

ログ メッセージ

Service Extensions は、プラグインの実行中にログ メッセージを生成することをサポートしています。デフォルトでは、ログの記録は無効になっています。プラグインのログを記録するには、プラグインの作成時または更新時に有効にします。

プラグインのログレコードには、次のコンテキスト情報がアノテーションとして追加されます。

  • タイムスタンプやログレベルなどの標準ログのアノテーション。
  • メッセージを生成したプラグインの ID。
  • ログ メッセージが生成されたプラグイン コールバック
  • ログ メッセージが関連付けられているリクエストログを特定するのに役立つ requestId トレース識別子。

Service Extensions に関連するログは、次のいずれかのカテゴリに分類されます。

  • プラグインのログ メッセージ

    Rust の info!(...)、Go の proxywasm.LogInfo(...)、C++ の LOG_INFO などのロギング呼び出しによって生成されます。Service Extensions は、これらのログ メッセージを Cloud Logging にエクスポートします。リクエスト ヘッダーとレスポンス ヘッダー、およびプラグインが実行したアクションをログに記録できます。

    これらのメッセージは、networkservices.googleapis.com サービスを使用して表示できます。

  • Cloud Load Balancing のログ メッセージ

    これらのメッセージは、loadbalancing.googleapis.com サービスを使用して表示できます。

プラグインの観点からのロギング

このセクションでは、プラグインの観点から見た Service Extensions のロギングについて説明します。

プラグインのロギングを有効にする

Service Extensions は、プラグインの実行中にログ メッセージを生成することをサポートしています。デフォルトでは、ログの記録は無効になっています。

プラグインのログを記録するには、プラグインの作成時または更新時に有効にします。

既存のプラグインのロギングを有効にするには、 gcloud service-extensions wasm-plugins update コマンドを使用します。

gcloud service-extensions wasm-plugins update WASM_PLUGIN \
    --log-config=[LOG_CONFIG,...]

次のように置き換えます。

  • WASM_PLUGIN: プラグインの ID または完全修飾された名前
  • LOG_CONFIG: プラグインのロギング オプション。ロギングを有効にするには、enable オプションを true に設定します。次に、次の詳細を指定します。

    • sample-rate:アクティビティ ログのサンプリング レート(01 の値)。値 0 は、ログ メッセージが保存されないことを示します。デフォルト値 1 は、すべてのログ メッセージ が保存されることを示します。0.01.0 の浮動小数点値は、ログ メッセージの割合が保存されることを示します。
    • min-log-level: Cloud Logging にエクスポートするプラグイン ログ メッセージの最小重大度レベル デフォルト値は INFO です。

プラグインのロギングを有効にすると、プラグイン コードの ロギング ステートメントによって出力されたメッセージを Cloud Logging で確認できます。

ログを表示するには、 Google Cloud コンソールで [ログ エクスプローラ] ページに移動します。

プラグインのログ メッセージを表示する

ログは、クエリを作成 してログ エクスプローラで表示できます。

プラグインのログは、スタンドアロンの Service Extensions ログとして表示できます。このビューでは、 各プラグインのログ メッセージは独自のログレコードに記録され、 リクエストログ情報に自動的に関連付けられません。

これらのログ メッセージは、リソース タイプ networkservices.googleapis.com/WasmPluginVersionnetworkservices.googleapis.com/wasm_plugin_activity ログに記録されます。

システムは、このログに情報ログ メッセージを追加することもあります。 たとえば、プラグインの呼び出しが CPU またはメモリの上限を超えたときにプラグインで障害が発生した場合、重大度 ERROR のメッセージがログに記録されます。このような メッセージは、エラーの表示とフィルタでも確認できます。

プラグインのログサンプル

Service Extensions のログエントリの例を考えてみましょう。message の値は、プラグインの LOG_INFO 呼び出しに渡されます。severity の値は、プラグインのログ呼び出しで使用されるログレベルによって異なります。labels セクションでは、API の値は HTTP_REQUEST_HEADER です。これは、ログに記録されたオペレーションが on_http_request_headers プラグイン コールバックであることを示します。

{
  "insertId": "65224aac-0000-24bd-a0e1-582429bd544c@a1",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.cloud.networkservices.logging.v1.WasmPluginLogEntry",
    "metroIataCode": "ber",
    "proxyRegionCode": "DE",
    "message": "[add_header_plugin.cc:26]::onRequestHeaders() AddHeaderStreamContext::onRequestHeaders called",
    "requestId": "effc0311-6716-431b-9e2a-7586835fdff1"
  },
  "resource": {
    "type": "networkservices.googleapis.com/WasmPluginVersion",
    "labels": {
      "plugin_version": "prod-1",
      "resource_container": "projects/123456789",
      "location": "global",
      "plugin_name": "add-headers-plugin-prod-resource"
    }
  },
  "timestamp": "2023-05-10T03:05:43.317015458Z",
  "severity": "INFO",
  "labels": {
    "networkservices.googleapis.com/operation": "HTTP_REQUEST_HEADERS"
  },
  "logName": "projects/123456789/logs/networkservices.googleapis.com%2Fwasm_plugin_activity",
  "trace": "projects/123456789/traces/effc0311-6716-431b-9e2a-7586835fdff1",
  "receiveTimestamp": "2023-05-10T03:05:44.207265284Z"
}

ロギングに関する制限事項

プラグインは、クライアントの HTTP リクエストごとに最大 16 KiB のペイロードデータをログに記録できます。この量は、特定の HTTP リクエストに関連付けられた複数のロギング呼び出しに分割されます。この上限は、ログ メッセージのテキストにのみ適用され、Service Extensions によってログレコードに追加される追加のメタデータには適用されません。

たとえば、on_http_request_headers コールバックがそれぞれ 4 KiB のメッセージで 2 回ロギング呼び出しを行い、同じ HTTP リクエストに対して on_http_response_headers コールバックがそれぞれ 4 KiB のメッセージで 3 回ロギング呼び出しを行おうとすると、3 番目のロギング メッセージは破棄されます。破棄されたプラグイン生成ログ メッセージの数を記録するために、ログ メッセージが追加されます。

ロードバランサの観点からのロギング

このセクションでは、ロードバランサの観点から見た Service Extensions のロギングについて説明します。

バックエンド サービスでロギングを有効にする

リクエストのターゲット であるバックエンド サービスでロギングを有効にすることで、サービスの作成中にアプリケーション ロードバランサ プラグインのロギングを有効にできます。

ターゲット バックエンド サービスのロギングを有効にするには、 gcloud compute backend-services update コマンドを使用します。

gcloud compute backend-services update BACKEND_SERVICE \
    --enable-logging \
    --logging-sample-rate=RATE \
    --region=REGION \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS

次のように置き換えます。

  • BACKEND_SERVICE: バックエンド サービスの名前
  • RATE0.01.0 の値。0.0 はリクエストがロギングされないことを意味し、1.0 はリクエストの 100% がロギングされることを意味します。デフォルト値は 1.0 です。この設定は、 パラメータと組み合わせて使用する場合にのみ有効です。enable-logging enable-logging を省略すると、ロギングは無効になります。
  • REGION: バックエンドのリージョン
  • LOGGING_OPTIONAL_MODE: 次のいずれかのモードで オプション フィールドのロギングを有効にします。

    • INCLUDE_ALL_OPTIONAL: すべてのオプション フィールドを含めます。
    • EXCLUDE_ALL_OPTIONAL(デフォルト): すべてのオプション フィールドを除外します。
    • CUSTOM: オプション フィールドのカスタムリストを含めます。
  • OPTIONAL_FIELDS: CUSTOM モードを選択した場合のオプション フィールドのカンマ区切りのリスト

バックエンド サービスでロギングを有効にすると、Cloud Logging ログ リクエストを使用して HTTP リクエストまたは HTTPS リクエストが ロギングされます。

ログを表示するには、 Google Cloud コンソールで [ログ エクスプローラ] ページに移動します。

バックエンド サービスのログ メッセージ

一般に、アプリケーション ロードバランサのログエントリには、HTTP トラフィックまたは HTTPS トラフィックのモニタリングとデバッグに役立つ情報が含まれています。ログエントリには次のタイプの情報が含まれています。

  • 重大度、 プロジェクト ID、プロジェクト番号、タイムスタンプなど、ほとんどの Google Cloud ログに表示される情報( LogEntry ログの説明を参照)。
  • HttpRequest ログフィールド。

HTTP ロードバランサと HTTPS ロードバランサのリクエストログには、ロードバランサのログエントリ JSON ペイロードに service_extension_info オブジェクトが含まれており、次の情報が含まれています。

フィールド タイプ 説明
backend_target_name 文字列 拡張機能のバックエンド ターゲットの名前。
backend_target_type 文字列 バックエンド ターゲットのタイプ。
chain 文字列 リクエストと一致するサービス拡張機能リソース内の拡張機能チェーンの名前。
extension 文字列 拡張機能チェーン内の拡張機能の名前。
failed_open ブール値 拡張機能の構成で failOpentrue に設定されている場合、この指標の値 true は、 拡張機能がタイムアウトまたは失敗したときに処理が続行されたことを示します。

リージョン外部アプリケーション ロードバランサ、リージョン内部アプリケーション ロードバランサ、 クロスリージョン内部アプリケーション ロードバランサにのみ適用されます。

grpc_status enum gRPC ストリームの最新のステータス。詳細については、 gRPC ステータス コードをご覧ください。
per_processing_request_info 配列 gRPC ストリームで発生する ext_proc 拡張機能の ProcessingRequest 統計情報または ext_authz 拡張機能の CheckRequest 統計情報のリスト。
per_processing_request_info[].event_type enum ProcessingRequest のイベントタイプ。次のいずれかになります。 REQUEST_HEADERSREQUEST_BODYRESPONSE_HEADERS、または RESPONSE_BODY
per_processing_request_info[].latency duration ProcessingRequest メッセージの最初のバイトが拡張機能に送信されてから、 ProcessingResponse メッセージの最後のバイトが受信されるまでの時間。
per_processing_request_info[].processing_effect enum 処理リクエストの各イベントの処理結果。

リージョン外部アプリケーション ロードバランサ、リージョン内部アプリケーション ロードバランサ、 クロスリージョン内部アプリケーション ロードバランサにのみ適用されます。

次のいずれかの値です。

  • NONE: コンテンツが変更されなかったことを示します。
  • NONE_FAILED_OPEN: 拡張機能がオープンに失敗したため、ミューテーションが実行されなかったことを示します。
  • CONTENT_MODIFIED: 正常に適用されたミューテーション リクエストによってコンテンツが変更されたことを示します。
  • IMMEDIATE_RESPONSE: 拡張機能によって即時レスポンスが送信され、以降の処理がすべて停止したことを示します。
  • MUTATION_REJECTED: 拡張機能が許可されていない変更を 1 つ以上リクエストしたため、以降の処理が中止されたことを示します。適切なエラー メッセージがログに記録されます。
  • UNSPECIFIED: 処理の効果が不明であることを示します。
per_processing_request_info[].processing_effect_details 文字列 processing_effectMUTATION_REJECTED の場合、ミューテーションが拒否された理由の詳細。

リージョン外部アプリケーション ロードバランサ、 リージョン内部アプリケーション ロードバランサ、クロスリージョン内部アプリケーション ロードバランサにのみ適用されます。

resource 文字列 拡張機能リソースの名前

モニタリング

このセクションでは、Cloud Monitoring ダッシュボード を使用して、 Service Extensions を使用して構成されたアプリケーション ロードバランサ プラグインの指標を表示する方法について説明します。プラグインは、プラグインの観点またはロードバランサの観点からモニタリングできます。

プラグインの観点からのモニタリング

このセクションでは、プラグインの観点から見た Service Extensions のモニタリングについて説明します。

Service Extensions の指標タイプの詳細については、 Google Cloud 指標 のページをご覧ください。

Service Extensions の Monitoring ダッシュボードを表示する

Service Extensions の Monitoring ダッシュボードを表示する手順は次のとおりです。

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

    Service Extensions に移動

  2. [プラグイン] タブをクリックします。
  3. プラグイン名をクリックします。
  4. [プラグインの詳細] ページで、[モニタリング] タブをクリックします。
  5. [**モニタリング**] ページの指標グラフには、プラグインのパフォーマンスのモニタリングに役立つ情報が表示されます。

  6. プラグインのライフサイクル オペレーションの指標を表示するには、 [オペレーション フィルタ] リストから値を選択します。デフォルトでは、HTTP request headerHTTP response header の値が選択されています。
  7. 特定のプラグイン バージョンの指標を表示するには、 [プラグイン バージョン フィルタ] リストから値を選択します。デフォルトでは、 すべてのバージョンの指標が表示されます。
  8. データを表示する期間を変更するには、時間セレクタから 事前定義された期間を選択するか、[カスタム] をクリックして 開始時刻と終了時刻を定義します。デフォルトでは、セレクタは 1 day に設定されています。

Service Extensions のプラグイン指標

Service Extensions の観点から、プラグインの次の指標をモニタリングできます。これらの指標には接頭辞 networkservices.googleapis.com/wasm_plugin/ が付いています。この接頭辞は表内で省略されています。

指標タイプ 表示名
種類、タイプ、単位
説明
invocation_count Wasm プラグインの呼び出し回数
DELTAINT641
選択した期間におけるプラグインの呼び出し回数。各プラグイン コールバック 呼び出しは、個別のプラグイン呼び出しとしてカウントされます。
invocation_latencies Wasm プラグインの呼び出しレイテンシ
DELTADISTRIBUTIONus
プラグインのローカル実行時間(ミリ秒単位)。この指標には、コールバックごとにラベルで区切られたエントリが含まれています。
cpu/usage_times Wasm プラグインの正規化された CPU 使用率
DELTADISTRIBUTIONus{CPU}
プラグイン呼び出しの CPU 使用時間(マイクロ秒単位)。
memory/bytes_used Wasm プラグインのメモリ使用量
GAUGEDISTRIBUTIONBy
Wasm プラグイン VM によって割り当てられたメモリの合計(バイト単位)。

ロードバランサの観点からのモニタリング

このセクションでは、ロードバランサの観点から見たプラグインの Service Extensions モニタリングについて説明します。

Cloud Load Balancing の Monitoring ダッシュボードを表示する

アプリケーション ロードバランサは、モニタリング データを Cloud Monitoringにエクスポートします。

Monitoring 指標は、次の目的で使用します。

  • ロードバランサの構成、使用状況、パフォーマンスの評価
  • 問題のトラブルシューティング
  • リソースの使用率とユーザー エクスペリエンスの改善

事前定義のダッシュボードを表示する手順は次のとおりです。

  1. コンソールで、[**ダッシュボードの概要**] ページに移動します。 Google Cloud

    ダッシュボードの概要に移動

  2. [カテゴリ] セクションで [GCP] をクリックします。
    • すべてのロードバランサのダッシュボードのリストを表示するには、 [GCP ダッシュボード] リストで [Google Cloud Load Balancers] というダッシュボードをクリックします。特定のロードバランサのダッシュボードを表示するには、リストでロードバランサを見つけて その名前をクリックします。
    • ロードバランサ専用の事前定義ダッシュボードを表示するには、適切なダッシュボードを選択します。

Monitoring の事前定義されたダッシュボードに加えて、カスタム ダッシュボードを作成して、アラートをセットアップし、 Cloud Monitoring API を使用して指標をクエリできます。

Cloud Load Balancing のプラグイン指標

Cloud Load Balancing の観点から、プラグインの次の指標をモニタリングできます。

プレビュー版では、リージョン外部アプリケーション ロードバランサ、リージョン内部アプリケーション ロードバランサ、クロスリージョン内部アプリケーション ロードバランサの拡張機能について、次の指標をモニタリングできます。これらの指標には接頭辞 networkservices.googleapis.com が付いています。この接頭辞は次の表のエントリでは省略しています。

次の表に、各指標の指標タイプ、表示名、種類、タイプ、単位、説明を示します。

指標タイプ 表示名
種類、タイプ、単位
説明
extension/invocation_count 拡張機能の呼び出し回数
DELTAINT641
拡張機能に送信された呼び出しの数。
extension/invocation_latencies 拡張機能の呼び出しレイテンシ
DELTADISTRIBUTIONms
各拡張機能の呼び出しのレイテンシから計算された分布。
extension/sent_chunks_count 拡張機能の送信チャンク数
DELTAINT641
request_body イベントと response_body イベントにのみ適用されます。 拡張機能に送信されたデータチャンクの数。
extension/received_chunks_count 拡張機能の受信チャンク数
DELTAINT641
request_body イベントと response_body イベントにのみ適用されます。 拡張機能から受信したチャンクの数。
extension/failed_open_count フェイルオープンによる拡張機能の呼び出しの失敗
DELTAINT641
システムがフェイルオープンするように構成され、リクエストの続行が許可された場合に、呼び出しが失敗した回数。
extension/mutation_rejections 拡張機能のミューテーション拒否数
DELTAINT641
ヘッダー、本文、トレーラーのミューテーションをリクエストしたが 拒否された呼び出しの数。拒否は、ミューテーション が無効である場合や、サイズ上限を超えている場合など、さまざまな理由で発生する可能性があります。
extension/sent_bytes_count 拡張機能の送信バイト数
DELTAINT64By
拡張機能に送信されたバイト数。
extension/received_bytes_count 拡張機能の受信バイト数
DELTAINT64By
拡張機能から受信したバイト数。

次の指標をモニタリングすることもできます。これらの指標には接頭辞 loadbalancing.googleapis.com/ が付いています。この接頭辞は表内で省略されています 。

指標タイプ 表示名
種類、タイプ、単位
説明
https/backend_request_count
https/external/regional/backend_request_count
https/internal/backend_request_count
バックエンドのリクエスト数
DELTAINT641
アプリケーション ロードバランサからプラグインが呼び出される回数。
https/backend_request_bytes_count
https/external/regional/backend_request_bytes_count
https/internal/backend_request_bytes_count
バックエンド リクエストのバイト数
DELTAINT64By
ロードバランサからプラグインに送信されたバイト数。
https/backend_response_bytes_count,
https/external/regional/backend_response_bytes_count,
https/internal/backend_response_bytes_count
バックエンド レスポンスのバイト数
DELTAINT64By
ロードバランサが 拡張機能のバックエンドから受信したバイト数。

プラグインの指標を表示する

特定のプラグインの指標を表示する手順は次のとおりです。

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

    Metrics Explorer に移動

  2. [指標] 要素で、[指標を選択] メニューを開きます。次に、以下の操作を行います。

    1. リソースのリストから、適切なアプリケーション ロードバランサ ルールを選択します。

    2. 指標カテゴリのリストから [Https] を選択します。

    3. 指標のリストからプラグイン指標を選択します。

    4. [適用] をクリックします。

  3. [フィルタ] 要素で、次の操作を行います。

    1. [backend_target_type] ラベルを選択し、値を WASM_PLUGIN に設定します。

    2. [backend_target_name] ラベルを選択し、プラグイン名を値として設定します。

ロードバランサの指標タイプの詳細については、 ロード バランシング セクションの Google Cloud 指標ページをご覧ください。