リージョン外部アプリケーション ロードバランサのロギングとモニタリング

このドキュメントでは、Cloud LoggingCloud Monitoring を使用したリージョン外部アプリケーション ロードバランサを構成する方法について説明します。

ロギング

外部アプリケーション ロードバランサのバックエンド サービスのログの有効化、無効化、表示を行えます。

バックエンド サービスごとにロギングを有効または無効にできます。すべてのリクエストをロギングするか、ランダムにサンプリングした一部のみをロギングするかを構成できます。

外部アプリケーション ロードバランサに適用されるログの除外がないことを確認する必要があります。Cloud HTTP Load Balancer ログが許可されているかどうか確認する方法については、除外フィルタをご覧ください。

ログのサンプリングと収集

ロードバランサのバックエンド仮想マシン(VM)インスタンスによって処理されるリクエスト(および対応するレスポンス)がサンプリングされます。これらのサンプリングされたリクエストが処理され、ログが生成されます。logConfig.sampleRate パラメータに従って、ログエントリとして出力されるリクエストの割合を制御します。logConfig.sampleRate1.0(100%)の場合、すべてのリクエストのログが生成され、Cloud Logging に書き込まれます。

オプション フィールド

ログレコードには必須フィールドとオプション フィールドがあります。ログの内容に、オプション フィールドと必須フィールドの一覧を示します。必須フィールドはすべて必ず含まれます。保持するオプション フィールドはカスタマイズできます。

  • [すべてのオプションのフィールドを含める] を選択すると、ログレコード形式のすべてのオプション フィールドがログに含まれます。新しいオプション フィールドがレコード形式に追加されると、ログに新しいフィールドが自動的に含まれます。

  • [すべてのオプションのフィールドを除外する] を選択した場合、オプション フィールドはすべて省略されます。

  • [カスタム] を選択した場合は、含めるオプション フィールド(tls.protocol,tls.cipher,orca_load_report.cpu_utilization,orca_load_report.mem_utilization など)を指定できます。

オプション フィールドのカスタマイズについては、新しいバックエンド サービスでロギングを有効にするをご覧ください。

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

コンソール

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. ロードバランサの名前をクリックします。

  3. [編集] をクリックします。

  4. [バックエンドの構成] をクリックします。

  5. [バックエンド サービスを作成] を選択します。

  6. 必須のバックエンド サービス フィールドに入力します。

  7. [ロギング] セクションで、[ロギングを有効にする] チェックボックスをオンにします。

  8. [サンプルレート] の値を選択します。0.0 から 1.0 までの数値を設定できます。0.0 はリクエストがログに記録されていないことを意味し、1.0 はリクエストの 100% がログに記録されることを意味します。デフォルト値は 1.0 です。

  9. 省略可: ログにすべてのオプション フィールドを含めるには、[任意項目] セクションで [すべてのオプションのフィールドを含める] をクリックします。

  10. バックエンド サービスの編集を終了するには、[更新] をクリックします。

  11. ロードバランサの編集を終了するには、[更新] をクリックします。

gcloud: リージョン モード

gcloud compute backend-services create コマンドを使用してバックエンド サービスを作成し、ロギングを有効にします。

gcloud compute backend-services create BACKEND_SERVICE \
    --region=REGION \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS

ここで

  • --region は、バックエンド サービスがリージョンであることを示します。このフィールドは、リージョン外部アプリケーション ロードバランサで使用されるバックエンド サービスに使用します。
  • --enable-logging は、バックエンド サービスのロギングを有効にします。
  • --logging-sample-rate には、0.0 から 1.0 までの値を指定できます。0.0 と設定すると、リクエストは一切ロギングされません。1.0 と設定すると、すべてのリクエストがロギングされます。このフィールドは --enable-logging パラメータでのみ有効です。ロギングを有効にしても、サンプリング レートが 0.0 であれば、ロギングが無効の場合と同じ結果になります。デフォルト値は 1.0 です。
  • --logging-optional を使用すると、ログに含めるオプション フィールドを指定できます。

    • INCLUDE_ALL_OPTIONAL: すべてのオプション フィールドを含めます。

    • EXCLUDE_ALL_OPTIONAL(デフォルト): すべてのオプション フィールドを除外します。

    • CUSTOM: OPTIONAL_FIELDS で指定するオプション フィールドのカスタムリストを含めます。

  • --logging-optional-fields を使用すると、ログに含めるオプション フィールドのカンマ区切りのリストを指定できます。

    たとえば、tls.protocol,tls.cipherLOGGING_OPTIONAL_MODECUSTOM に設定されている場合にのみ設定できます。カスタム指標を使用して ORCA 負荷レポートの要素をロギングする場合は、LOGGING_OPTIONAL_MODECUSTOM に設定し、ロギングする要素を OPTIONAL_FIELDS フィールドに指定します。例: orca_load_report.cpu_utilization,orca_load_report.mem_utilization

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

コンソール

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. ロードバランサの名前をクリックします。

  3. [編集] をクリックします。

  4. [バックエンドの構成] をクリックします。

  5. バックエンド サービスの横にある [編集] をクリックします。

  6. [ロギング] セクションで、[ロギングを有効にする] チェックボックスをオンにします。

  7. [サンプルレート] フィールドで、サンプリング確率を設定します。0.0 から 1.0 までの数値を設定できます。0.0 はリクエストがログに記録されていないことを意味し、1.0 はリクエストの 100% がログに記録されることを意味します。デフォルト値は 1.0 です。

  8. 省略可: ログにすべてのオプション フィールドを含めるには、[任意項目] セクションで [すべてのオプションのフィールドを含める] をクリックします。

  9. バックエンド サービスの編集を終了するには、[更新] をクリックします。

  10. ロードバランサの編集を終了するには、[更新] をクリックします。

gcloud: リージョン モード

gcloud compute backend-services update コマンドを使用して、既存のバックエンド サービスでロギングを有効にします。

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

ここで

  • --region は、バックエンド サービスがリージョンであることを示します。このフィールドは、リージョン外部アプリケーション ロードバランサで使用されるバックエンド サービスに使用します。
  • --enable-logging は、バックエンド サービスのロギングを有効にします。
  • --logging-sample-rate には、0.0 から 1.0 までの値を指定できます。0.0 と設定すると、リクエストは一切ロギングされません。1.0 と設定すると、すべてのリクエストがロギングされます。--enable-logging パラメータを指定した場合のみ有効となります。ロギングを有効にしても、サンプリング レートが 0.0 であれば、ロギングが無効の場合と同じ結果になります。デフォルト値は 1.0 です。
  • --logging-optional を使用すると、ログに含めるオプション フィールドを指定できます。

    • INCLUDE_ALL_OPTIONAL: すべてのオプション フィールドを含めます。

    • EXCLUDE_ALL_OPTIONAL(デフォルト): すべてのオプション フィールドを除外します。

    • CUSTOM: OPTIONAL_FIELDS で指定するオプション フィールドのカスタムリストを含めます。

  • --logging-optional-fields を使用すると、ログに含めるオプション フィールドのカンマ区切りのリストを指定できます。

    たとえば、tls.protocol,tls.cipher のようにします。LOGGING_OPTIONAL_MODECUSTOM に設定されている場合のみ設定できます。

既存のバックエンド サービスでのロギングの無効化または変更

コンソール

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. ロードバランサの名前をクリックします。

  3. [編集] をクリックします。

  4. [バックエンドの構成] をクリックします。

  5. バックエンド サービスの横にある [編集] をクリックします。

  6. ロギングを完全に無効にするには、[ロギング] セクションで [Logging を有効にする] チェックボックスをオフにします。

  7. ロギングを有効にした場合、[サンプルレート] に異なる値を設定できます。0.0 から 1.0 までの数値を設定できます。0.0 はリクエストがログに記録されていないことを意味し、1.0 はリクエストの 100% がログに記録されることを意味します。デフォルト値は 1.0 です。たとえば、0.2 は、サンプリングされたリクエストの 20% がログを生成することを意味します。

  8. バックエンド サービスの編集を終了するには、[更新] をクリックします。

  9. ロードバランサの編集を終了するには、[更新] をクリックします。

gcloud: リージョン モード

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

ロギングを完全に無効にする

gcloud compute backend-services update BACKEND_SERVICE \
    --region=REGION \
    --no-enable-logging

ここで

  • --region は、バックエンド サービスがリージョンであることを示します。このフィールドは、リージョン外部アプリケーション ロードバランサで使用されるバックエンド サービスに使用します。
  • --no-enable-logging はそのバックエンド サービスのロギングを無効にします。

既存のバックエンド サービスでオプション フィールドのロギングを有効にする

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS

ここで

  • --logging-sample-rate には、0.0 から 1.0 までの値を指定できます。0.0 と設定すると、リクエストは一切ロギングされません。1.0 と設定すると、すべてのリクエストがロギングされます。--enable-logging パラメータを指定した場合のみ有効となります。ロギングを有効にしても、サンプリング レートが 0.0 であれば、ロギングが無効の場合と同じ結果になります。デフォルト値は 1.0 です。
  • --logging-optional を使用すると、ログに含めるオプション フィールドを指定できます。

    • INCLUDE_ALL_OPTIONAL: すべてのオプション フィールドを含めます。

    • EXCLUDE_ALL_OPTIONAL(デフォルト): すべてのオプション フィールドを除外します。

    • CUSTOM: OPTIONAL_FIELDS で指定するオプション フィールドのカスタムリストを含めます。

  • --logging-optional-fields を使用すると、ログに含めるオプション フィールドのカンマ区切りのリストを指定できます。

    たとえば、tls.protocol,tls.cipherLOGGING_OPTIONAL_MODECUSTOM に設定されている場合にのみ設定できます。カスタム指標を使用して ORCA 負荷レポートの要素をロギングする場合は、LOGGING_OPTIONAL_MODECUSTOM に設定し、ロギングする要素を OPTIONAL_FIELDS フィールドに指定します。例: orca_load_report.cpu_utilization,orca_load_report.mem_utilization

ロギングのオプション モードをカスタムからその他に更新する

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=

ここで

  • --logging-optional を使用すると、ログに含めるオプション フィールドを指定できます。

    • INCLUDE_ALL_OPTIONAL: すべてのオプション フィールドを含めます。

    • EXCLUDE_ALL_OPTIONAL(デフォルト): すべてのオプション フィールドを除外します。

  • 上記のとおり、--logging-optional-fields を明示的に構成して、既存の CUSTOM フィールドを消去する必要があります。API では、CUSTOM 以外のモードと CUSTOM フィールドを組み合わせることはできません。

ロギングのサンプルレートを変更する

gcloud compute backend-services update BACKEND_SERVICE \
    --global | --region=REGION \
    --logging-sample-rate=VALUE

ログを表示する

HTTP(S) ログはまず転送ルールでインデックス化され、次に URL マップでインデックス化されます。

ログを表示するには、[ログ エクスプローラ] ページに移動します。

[ログ エクスプローラ] に移動

  • すべてのログを表示するには、[リソース] フィルタ メニューで [Cloud HTTP ロードバランサ] > [すべての転送ルール] を選択します。

  • 1 つの転送ルールのログを表示するには、単一の転送ルール名を選択します。

  • 1 つの URL マップのログを表示するには、転送ルールを選択してから、URL マップを選択します。

ブール型のログフィールドは、通常、フィールド値が true の場合にのみ表示されます。ブール型のフィールドの値が false の場合、そのフィールドはログから省略されます。

ログフィールドには UTF-8 エンコードが適用されます。UTF-8 以外の文字列は、疑問符に置き換えられます。リージョン外部アプリケーション ロードバランサの場合は、リソースログ(resource.type="http_external_regional_lb_rule")を使用してログベースの指標をエクスポートできます。

ログの内容

外部アプリケーション ロードバランサのログエントリには、HTTP(S) トラフィックのモニタリングとデバッグに有用な情報が含まれています。ログレコードには、すべてのログレコードのデフォルト フィールドである必須フィールドが含まれています。

ログレコードには、HTTP(S) トラフィックに関する追加情報を追加するオプション フィールドが含まれています。オプション フィールドは、ストレージ コストを節約するために省略できます。

一部のログフィールドはマルチ フィールド形式であり、所定のフィールドに複数のデータが含まれます。たとえば、tls フィールドは TlsInfo 形式で、TLS プロトコルと TLS 暗号が 1 つのフィールドに含まれています。これらのマルチ フィールドのフィールドについては、次のレコード形式の表で説明します。

フィールド フィールドの形式 フィールドのタイプ: 必須または省略可 説明
severity
insertID
timestamp
logName
LogEntry 必須 ログエントリで説明されている一般的なフィールド。
httpRequest HttpRequest 必須 HTTP リクエストをロギングするための共通プロトコル。
resource MonitoredResource 必須

MonitoredResource は、ログエントリに関連付けられているリソースタイプです。

MonitoredResourceDescriptor は、型名とラベルのセットを使用して MonitoredResource オブジェクトのスキーマを記述します。詳細については、リソースラベルをご覧ください。

jsonPayload オブジェクト(Struct 形式) 必須 JSON オブジェクトとして表されるログエントリ ペイロード。JSON オブジェクトには、次のフィールドが含まれています。
  • proxyStatus
  • tls
  • backendTargetProjectNumber
  • mtls
  • authzPolicyInfo
  • backendNetworkName
  • orca_load_report
文字列 必須

proxyStatus フィールドには、リージョン外部アプリケーション ロードバランサが HttpRequest.status を返した理由を指定する文字列が保持されます。

値が空の文字列の場合、このフィールドはログに記録されません。これが発生する可能性があるのは、プロキシまたはバックエンドがステータス コードを返さない場合、または返されたステータス コードが 04XX5XX のいずれかでない場合です。

proxyStatus フィールドは 2 つの部分で構成されます。

AuthzPolicyInfo 必須 authzPolicyInfo フィールドには、認可ポリシーの結果に関する情報が保存されます。この情報は、認可ポリシーを有効にしているリージョン外部アプリケーション ロードバランサでのみ使用できます。詳細については、認可ポリシーでログに記録される内容をご覧ください。
TlsInfo 省略可 tls フィールドには、クライアントとリージョン外部アプリケーション ロードバランサ間の接続の TLS メタデータを指定する TlsInfo フィールドが保持されます。このフィールドは、クライアントが TLS / SSL 暗号化を使用している場合にのみ使用できます。
MtlsInfo 省略可

mtls フィールドには、クライアントとリージョン外部アプリケーション ロードバランサ間の接続の mTLS メタデータを指定する MtlsInfo 値が保持されます。このフィールドは、ロードバランサがフロントエンド相互 TLS(mTLS)を使用している場合にのみ使用できます。

--logging-optional-fields パラメータを使用してロギングする要素を指定します。

  • tls.protocol
  • tls.cipher

--logging-optional-fieldstls に設定してすべての要素を指定することはできません

文字列 省略可 backendNetworkName フィールドには、バックエンドの VPC ネットワークを指定します。
OrcaLoadReport 省略可

orca_load_report フィールドには、バックエンドによって返された ORCA 負荷レポートの一部またはすべての要素が含まれます。このフィールドは、バックエンドが ORCA 負荷レポートを返し、ロードバランサで ORCA 負荷レポートのロギングが構成されている場合にのみ表示されます。

--logging-optional-fields パラメータを使用して、ORCA 負荷レポートの次の要素のうち何をロギングする必要があるかを指定します。

  • orca_load_report.cpu_utilization
  • orca_load_report.mem_utilization
  • orca_load_report.request_cost
  • orca_load_report.utilization
  • orca_load_report.rps_fractional
  • orca_load_report.eps
  • orca_load_report.named_metrics
  • orca_load_report.application_utilization

--logging-optional-fieldsorca_load_report に設定して、すべての要素のロギングを指定することもできます。

TlsInfo フィールドの形式

フィールド フィールドの形式 フィールドのタイプ: 必須または省略可 説明
protocol 文字列 省略可 クライアントがロードバランサとの接続を確立するために使用する TLS プロトコル。設定可能な値は TLSv1TLSv1.1TLSv1.2TLSv1.3QUIC です。クライアントが TLS / SSL 暗号化を使用していない場合、この値は NULL に設定されます。
cipher 文字列 省略可 クライアントがロードバランサとの接続を確立するために使用する TLS 暗号。クライアントが HTTP(S) を使用していない場合、またはクライアントが TLS / SSL 暗号化を使用していない場合、この値は NULL に設定されます。

MtlsInfo フィールドの形式

フィールド フィールドの形式 フィールドのタイプ: 必須または省略可 説明
clientCertPresent ブール値 省略可

TLS handshake 中にクライアントが証明書を提供した場合は true、それ以外は false

clientCertChainVerified ブール値 省略可

構成された TrustStore に対してクライアント証明書チェーンが検証された場合は true、それ以外の場合は false

clientCertError 文字列 省略可

エラー条件を表す事前定義の文字列。エラー文字列の詳細については、クライアント検証モードをご覧ください。

clientCertSha256Fingerprint 文字列 省略可

クライアント証明書の Base64 でエンコードされた SHA-256 フィンガープリント。

clientCertSerialNumber 文字列 省略可

クライアント証明書のシリアル番号。シリアル番号が 50 バイトを超える場合、文字列 client_cert_serial_number_exceeded_size_limitclient_cert_error に追加され、シリアル番号は空の文字列に設定されます。

clientCertValidStartTime 文字列 省略可

クライアント証明書が無効から有効に変わる時点のタイムスタンプ(RFC 3339 日付文字列形式)。例: 2022-07-01T18:05:09+00:00

clientCertValidEndTime 文字列 省略可

クライアント証明書が有効から無効に変わる時点のタイムスタンプ(RFC 3339 日付文字列形式)。例: 2022-07-01T18:05:09+00:00

clientCertSpiffeId 文字列 省略可

サブジェクト代替名(SAN)フィールドの SPIFFE ID。値が無効であるか、2,048 バイトを超える場合、SPIFFE ID は空の文字列に設定されます。

SPIFFE ID が 2,048 バイトを超える場合、文字列 client_cert_spiffe_id_exceeded_size_limitclient_cert_error に追加されます。

clientCertUriSans 文字列 省略可

URI 型の SAN 拡張機能のカンマ区切り Base64 エンコード リスト。SAN 拡張機能はクライアント証明書から抽出されます。client_cert_uri_sans フィールドに SPIFFE ID は含まれません。

client_cert_uri_sans フィールドが 512 バイトを超える場合、文字列 client_cert_uri_sans_exceeded_size_limitclient_cert_error に追加され、カンマ区切りリストは空の文字列に設定されます。

clientCertDnsnameSans 文字列 省略可

DNSName タイプの SAN 拡張機能のカンマ区切り Base64 エンコード リスト。SAN 拡張機能はクライアント証明書から抽出されます。

client_cert_dnsname_sans フィールドが 512 バイトを超える場合、文字列 client_cert_dnsname_sans_exceeded_size_limitclient_cert_error に追加され、カンマ区切りリストは空の文字列に設定されます。

clientCertIssuerDn 文字列 省略可

Base64 でエンコードされた証明書の完全な発行者フィールド。

client_cert_issuer_dn フィールドが 512 バイトを超える場合、文字列 client_cert_issuer_dn_exceeded_size_limitclient_cert_error に追加され、client_cert_issuer_dn は空の文字列に設定されます。

clientCertSubjectDn 文字列 省略可

Base64 でエンコードされた証明書の完全なサブジェクト フィールド。

client_cert_subject_dn フィールドが 512 バイトを超える場合、文字列 client_cert_subject_dn_exceeded_size_limitclient_cert_error に追加され、client_cert_subject_dn は空の文字列に設定されます。

clientCertLeaf 文字列 省略可

証明書が検証に合格している確立済みの mTLS 接続のクライアント リーフ証明書。証明書のエンコードは RFC 9440 に準拠しています。バイナリ DER 証明書は Base64 を使用してエンコードされ、両側がコロンで区切られています(改行、スペース、Base64 以外の文字は使用されません)。

client_cert_leaf がエンコードされていない状態で 16 KB を超えると、文字列 client_cert_validated_leaf_exceeded_size_limitclient_cert_error に追加され、client_cert_leaf が空の文字列に設定されます。

clientCertChain 文字列 省略可

クライアント証明書が検証に合格している確立済みの mTLS 接続のクライアント証明書チェーンの証明書のリスト。このリストはカンマ区切りで、標準の TLS 順序になっています(リーフ証明書は含みません)。証明書のエンコードは RFC 9440 に準拠しています。

Base64 エンコード前の client_cert_leafclient_cert_chain の合計サイズが 16 KB を超えると、client_cert_validated_chain_exceeded_size_limitclient_cert_error に追加され、client_cert_chain が空の文字列に設定されます。

リソースラベル

次の表に、resource.type="http_external_regional_lb_rule" のリソースラベルを示します。

フィールド タイプ 説明
backend_name 文字列 バックエンド インスタンス グループまたは NEG の名前。ただし、TLS 接続の失敗の場合、ラベルは空白です。
backend_scope 文字列 バックエンドの範囲。ゾーン名またはリージョン名です。backend_name が不明な場合はいつでも、UNKNOWN である可能性があります。
backend_scope_type 文字列 バックエンドの範囲(REGION/ZONE)。backend_name が不明な場合はいつでも、UNKNOWN である可能性があります。
backend_target_name 文字列 リクエストを処理するために選択されたバックエンドの名前。リクエストと一致する URL マップのパスルールまたはルートルールに基づいて選択されます。
backend_target_type 文字列 バックエンド ターゲットのタイプ。BACKEND_SERVICE か、バックエンドが割り当てられていない場合は UNKNOWN が返されます。
backend_type 文字列 バックエンド グループのタイプ。INSTANCE_GROUPNETWORK_ENDPOINT_GROUP のいずれかで、バックエンドが割り当てられていない場合は UNKNOWN が返されます。
forwarding_rule_name 文字列 転送ルール オブジェクトの名前。
matched_url_path_rule 文字列 URL マップキーの一部として構成された URL マップ パスルールまたはルートルール。フォールバックとして UNMATCHED または UNKNOWN の場合もあります。
  • UNMATCHED は、URL パスルールに一致しないリクエストのため、デフォルトのパスルールを使用します。
  • UNKNOWN は、内部エラーまたは TLS 接続の失敗を示します。
network_name 文字列 ロードバランサの VPC ネットワークの名前。
project_id 文字列 このリソースに関連付けられた Google Cloud プロジェクトの ID
region 文字列 ロードバランサが定義されているリージョン。
target_proxy_name 文字列 転送ルールで参照されるターゲット プロキシ オブジェクトの名前。
url_map_name 文字列 バックエンド サービスを選択するように構成された URL マップ オブジェクトの名前。 TLS 接続の失敗の場合、url_map_name は空白です。

proxyStatus エラー フィールド

proxyStatus フィールドには、ロードバランサがエラーを返した理由を指定する文字列が含まれます。proxyStatus フィールドには、proxyStatus errorproxyStatus details という 2 つの部分があります。このセクションでは、proxyStatus error フィールドでサポートされている文字列について説明します。

proxyStatus error フィールドは、次のロードバランサに適用されます。

  • リージョン外部アプリケーション ロードバランサ
  • クロスリージョン内部アプリケーション ロードバランサ
  • リージョン内部アプリケーション ロードバランサ
proxyStatus エラー 説明 一般的に記録されるレスポンス コード
destination_unavailable ロードバランサが、バックエンドが使用不可であると見なしています。たとえば、バックエンドとの通信が最近失敗したか、ヘルスチェックが失敗した場合などです。 500503
connection_timeout ロードバランサがバックエンドへの接続を開始しようとしてタイムアウトしました。 504
connection_terminated

完全なレスポンスを受信する前に、ロードバランサからバックエンドへの接続が終了しました。

この proxyStatus error は、次のいずれかの状況で返されます。

  • 完全なレスポンスが受信される前に、ロードバランサからバックエンドへの接続が終了しました。
  • TLS 接続が SSL handshake で失敗し、クライアントがロードバランサとの接続を確立しませんでした。

0502503
connection_refused ロードバランサからバックエンドへの接続が拒否されました。 502503
connection_limit_reached

ロードバランサはバックエンドに対する接続数を制限するように構成されており、この上限を超えています。

この proxyStatus error は、次のいずれかの状況で返されます。

  • バックエンドがメンテナンス モードの場合、トラフィックをそのバックエンドに転送することはできません。
  • リクエストがローカルでレート制限されている場合。
  • Envoy が、メモリ不足などのエラー状態を処理している場合。
502503
destination_not_found ロードバランサは、このリクエストに使用する適切なバックエンドを決定できません。たとえば、バックエンドが構成されていない可能性があります。 500404
dns_error バックエンド ホスト名の IP アドレスを検出しようとしたときに、ロードバランサで DNS エラーが発生しました。 502503
proxy_configuration_error ロードバランサで内部構成エラーが発生しました。 500
proxy_internal_error ロードバランサで内部エラーが発生しました。このエラーは、接続を管理するプロキシのスケジュールされた再起動が原因で発生することがあります。 0500502
proxy_internal_response ロードバランサがバックエンドへの接続を試行せずにレスポンスを生成しました。 問題の種類に応じた任意のレスポンス コード。たとえば、410 ステータス コードは、支払いの滞納が原因でバックエンドが利用できないことを意味します。
http_response_timeout ロードバランサは、バックエンドからの完全なレスポンスの待機中に、構成されたバックエンド サービスのタイムアウトの上限に達しました。 504408
http_request_error ロードバランサで HTTP 4xx エラーが発生し、クライアント リクエストに問題があることを示します。 400403405406408411413414415416417429
http_protocol_error ロードバランサが、バックエンドとの通信中に HTTP プロトコル エラーを検出しました。 502
tls_protocol_error ロードバランサが TLS handshake 中に TLS エラーを検出しました。 0
tls_certificate_error mTLS が有効で、サーバーまたはクライアントから提示された証明書を検証するとき、ロードバランサでエラーが発生しました。 0
tls_alert_received ロードバランサが TLS handshake 中に致命的な TLS アラートを検出しました。 0

proxyStatus 詳細フィールド

proxyStatus フィールドには、ロードバランサがエラーを返した理由を指定する文字列が含まれます。proxyStatus フィールドには、proxyStatus errorproxyStatus details という 2 つの部分があります。proxyStatus details フィールドは省略可能で、追加情報が利用可能な場合にのみ表示されます。このセクションでは、proxyStatus details フィールドでサポートされている文字列について説明します。

proxyStatus details フィールドは、次のロードバランサに適用されます。

  • リージョン外部アプリケーション ロードバランサ
  • リージョン内部アプリケーション ロードバランサ
  • クロスリージョン内部アプリケーション ロードバランサ
proxyStatus の詳細 説明 共通の付随レスポンス ステータス コード
client_disconnected_before_any_response ロードバランサがレスポンスを送信する前に、クライアントへの接続が切断されました。 0
backend_connection_closed バックエンドが予期せずロードバランサへの接続を閉じました。これは、ロードバランサがサードパーティ アプリケーションなど別のエンティティにトラフィックを送信していて、そのエンティティの TCP タイムアウト値がロードバランサのタイムアウト値である 10 分(600 秒)よりも短い場合に発生する可能性があります。 502
failed_to_connect_to_backend ロードバランサは、バックエンドに接続できませんでした。これには、接続フェーズ中のタイムアウトが含まれます。 503
failed_to_pick_backend ロードバランサは、リクエストを処理するための正常なバックエンドを選択できませんでした。 502
response_sent_by_backend HTTP リクエストは、バックエンドに正常にプロキシされ、バックエンドによってレスポンスが返されました。 HTTP ステータス コードは、バックエンドで実行されているソフトウェアによって設定されます。
client_timed_out

ロードバランサとクライアントとの接続が、アイドル タイムアウトを超過しました。

リージョン外部アプリケーション ロードバランサの詳細については、クライアントの HTTP キープアライブ タイムアウトをご覧ください。内部アプリケーション ロードバランサの詳細については、クライアント HTTP キープアライブ タイムアウトをご覧ください。
0408
backend_timeout

バックエンドは、レスポンスを生成中にタイムアウトしました。

502
http_protocol_error_from_backend_response バックエンド レスポンスに HTTP プロトコル エラーが含まれています。 501502
http_protocol_error_from_request クライアント リクエストに HTTP プロトコル エラーが含まれています。 400503
http_version_not_supported HTTP プロトコル バージョンがサポートされていません。現在サポートされているのは、HTTP 1.1 と 2.0 のみです。 400
handled_by_identity_aware_proxy このレスポンスは、アクセスを許可する前のクライアントの ID 確認時に、Identity-Aware Proxy(IAP)によって生成されました。 200302400401403500502
invalid_request_headers

クライアントから受信した HTTP リクエスト ヘッダーに、該当する HTTP 仕様で許可されていない文字が 1 つ以上含まれています。

たとえば、二重引用符(")や標準 ASCII 範囲外の文字(0x80 以上のバイト)を含むヘッダー フィールド名は無効です。

詳しくは以下をご覧ください。

400404
ip_detection_failed 元の IP アドレスを検出できませんでした。 失敗の性質によって決まる任意のステータス コード。値は 400599 にする必要があります。
request_body_too_large HTTP リクエストの本文がロードバランサでサポートされている最大長を超えています。 413507
request_header_timeout ロードバランサが 5 秒以内に完全なリクエストを受信しなかったため、リクエスト ヘッダーがタイムアウトしました。 408504
denied_by_security_policy Google Cloud Armor のセキュリティ ポリシーが原因で、ロードバランサがリクエストを拒否しました。 403
throttled_by_security_policy リクエストは Google Cloud Armor のスロットル ルールによってブロックされました。 429
client_cert_chain_invalid_eku クライアント証明書またはその発行元のいずれかに、clientAuth を含む鍵の拡張的用途がありません。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_chain_max_name_constraints_exceeded 検証に指定された中間証明書に、10 を超える名前の制約があります。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_invalid_rsa_key_size クライアントのリーフ証明書または中間証明書の RSA 鍵のサイズが無効です。 詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_not_provided クライアントが handshake 中にリクエストされた証明書を提示しませんでした。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_pki_too_large 検証に使用する PKI に、同じ SubjectSubject Public Key Info を共有する 4 つ以上の中間証明書があります。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_unsupported_elliptic_curve_key クライアント証明書または中間証明書で、サポートされていない楕円曲線が使用されています。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_unsupported_key_algorithm クライアント証明書または中間証明書が、非 RSA または ECDSA 以外のアルゴリズムを使用しています。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_validation_failed クライアント証明書が TrustConfig での検証に失敗しました。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_validation_not_performed TrustConfig を設定せずに相互 TLS が構成されています。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_validation_search_limit_exceeded 証明書チェーンの検証中に、深度または反復処理の上限に達しました。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
client_cert_validation_timed_out 証明書チェーンの検証中に時間制限(200 ミリ秒)を超えました。詳細については、閉じられた接続についてログに記録されたエラーをご覧ください。 0
tls_version_not_supported TLS プロトコル バージョンは認識されますが、サポートされていません。このエラーが起きると、TLS 接続が閉じられます。 0
unknown_psk_identity PSK 鍵の確立が必要であるにもかかわらず、許容される PSK ID をクライアントが提供しなかった場合に、サーバーがこのエラーを送信します。このエラーが起きると、TLS 接続が閉じられます。 0
no_application_protocol クライアントの「application_layer_protocol_negotiation」拡張機能が、サーバーでサポートされていないプロトコルのみをアドバタイズする場合に、サーバーによって送信されます。TLS アプリケーション レイヤ プロトコル ネゴシエーション拡張をご覧ください。このエラーが起きると、TLS 接続が閉じられます。 0
no_certificate 証明書が見つかりません。このエラーが起きると、TLS 接続が閉じられます。 0
bad_certificate 証明書が無効であるか、検証できない署名が含まれています。このエラーが起きると、TLS 接続が閉じられます。 0
unsupported_certificate 証明書の形式がサポートされていません。このエラーが起きると、TLS 接続が閉じられます。 0
certificate_revoked 証明書が署名者によって取り消されました。このエラーが起きると、TLS 接続が閉じられます。 0
certificate_expired 証明書の有効期限が切れているか、無効です。このエラーが起きると、TLS 接続が閉じられます。 0
certificate_unknown 証明書の処理中に、原因不明の問題が発生したため、証明書は受け入れられません。このエラーが起きると、TLS 接続が閉じられます。 0
unknown_ca 有効な証明書チェーンまたは部分チェーンが受信されましたが、CA 証明書が見つからなかったか、既知のトラスト アンカーと一致しなかったため、証明書は受け入れられませんでした。このエラーが起きると、TLS 接続が閉じられます。 0
unexpected_message 不適切なメッセージ(誤った handshake メッセージ、早期のアプリケーション データなど)が受信された。このエラーが起きると、TLS 接続が閉じられます。 0
bad_record_mac 保護を解除できないレコードが受信されました。このエラーが起きると、TLS 接続が閉じられます。 0
record_overflow 長さが 214+256 バイトを超える TLSCiphertext レコードが受信されたか、214 バイト(または他のネゴシエートされた上限)を超える TLSPlaintext レコードにレコードが復号されました。このエラーが起きると、TLS 接続が閉じられます。 0
handshake_failure 利用可能なオプションで、許容可能なセキュリティ パラメータのセットをネゴシエートできません。このエラーが起きると、TLS 接続が閉じられます。 0
illegal_parameter handshake のフィールドが正しくないか、他のフィールドとの整合性がありません。このエラーが起きると、TLS 接続が閉じられます。 0
access_denied 有効な証明書または PSK が受信されましたが、アクセス制御が適用されたときに、クライアントがネゴシエーションに進みませんでした。このエラーが起きると、TLS 接続が閉じられます。 0
decode_error 一部のフィールドが指定された範囲外であったか、メッセージの長さが正しくなかったため、メッセージをデコードできませんでした。このエラーが起きると、TLS 接続が閉じられます。 0
decrypt_error handshake(レコードレイヤではない)の暗号オペレーションが失敗しました。これには、署名を正しく確認できないこと、終了メッセージまたは PSK バインダを検証できないことが含まれます。このエラーが起きると、TLS 接続が閉じられます。 0
insufficient_security クライアントでサポートされているパラメータよりも安全なパラメータをサーバーが必要とするため、ネゴシエーションが失敗しました。このエラーが起きると、TLS 接続が閉じられます。 0
inappropriate_fallback クライアントからの無効な接続の再試行に対する応答として、サーバーから送信されます。このエラーが起きると、TLS 接続が閉じられます。 0
user_cancelled プロトコル障害とは無関係の理由で、ユーザーが handshake をキャンセルしました。このエラーが起きると、TLS 接続が閉じられます。 0
missing_extension 提示された TLS バージョンまたは他のネゴシエートされたパラメータに対して送信が必須である拡張機能を含まない handshake メッセージを受信するエンドポイントによって送信されます。このエラーが起きると、TLS 接続が閉じられます。 0
unsupported_extension 特定の handshake メッセージに含めることが禁止されている拡張機能を含む handshake メッセージか、対応する ClientHello または CertificateRequest で最初に提示されなかった ServerHello または Certificate の拡張機能を含む handshake メッセージを受信したエンドポイントによって送信されます。このエラーが起きると、TLS 接続が閉じられます。 0
unrecognized_name 「server_name」拡張機能を通じてクライアントから提供された名前で識別できるサーバーが存在しない場合に、サーバーによって送信されます。TLS 拡張機能の定義をご覧ください。 0
bad_certificate_status_response サーバーから「status_request」拡張機能を通じて無効または許容できない OCSP レスポンスが提供された場合に、クライアントによって送信されます。TLS 拡張機能の定義をご覧ください。このエラーが起きると、TLS 接続が閉じられます。 0
load_balancer_configured_resource_limits_reached ロードバランサが、構成されたリソースの上限(最大接続数など)に達しました。 0

失敗した TLS 接続のログエントリ

バックエンドが選択される前にクライアントとロードバランサ間の TLS 接続が失敗すると、ログエントリにエラーが記録されます。バックエンド サービスは、さまざまなログ サンプルレートで構成できます。TLS 接続が失敗した場合、失敗した TLS 接続のログ サンプルレートは、バックエンド サービスの最大のサンプルレートとなります。たとえば、2 つのバックエンド サービスを構成し、ロギング サンプル レートを 0.30.5 に設定した場合、失敗した TLS 接続のログ サンプルレートは 0.5 となります。

失敗した TLS 接続は、次のログエントリの詳細を確認することで特定できます。

  • proxyStatus エラータイプは tls_alert_receivedtls_certificate_errortls_protocol_error、または connection_terminated です。
  • バックエンド情報はありません。

次のサンプルは、proxyStatus error フィールドを含む失敗した TLS ログエントリを示しています。

   json_payload:    {
   @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
   proxyStatus: "error="tls_alert_received"; details="server_to_client: handshake_failure""
   log_name: "projects/529254013417/logs/mockservice.googleapis.com%20name"
   }
   http_request {
    latency {
      nanos: 12412000
    }
    protocol: "HTTP/1.0"
    remote_ip: "127.0.0.2"
   }
  resource {
    type: "mock_internal_http_lb_rule"
    labels {
      backend_name: ""
      backend_scope: ""
      backend_scope_type: "UNKNOWN"
      backend_target_name: ""
      backend_target_type: "UNKNOWN"
      backend_type: "UNKNOWN"
      forwarding_rule_name: "l7-ilb-https-forwarding-rule-dev"
      matched_url_path_rule: "UNKNOWN"
      network_name: "lb-network"
      region: "REGION"
      target_proxy_name: "l7-ilb-https-proxy-dev"
      url_map_name: ""
    }
  }
  timestamp: "2023-08-15T16:49:30.850785Z"
  

認可ポリシー リクエスト ログ

Load Balancer ログエントリ JSON ペイロードの authz_info オブジェクトには、認可ポリシーに関する情報が含まれています。これらのポリシーによって許可または拒否されたトラフィックのログベースの指標を構成できます。認可ポリシーのログの詳細をご確認ください。

フィールド タイプ 説明
authz_info.policies[] オブジェクト リクエストに一致するポリシーのリスト。
authz_info.policies[].name 文字列 リクエストに一致する認可ポリシーの名前。

名前が空である理由は次のとおりです。

  • リクエストに一致する ALLOW ポリシーがないため、リクエストは拒否されます。
  • リクエストに一致する DENY ポリシーがないため、リクエストが許可されます。
authz_info.policies[].result 列挙型 結果は ALLOWED または DENIED のいずれかになります。
authz_info.policies[].details 文字列 詳細には次のものが含まれます。
  • allowed_as_no_deny_policies_matched_request
  • denied_as_no_allow_policies_matched_request
  • denied_by_authz_extension
  • denied_by_cloud_iap
authz_info.overall_result 列挙型 結果は ALLOWED または DENIED のいずれかになります。

ログの操作

Cloud Logging API を使用して、外部アプリケーション ロードバランサのログを操作できます。Logging API では、特定のフィールドが設定されたログをインタラクティブにフィルタリングできます。一致するログを Cloud Logging、Cloud Storage、BigQuery、Pub/Sub にエクスポートします。Logging API の詳細については、Logging API の概要をご覧ください。

モニタリング

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

モニタリング指標を使用すると、次のことができます。

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

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

アラート ポリシーを定義する

アラート ポリシーを作成して指標の値をモニタリングすると、指標が条件に違反した場合に通知できます。

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

    [アラート] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。

  2. 通知チャンネルを作成せずに通知を受け取る場合は、[EDIT NOTIFICATION CHANNELS] をクリックして、通知チャンネルを追加します。チャンネルを追加したら、[アラート] ページに戻ります。
  3. [アラート] ページで、[CREATE POLICY] をクリックします。
  4. 指標を選択するには、[指標を選択] メニューを開き、次の操作を行います。
    1. メニューを関連するエントリに限定するには、フィルタバーに「Regional External Application Load Balancer Rule」と入力します。結果が表示されない場合は、[アクティブなリソースと指標のみを表示] をオフに切り替えます。
    2. リソースの種類で、[リージョン外部アプリケーション ロードバランサのルール] を選択します。
    3. 指標カテゴリ指標を選択して、[適用] を選択します。
  5. [次へ] をクリックします。
  6. [Configure alert trigger] ページの設定によって、アラートがトリガーされるタイミングが決まります。条件タイプを選択し、必要に応じてしきい値を指定します。詳細については、指標しきい値のアラート ポリシーを作成するをご覧ください。
  7. [次へ] をクリックします。
  8. (省略可)アラート ポリシーに通知を追加するには、[通知チャネル] をクリックします。ダイアログで、メニューから 1 つ以上の通知チャンネルを選択し、[OK] をクリックします。
  9. (省略可)インシデントの自動クローズ期間を更新します。このフィールドは、指標データがない場合に Monitoring がインシデントを閉じるタイミングを決定します。
  10. (省略可)[Documentation] をクリックして、通知メッセージに追加する情報を入力します。
  11. [アラート名] をクリックして、アラート ポリシーの名前を入力します。
  12. [ポリシーを作成] をクリックします。
詳細については、アラートの概要をご覧ください。

Cloud Monitoring のカスタム ダッシュボードの定義

ロードバランサの指標用にカスタム Cloud Monitoring ダッシュボードを作成できます。

  1. Google Cloud コンソールで、[モニタリング] ページに移動します。

    [Monitoring] に移動

  2. [ダッシュボード] > [ダッシュボードを作成] を選択します。

  3. [グラフを追加] をクリックして、グラフのタイトルを指定します。

  4. 表示する時系列を指定するため、リソースタイプと指標タイプを選択します。

    1. [Resource & Metric] セクションでグラフをクリックし、[指標を選択] セクションで使用可能なオプションを選択します。
    2. リージョン外部アプリケーション ロードバランサの場合は、リソースタイプで [リージョン外部アプリケーション ロードバランサのルール] を選択します。
    3. [適用] をクリックします。
  5. モニタリング フィルタを指定するには、[フィルタ] > [フィルタを追加] をクリックします。

  6. [保存] をクリックします。

指標報告の頻度と保持

外部アプリケーション ロードバランサの指標は、1 分単位のバッチで Cloud Monitoring にエクスポートされます。モニタリング データは 6 週間保持されます。

ダッシュボードでは、1H(1 時間)、6H(6 時間)、1D(1 日)、1W(1 週間)、6W(6 週間)のデフォルト間隔でデータ分析の結果を確認できます。また、6 週間から 1 分までの間隔を任意に指定して手動で分析を行うこともできます。

モニタリング指標

外部アプリケーション ロードバランサの次の指標をモニタリングできます。

リージョン外部アプリケーション ロードバランサの次の指標が、Cloud Monitoring に報告されます。指標の先頭には loadbalancing.googleapis.com/ が付加されます。

指標 名前 説明
リクエスト数 https/external/regional/request_count リージョン外部アプリケーション ロードバランサによって処理されるリクエストの数。
リクエスト バイト数 https/external/regional/request_bytes クライアントからリージョン外部アプリケーション ロードバランサへのリクエストとして送信されたバイト数。
レスポンス バイト数 https/external/regional/response_bytes リージョン外部アプリケーション ロードバランサからクライアントへのレスポンスとして送信されたバイト数。
総レイテンシ https/external/regional/total_latencies

合計レイテンシの分布。合計レイテンシは、プロキシが受信したリクエストの最初のバイトから、プロキシが送信したレスポンスの最後のバイトまでの時間(ミリ秒単位)です。これには、プロキシがリクエストを処理する時間、プロキシからバックエンドにリクエストを送信する時間、バックエンドがリクエストを処理する時間、レスポンスがプロキシに返送される時間、プロキシがレスポンスを処理してクライアントにレスポンスを送信する時間などが含まれます。

クライアントとプロキシ間の RTT は含まれません。Connection: keep-alive を使った同じ接続上のリクエスト間の休止は測定に影響しません。この測定値は通常、Cloud Monitoring ビューで 95 パーセンタイルに縮小されます。

バックエンド レイテンシ https/external/regional/backend_latencies

バックエンドのレイテンシの分布。バックエンドのレイテンシは、バックエンドが受信したリクエストの最初のバイトから、プロキシが受信したレスポンスの最後のバイトまでの時間(ミリ秒単位)です。これには、プロキシからバックエンドにリクエストを送信する時間、バックエンドでリクエストを処理する時間、レスポンスをプロキシに返信する時間などが含まれます。

指標のディメンションのフィルタリング

外部アプリケーション ロードバランサの指標にフィルタを適用できます。

指標は、リージョン外部アプリケーション ロードバランサごとに集計されます。集計された指標は、resource.type="http_external_regional_lb_rule" の次のディメンションでフィルタリングできます。

プロパティ 説明
backend_name バックエンド インスタンス グループまたは NEG の名前。
backend_scope バックエンドの範囲。ゾーン名またはリージョン名です。backend_name が不明な場合はいつでも、UNKNOWN である可能性があります。
backend_scope_type バックエンドの範囲(REGION / ZONE)。backend_name が不明な場合はいつでも、UNKNOWN である可能性があります。
backend_target_name リクエストを処理するために選択されたバックエンドの名前。リクエストと一致する URL マップのパスルールまたはルートルールに基づいて選択されます。
backend_target_type バックエンド ターゲットのタイプ。BACKEND_SERVICE か、バックエンドが割り当てられていない場合は UNKNOWN が返されます。
backend_type バックエンド グループのタイプ。INSTANCE_GROUPNETWORK_ENDPOINT_GROUP のいずれかで、バックエンドが割り当てられていない場合は UNKNOWN が返されます。
forwarding_rule_name 転送ルール オブジェクトの名前。
matched_url_path_rule URL マップキーの一部として構成された URL マップ パスルールまたはルートルール。フォールバックとして UNMATCHED または UNKNOWN の場合もあります。
  • UNMATCHED は、どの URL パスルールにも一致しないリクエストを示しているので、デフォルトのパスルールを使用します。
  • UNKNOWN は内部エラーを表します。
network_name ロードバランサの VPC ネットワークの名前。
project_id このリソースに関連付けられた Google Cloud プロジェクトの ID
region ロードバランサが定義されているリージョン。
target_proxy_name 転送ルールで参照されるターゲット プロキシ オブジェクトの名前。
url_map_name バックエンド サービスを選択するように構成された URL マップ オブジェクトの名前。

次のステップ