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

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

ロギング

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

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

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

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

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

任意の項目

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

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

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

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

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

新しいバックエンド サービスでのロギングの有効化

コンソール

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

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

  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.cipher は、LOGGING_OPTIONAL_MODECUSTOM に設定されている場合にのみ設定できます。

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

コンソール

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

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

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

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

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

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

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

  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 Console で、[ロード バランシング] ページに移動します。

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

  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 | --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 フィールドは TlsDetails 形式で、TLS プロトコルと TLS 暗号が 1 つのフィールドに含まれています。これらのマルチ フィールドのフィールドについては、次のレコード形式の表で説明します。

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

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

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

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

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

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

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

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

TlsDetails フィールドの形式

フィールド フィールドの形式 フィールドのタイプ: 必須または省略可 説明
protocol string 省略可 クライアントがロードバランサとの接続を確立するために使用する TLS プロトコル。有効な値は、TLS 1.0, 1.1, 1.2, 1.3 または QUIC です。クライアントが TLS/SSL 暗号化を使用していない場合、この値は NULL に設定されます。
暗号 string 省略可 クライアントがロードバランサとの接続を確立するために使用する TLS 暗号。クライアントが HTTP(S) を使用していない場合、またはクライアントが TLS / SSL 暗号化を使用していない場合、この値は NULL に設定されます。

MtlsDetails フィールドの形式

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

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

clientCertChainVerified ブール値 省略可

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

clientCertError 文字列 省略可

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

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 の合計サイズが 16KB を超えると、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 接続の失敗の場合は空白です。

proxyStatus エラー フィールド

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

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

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

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

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

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

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

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

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

  • バックエンドがメンテナンス モードの場合、トラフィックをそのバックエンドに転送することはできません。
  • リクエストがローカルでレート制限されている場合。
  • Envoy が、メモリ不足などのエラー状態を処理している場合。
502、503
destination_not_found ロードバランサは、このリクエストに使用する適切なバックエンドを決定できません。たとえば、バックエンドが構成されていない可能性があります。 500、404
dns_error バックエンド ホスト名の IP アドレスを検出しようとしたときに、ロードバランサで DNS エラーが発生しました。 502、503
proxy_configuration_error ロードバランサで内部構成エラーが発生しました。 500
proxy_internal_error ロードバランサで内部エラーが発生しました。 0、500、502
proxy_internal_response ロードバランサがバックエンドへの接続を試行せずにレスポンスを生成しました。 問題の種類に応じた任意のレスポンス コード。たとえば、410 レスポンス コードは、支払いの滞納が原因でバックエンドを使用できないことを意味します。
http_response_timeout ロードバランサは、バックエンドからの完全なレスポンスの待機中に、構成されたバックエンド サービスのタイムアウトの上限に達しました。 504、408
http_request_error ロードバランサで HTTP 4xx エラーが発生し、クライアント リクエストに問題があることを示します。 400、403、405、406、408、411、413、414、415、416、417、または 429
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 キープアライブ タイムアウトをご覧ください。
0、408
backend_timeout

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

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

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

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

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

400、404
ip_detection_failed 元の IP アドレスを検出できませんでした。 任意のレスポンス コード。失敗の性質によって異なります。値は 400~599 にする必要があります。
request_body_too_large HTTP リクエストの本文がロードバランサでサポートされている最大長を超えています。 413、507
request_header_timeout ロードバランサが 5 秒以内に完全なリクエストを受信しなかったため、リクエスト ヘッダーがタイムアウトしました。 408、504
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 ロードバランサが、構成されたリソースの上限(最大接続数など)に達しました。 400、500、503

失敗した 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 enum 結果は ALLOWEDDENIED、のいずれかになります。
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 enum 結果は ALLOWED または DENIED のいずれかになります。

ログの操作

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

モニタリング

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

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

  • ロードバランサの構成、使用状況、パフォーマンスを評価する
  • 問題を解決する
  • リソースの使用率とユーザー エクスペリエンスを改善する

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

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

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

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

    [アラート] に移動

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

  2. 通知チャンネルを作成せずに通知を受け取る場合は、[EDIT NOTIFICATION CHANNELS] をクリックして、通知チャンネルを追加します。チャンネルを追加したら、[アラート] ページに戻ります。
  3. [アラート] ページで、[CREATE POLICY] をクリックします。
  4. 指標を選択するには、[指標を選択] メニューを開き、次の操作を行います。
    1. メニューを関連するエントリに限定するには、フィルタバーに「Regional External Application Load Balancer Rule」と入力します。結果が表示されない場合は、[Show only active resources & metrics] をオフに切り替えます。
    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. [ダッシュボード] > [CREATE DASHBOARD] を選択します。

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

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

    1. [Resource & Metric] セクションでグラフをクリックし、[指標を選択] セクションで使用可能なオプションを選択します。
    2. リージョン外部アプリケーション ロードバランサの場合は、リソースタイプで [リージョン外部アプリケーション ロードバランサ ルール] を選択します。
    3. [Apply](適用)をクリックします。
  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 レイテンシの分布(ミリ秒単位)。リクエストの最初のバイトがプロキシで受信された時点からレスポンスの最後のバイトがプロキシから送信された時点までのレイテンシ。
バックエンド レイテンシ 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 マップ オブジェクトの名前。

次のステップ