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

このドキュメントでは、内部アプリケーション ロードバランサのロギングとモニタリングの指標について説明します。リージョン内部アプリケーション ロードバランサとクロスリージョン内部アプリケーション ロードバランサの両方のロギングとモニタリングの指標は同じです。

ロギング

ロギングは、バックエンド サービス単位で有効にできます。1 つの内部アプリケーション ロードバランサの URL マップで複数のバックエンド サービスを参照できます。このため、構成に応じて複数のバックエンド サービスでロギングを有効にする必要がある場合があります。

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

Google Cloud は、ロードバランサのバックエンド仮想マシン(VM)インスタンスから送信されたパケットをサンプリングします。サンプリングされたパケットは、ログを生成するために処理されます。

すべてのパケットがサンプリングされるわけではありません。Google Cloud は、物理ホスト上のトラフィック量に応じてパケットのサブセットをサンプリングします。最も低いサンプリング レートは、1,024 パケット中 1 パケットです。サンプリング レートは Google Cloud によって動的に制御されます。サンプリング レートは調整できません。

パケット サンプリングは、ファイアウォール ルールと次のように相互作用します。

  • 下り(外向き)ファイアウォール ルールが適用される前にパケットがサンプリングされます。
  • 上り(内向き)ファイアウォール ルールが適用された後にパケットがサンプリングされます。

パケット サンプリングの後、Google Cloud はサンプリングされたパケットを次のように処理します。

  1. 集計: サンプリングされたパケットは 5 秒間隔で集計され、単一のフローエントリが生成されます。

  2. 構成可能な(セカンダリ)ログ サンプリング: 2 番目のサンプリング プロセスで、フローをサンプリングします。logConfig.sampleRate パラメータに従って、ログエントリとして出力されるフロー部分の割合を制御します。logConfig.sampleRate1.0(100%)の場合、サンプリングされたパケットがすべて処理されます。

  3. Logging への書き込み: ログエントリが Cloud Logging に書き込まれます。

オプション フィールド

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

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

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

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

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

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

リージョン内部アプリケーション ロードバランサの場合は、次の操作を行います。

コンソール

  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 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

ここで

  • --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. [高度な構成(セッション アフィニティ、コネクション ドレインのタイムアウト)] をクリックします。

  7. [ロギングを有効にする] をクリックします。

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

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

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

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

gcloud

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

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

ここで

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

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

ログの表示方法

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

内部アプリケーション ロードバランサのログは、最初はネットワーク別に、次にリージョン別にインデックス化されます。

  • すべての内部アプリケーション ロードバランサのログを表示するには、最初のプルダウン メニューで [内部アプリケーション ロードバランサ ルール] を選択します。
  • 1 つのネットワークのログのみを表示するには、[内部アプリケーション ロードバランサのルール] を選択して、ネットワークの名前を選択します。
  • ネットワークの 1 つのリージョンのみのログを表示するには、[内部アプリケーション ロードバランサのルール] > [NETWORK] > [REGION] を選択します。

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

ログフィールドには UTF-8 エンコードが適用されます。UTF-8 以外の文字列は、疑問符に置き換えられます。

リソースログ(resource.type="internal_http_lb_rule")のログベースの指標のエクスポートを構成できます。作成される指標は、内部アプリケーション ロードバランサ ルールのリソースに基づいています。このリソースは Cloud Monitoring ダッシュボードで使用できます。

[Monitoring] に移動

ログの内容

内部アプリケーション ロードバランサ ログエントリには、HTTP(S) トラフィックのモニタリングとデバッグに役立つ情報が含まれています。ログレコードには、すべてのログレコードのデフォルト フィールドである必須フィールドと、HTTP(S) トラフィックに関する追加情報を追加するオプション フィールドが含まれます。オプションのフィールドは、ストレージ コストを節約するために省略できます。ログエントリには次のタイプの情報が含まれています。

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

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

フィールド フィールドのタイプ: 必須または省略可 説明
logName 文字列 必須 このログエントリが属するログのリソース名。
"projects/PROJECT_ID/logs/requests" の形式です。
timestamp 文字列 必須 リクエストが開始された時刻。
severity LogSeverity 形式 必須 ログエントリの重大度。デフォルトは LogSeverity.DEFAULT です。
httpRequest HttpRequest オブジェクト 必須 ログに記録される HTTP(S) リクエストを記述する HttpRequest プロトコル。
trace 文字列 必須 ログエントリに関連付けられているトレースのリソース名。相対リソース名が含まれている場合、https://tracing.googleapis.com を基準とした相対的な名前になります。例: projects/PROJECT_ID/traces/06796866738c859f2f19b7cfb3214824

内部アプリケーション ロードバランサは、このフィールドをサポートしていません。

spanId 文字列 必須 ログエントリに関連付けられているトレース内のスパン ID。トレーススパンの場合、この文字列は Trace API v2 と同じ形式で、8 バイトの配列を 16 文字の 16 進数にエンコードした値(例: 000000000000004a)になります。

内部アプリケーション ロードバランサは、このフィールドをサポートしていません。

resource MonitoredResource オブジェクト 必須

このログエントリを生成したモニタリング対象リソース。

MonitoredResourceDescriptor オブジェクトは、型名とラベルのセットを使用して MonitoredResource オブジェクトのスキーマを記述します。

たとえば、内部アプリケーション ロードバランサのモニタリング対象リソースの記述子は、リソースタイプが internal_http_lb_rule であり、リソースラベルを使用して実際のリソースと属性を識別します。リソースラベルのリストについては、resource.type="internal_http_lb_rule" のリソースラベルをご覧ください。

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

proxyStatus フィールドには、内部アプリケーション ロードバランサが HttpRequest.status を返した理由を指定する文字列が保持されます。このフィールドにデータが入力されるのは、プロキシからエラーコードが返された場合のみです。

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

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

文字列 必須 backendTargetProjectNumber フィールドには、バックエンド サービスまたはバックエンド バケットのオーナーを識別するプロジェクト番号が保持されます。
文字列 必須 serviceDirectoryService フィールドには、Cloud FIT 障害が構成された Service Directory サービスの名前が保持されます。
文字列 必須 cloudFitExperiment フィールドには、Cloud FIT テストの名前が保持されます。
文字列 必須 cloudFitFault フィールドには、このリクエストパスに Cloud FIT 障害テストによって挿入された障害の名前が保持されます。
ServiceExtensionInfo 必須 serviceExtensionInfo フィールドには、ロードバランサから Service 拡張機能への gRPC ストリームに関する情報が格納されます。詳しくは、コールアウト拡張機能でログに記録される内容をご覧ください。
TlsDetails 省略可 tls フィールドには、クライアントと内部アプリケーション ロードバランサ間の接続の TLS メタデータを指定する TlsDetails が保持されます。このフィールドは、クライアントが TLS / SSL 暗号化を使用している場合にのみ使用できます。
MtlsDetails 省略可 mtls フィールドには、クライアントと内部アプリケーション ロードバランサ間の接続の mTLS メタデータを指定する MtlsDetails 値が保持されます。このフィールドは、ロードバランサがフロントエンド相互 TLS(mTLS)を使用している場合にのみ使用できます。

TlsDetails フィールドの形式

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

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 リクエスト ヘッダーが無効です。 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"
  

リソースラベル

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

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

インスタンス グループ、NEG、不明のいずれかのバックエンドのタイプ。

Cloud Logging では、ロギングが無効になっている場合でも、backend_typeUNKNOWN の場合はリクエストがログに記録されます。たとえば、ロードバランサがバックエンドを選択する前にクライアントがロードバランサへの接続を閉じると、backend_typeUNKNOWN に設定され、リクエストがログに記録されます。これらのログは、ロードバランサがバックエンドを選択できなかったために終了したクライアント リクエストについて有用なデバッグ情報を提供します。

backend_scope 文字列 バックエンドの範囲。ゾーン名またはリージョン名です。backend_name が不明な場合はいつでも、UNKNOWN である可能性があります。
backend_scope_type 文字列 バックエンドの範囲(REGION/ZONE)。backend_name が不明な場合はいつでも、UNKNOWN である可能性があります。
backend_target_cross_project_id 文字列 バックエンド ターゲット サービスまたはバケットのプロジェクト ID。このフィールドは、バックエンド ターゲット リソースが作成されたプロジェクトと url_map リソースが作成されたプロジェクトが異なる場合にのみ使用できます。

mTLS クライアント証明書検証のログを表示する

相互 TLS クライアント証明書の検証中に、閉じられた接続についてログに記録されたエラーを表示するには、次の操作を行います。

コンソール

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

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

  2. [クエリを表示] をクリックして、クエリエディタを有効にします。

  3. または、[クエリ] フィールドに次の内容を貼り付けます。FORWARDING_RULE_NAME は、転送ルールの名前に置き換えます。

    jsonPayload.statusDetails=~"client_cert"
    jsonPayload.@type="type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
    resource.labels.forwarding_rule_name=FORWARDING_RULE_NAME
    
  4. [クエリを実行] をクリックします。

モニタリング

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

モニタリング指標は次の目的で使用します。

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

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

Cloud Monitoring の指標の表示

コンソール

Metrics Explorer を使用してモニタリング対象リソースの指標を表示するには、次の操作を行います。

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

    Metrics Explorer に移動

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

  2. [指標] 要素の [指標を選択] メニューを開いてフィルタバーに「Internal Application Load Balancer Rule」と入力し、サブメニューを使用して特定のリソースタイプと指標を選択します。
    1. [有効なリソース] メニューで、[Internal Application Load Balancer Rule] を選択します。
    2. 指標を選択するには、[Active metric categories] メニューと [Active metrics] メニューを使用します。
    3. [適用] をクリックします。
  3. 表示から時系列を削除するには、[フィルタ] 要素を使用します。

  4. 時系列を結合するには、[集計] 要素のメニューを使用します。たとえば、ゾーンに基づいて VM の CPU 使用率を表示するには、最初のメニューを [平均] に設定し、2 番目のメニューを [ゾーン] に設定します。

    [集計] 要素の最初のメニューが [未集計] に設定されている場合は、すべての時系列が表示されます。[集計] 要素のデフォルト設定は、選択した指標タイプによって決まります。

  5. 割り当てと、1 日に 1 つのサンプルを報告するその他の指標については、次の操作を行います。
    1. [表示] ペインで、[ウィジェット タイプ] を [積み上げ棒グラフ] に設定します。
    2. 期間は少なくとも 1 週間に設定します。

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

コンソール

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

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

    [アラート] に移動

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

  2. 通知チャンネルを作成せずに通知を受け取る場合は、[EDIT NOTIFICATION CHANNELS] をクリックして、通知チャンネルを追加します。チャンネルを追加したら、[アラート] ページに戻ります。
  3. [アラート] ページで、[CREATE POLICY] をクリックします。
  4. 指標を選択するには、[指標を選択] メニューを開き、次の操作を行います。
    1. メニューを関連するエントリに限定するには、フィルタバーに「Internal 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. [Create Policy] をクリックします。
詳細については、アラート ポリシーをご覧ください。

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

コンソール

内部アプリケーション ロードバランサの指標の上にカスタム Monitoring ダッシュボードを作成できます。

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

    [Monitoring] に移動

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

  3. [Add Chart] をクリックします。

  4. グラフにタイトルを付けます。

  5. 指標とフィルタを選択します。指標のリソースタイプは、Internal HTTP/S Load Balancer です。

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

指標報告の頻度と保持

ロードバランサの指標は、1 分単位のバッチで Monitoring にエクスポートされます。モニタリング データは 6 週間保持されます。ダッシュボードでは、1H(1 時間)、6H(6 時間)、1D(1 日)、1W(1 週間)、6W(6 週間)のデフォルト間隔でデータ分析の結果を確認できます。また、6 週間から 1 分までの間隔を任意に指定して手動で分析を行うこともできます。

内部アプリケーション ロードバランサのモニタリング指標

内部アプリケーション ロードバランサの次の指標は Monitoring に報告されます。

指標 FQDN 説明
リクエスト数 loadbalancing.googleapis.com/https/internal/request_count 内部アプリケーション ロードバランサによって処理されるリクエストの数。
リクエスト バイト数 loadbalancing.googleapis.com/https/internal/request_bytes クライアントから内部アプリケーション ロードバランサへのリクエストとして送信されたバイト数。
レスポンス バイト数 loadbalancing.googleapis.com/https/internal/response_bytes 内部 HTTP(S) ロードバランサからクライアントへのレスポンスとして送信されたバイト数。
総レイテンシ loadbalancing.googleapis.com/https/internal/total_latencies レイテンシの分布(ミリ秒単位)。リクエストの最初のバイトがプロキシで受信された時点からレスポンスの最後のバイトがプロキシから送信された時点までのレイテンシ。
バックエンド レイテンシ loadbalancing.googleapis.com/https/internal/backend_latencies レイテンシの分布(ミリ秒単位)。プロキシからバックエンドにリクエストの最初のバイトが送信された時点から、バックエンドからのレスポンスの最後のバイトがプロキシで受信された時点までのレイテンシ。

内部アプリケーション ロードバランサ指標のディメンションのフィルタ

内部アプリケーション ロードバランサごとに指標が集計されます。集計された指標は、次のディメンション(*)でフィルタできます。

プロパティ 説明
BACKEND_SCOPE クライアント リクエストを処理したバックエンド グループの Google Cloud ゾーンまたはリージョン。バックエンド グループが割り当てられていない場合は、特殊文字列が返されます。例: us-central1-aeurope-west1-basia-east1UNKNOWN
PROXY_REGION 内部アプリケーション ロードバランサ、クライアント、バックエンドのリージョン。例: us-central1europe-west1asia-east1
バックエンド クライアント リクエストを処理したバックエンド インスタンス グループまたは NEG の名前。
BACKEND_TARGET クライアント リクエストを処理したバックエンド サービスの名前。
MATCHED_URL_RULE クライアント HTTP(S) リクエストのプレフィックスに一致する URL マップ パスルールまたはルートルール(最大 50 文字)。

Response code class fraction 指標はロードバランサ全体でサポートされています。これ以上の粒度はサポートされません。

次のステップ