このドキュメントでは、内部アプリケーション ロードバランサのロギングとモニタリングの指標について説明します。リージョン内部アプリケーション ロードバランサとクロスリージョン内部アプリケーション ロードバランサの両方のロギングとモニタリングの指標は同じです。
ロギング
ロギングは、バックエンド サービス単位で有効にできます。1 つの内部アプリケーション ロードバランサの URL マップで複数のバックエンド サービスを参照できます。このため、構成に応じて複数のバックエンド サービスでロギングを有効にする必要がある場合があります。
ログのサンプリングと収集
ロードバランサのバックエンド仮想マシン(VM)インスタンスによって処理されるリクエスト(および対応するレスポンス)がサンプリングされます。これらのサンプリングされたリクエストが処理され、ログが生成されます。logConfig.sampleRate パラメータに従って、ログエントリとして出力されるリクエストの割合を制御します。logConfig.sampleRate
が 1.0
(100%)の場合、すべてのリクエストのログが生成され、Cloud Logging に書き込まれます。
オプション フィールド
ログレコードには必須フィールドとオプション フィールドがあります。ログの内容に、オプション フィールドと必須フィールドの一覧を示します。すべての必須フィールドは常に含まれます。保持するオプション フィールドはカスタマイズできます。
[すべてのオプションのフィールドを含める] を選択すると、ログレコード形式のすべてのオプションのフィールドがフローログに含まれます。新しいオプション フィールドがレコード形式に追加されると、フローログに新しいフィールドが自動的に含まれます。
[すべてのオプションのフィールドを除外する] を選択した場合、オプション フィールドはすべて省略されます。
[カスタム] を選択した場合は、含めるオプション フィールド(
tls.protocol,tls.cipher
など)を指定できます。
オプション フィールドをカスタマイズする手順については、既存のバックエンド サービスでロギングを有効にするをご覧ください。
既存のバックエンド サービスでロギングを有効にする
リージョン内部アプリケーション ロードバランサの場合は、次の操作を行います。
コンソール
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
ロードバランサの名前をクリックします。
[
編集] をクリックします。[バックエンドの構成] をクリックします。
バックエンド サービスの横にある [
編集] をクリックします。[高度な構成(セッション アフィニティ、コネクション ドレインのタイムアウト)] をクリックします。
[ロギングを有効にする] をクリックします。
[サンプルレート] の値を選択します。
0.0
から1.0
までの数値を設定できます。0.0
はリクエストがログに記録されていないことを意味し、1.0
はリクエストの 100% がログに記録されることを意味します。デフォルト値は1.0
です。省略可: ログにすべてのオプション フィールドをすべて含めるには、[任意項目] セクションで [すべてのオプションのフィールドを含める] をクリックします。
バックエンド サービスの編集を終了するには、[更新] をクリックします。
ロードバランサの編集を終了するには、[更新] をクリックします。
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_MODE
がCUSTOM
に設定されている場合にのみ設定できます。
クロスリージョン内部アプリケーション ロードバランサの場合は、次の操作を行います。
コンソール
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
ロードバランサの名前をクリックします。
[
編集] をクリックします。[バックエンドの構成] をクリックします。
バックエンド サービスの横にある [
編集] をクリックします。[高度な構成(セッション アフィニティ、コネクション ドレインのタイムアウト)] をクリックします。
[ロギングを有効にする] をクリックします。
[サンプルレート] の値を選択します。
0.0
から1.0
までの数値を設定できます。0.0
はリクエストがログに記録されていないことを意味し、1.0
はリクエストの 100% がログに記録されることを意味します。デフォルト値は1.0
です。省略可: ログにすべてのオプション フィールドをすべて含めるには、[任意項目] セクションで [すべてのオプションのフィールドを含める] をクリックします。
バックエンド サービスの編集を終了するには、[更新] をクリックします。
ロードバランサの編集を終了するには、[更新] をクリックします。
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_MODE
がCUSTOM
に設定されている場合にのみ設定できます。
バックエンド サービスでロギングを有効にすると、Cloud Logging を使用して各 HTTP(S) リクエストがロギングされます。
ログの表示方法
ログを表示するには、Google Cloud コンソールで [ログ エクスプローラ] ページに移動します。
内部アプリケーション ロードバランサのログは、最初はネットワーク別に、次にリージョン別にインデックス化されます。
- すべての内部アプリケーション ロードバランサのログを表示するには、最初のプルダウン メニューで [内部アプリケーション ロードバランサ ルール] を選択します。
- 1 つのネットワークのログのみを表示するには、[内部アプリケーション ロードバランサのルール] を選択して、ネットワークの名前を選択します。
- ネットワークの 1 つのリージョンのみのログを表示するには、[内部アプリケーション ロードバランサのルール] > [
NETWORK
] > [REGION
] を選択します。
通常、ブール型のログフィールドは、フィールドの値が true
の場合にのみ表示されます。ブール フィールドの値が false
の場合、そのフィールドはログから省略されます。
ログフィールドには UTF-8 エンコードが適用されます。UTF-8 以外の文字列は、疑問符に置き換えられます。
リソースログ(resource.type="internal_http_lb_rule"
)のログベースの指標のエクスポートを構成できます。作成される指標は、内部アプリケーション ロードバランサ ルールのリソースに基づいています。このリソースは Cloud 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 オブジェクト | 必須 |
このログエントリを生成したモニタリング対象リソース。
たとえば、内部アプリケーション ロードバランサのモニタリング対象リソースの記述子は、リソースタイプが |
jsonPayload | オブジェクト (Struct 形式) | 必須 | JSON オブジェクトとして表されるログエントリ ペイロード。JSON オブジェクトには、次のフィールドが含まれています。
|
文字列 | 必須 |
値が空の文字列の場合、このフィールドはログに記録されません。これは、プロキシまたはバックエンドがエラーを返さない場合、または
|
|
文字列 | 必須 | 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 中にクライアントが証明書を提供した場合は |
clientCertChainVerified | ブール値 | 省略可 | 構成された |
clientCertError | 文字列 | 省略可 | エラー条件を表す事前定義の文字列。エラー文字列の詳細については、mTLS クライアント検証モードをご覧ください。 |
clientCertSha256Fingerprint | 文字列 | 省略可 | クライアント証明書の Base64 でエンコードされた SHA-256 フィンガープリント。 |
clientCertSerialNumber | 文字列 | 省略可 | クライアント証明書のシリアル番号。シリアル番号が 50 バイトを超える場合、文字列 |
clientCertValidStartTime | 文字列 | 省略可 | クライアント証明書が無効になる前のタイムスタンプ(RFC 3339 日付文字列形式)。例: |
clientCertValidEndTime | 文字列 | 省略可 | クライアント証明書が有効でなくなった後のタイムスタンプ(RFC 3339 日付文字列形式)。例: |
clientCertSpiffeId | 文字列 | 省略可 | サブジェクト代替名(SAN)フィールドの SPIFFE ID。値が無効であるか、2,048 バイトを超える場合、SPIFFE ID は空の文字列に設定されます。 SPIFFE ID が 2,048 バイトを超える場合、文字列 |
clientCertUriSans | 文字列 | 省略可 | URI 型の SAN 拡張機能のカンマ区切り Base64 エンコード リスト。SAN 拡張機能はクライアント証明書から抽出されます。
|
clientCertDnsnameSans | 文字列 | 省略可 | DNSName タイプの SAN 拡張機能のカンマ区切り Base64 エンコード リスト。SAN 拡張機能はクライアント証明書から抽出されます。
|
clientCertIssuerDn | 文字列 | 省略可 | Base64 でエンコードされた証明書の完全な発行者フィールド。
|
clientCertSubjectDn | 文字列 | 省略可 | Base64 でエンコードされた証明書の完全なサブジェクト フィールド。
|
clientCertLeaf | 文字列 | 省略可 | 証明書が検証に合格している確立済みの mTLS 接続のクライアント リーフ証明書。証明書のエンコードは RFC 9440 に準拠しています。バイナリ DER 証明書は Base64 を使用してエンコードされ、両側がコロンで区切られています(改行、スペース、Base64 以外の文字は使用されません)。
|
clientCertChain | 文字列 | 省略可 | クライアント証明書が検証に合格している確立済みの mTLS 接続のクライアント証明書チェーンの証明書のリスト。このリストはカンマ区切りで、標準の TLS 順序になっています(リーフ証明書は含みません)。証明書のエンコードは RFC 9440 に準拠しています。 Base64 エンコード前の |
proxyStatus エラー フィールド
proxyStatus
フィールドには、ロードバランサがエラーを返した理由を指定する文字列が含まれます。proxyStatus
フィールドには、proxyStatus error
と proxyStatus details
という 2 つの部分があります。このセクションでは、proxyStatus error
フィールドでサポートされている文字列について説明します。
proxyStatus error フィールドは、次のロードバランサに適用されます。
- リージョン外部アプリケーション ロードバランサ
- クロスリージョン内部アプリケーション ロードバランサ
- リージョン内部アプリケーション ロードバランサ
proxyStatus エラー | 説明 | 一般的に記録されるレスポンス コード |
---|---|---|
destination_unavailable
|
ロードバランサが、バックエンドが使用不可であると見なしています。たとえば、バックエンドとの通信が最近失敗したか、ヘルスチェックが失敗した場合などです。 | 500、503 |
connection_timeout
|
ロードバランサがバックエンドへの接続を開始しようとしてタイムアウトしました。 | 504 |
connection_terminated
|
完全なレスポンスを受信する前に、ロードバランサからバックエンドへの接続が終了しました。 この
|
0、502、503 |
connection_refused
|
ロードバランサからバックエンドへの接続が拒否されました。 | 502、503 |
connection_limit_reached
|
ロードバランサはバックエンドに対する接続数を制限するように構成されており、この上限を超えています。 この
|
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 error
と proxyStatus 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 つ以上含まれています。 たとえば、二重引用符( 詳しくは以下をご覧ください。 |
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 に、同じ Subject と Subject 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.3
と 0.5
に設定した場合、失敗した TLS 接続のログ サンプルレートは 0.5
となります。
失敗した TLS 接続は、次のログエントリの詳細を確認することで特定できます。
- proxyStatus エラータイプは
tls_alert_received
、tls_certificate_error
、tls_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 の場合もあります。
|
backend_target_name |
文字列 | リクエストを処理するために選択されたバックエンドの名前。リクエストと一致する URL マップのパスルールまたはルートルールに基づいて選択されます。 |
backend_target_type | 文字列 | バックエンド ターゲットのタイプ(BACKEND_SERVICE / UNKNOWN )。 |
backend_name |
文字列 | バックエンド インスタンス グループまたは NEG の名前。 |
backend_type |
文字列 | インスタンス グループ、NEG、不明のいずれかのバックエンドのタイプ。 Cloud Logging では、ロギングが無効になっている場合でも、 |
backend_scope |
文字列 |
バックエンドの範囲。ゾーン名またはリージョン名です。backend_name が不明な場合はいつでも、UNKNOWN である可能性があります。 |
backend_scope_type |
文字列 |
バックエンドの範囲(REGION /ZONE )。backend_name が不明な場合はいつでも、UNKNOWN である可能性があります。 |
backend_target_cross_project_id |
文字列 |
バックエンド ターゲット サービスまたはバケットのプロジェクト ID。このフィールドは、バックエンド ターゲット リソースが作成されたプロジェクトと url_map リソースが作成されたプロジェクトが異なる場合にのみ使用できます。 |
認可ポリシー リクエスト ログ
Load Balancer ログエントリ JSON ペイロードの authz_info
オブジェクトには、認可ポリシーに関する情報が含まれています。これらのポリシーによって許可または拒否されたトラフィックのログベースの指標を構成できます。
フィールド | 型 | 説明 |
---|---|---|
authz_info.policies[] |
オブジェクト | リクエストに一致するポリシーのリスト。 |
authz_info.policies[].name |
文字列 | リクエストに一致する認可ポリシーの名前。 名前が空である理由は次のとおりです。
|
authz_info.policies[].result |
列挙型 | 結果は ALLOWED または DENIED のいずれかになります。 |
authz_info.policies[].details |
文字列 | 詳細には次のものが含まれます。
|
authz_info.overall_result |
列挙型 | 結果は ALLOWED または DENIED のいずれかになります。 |
mTLS クライアント証明書検証のログを表示する
相互 TLS クライアント証明書の検証中に、閉じられた接続についてログに記録されたエラーを表示するには、次の操作を行います。
コンソール
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[クエリを表示] をクリックして、クエリエディタを有効にします。
または、[クエリ] フィールドに次の内容を貼り付けます。
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
[クエリを実行] をクリックします。
モニタリング
内部アプリケーション ロードバランサは、モニタリング データを Monitoring にエクスポートします。
モニタリング指標は次の目的で使用します。
- ロードバランサの構成、使用状況、パフォーマンスの評価
- 問題のトラブルシューティング
- リソースの使用率とユーザー エクスペリエンスの改善
Monitoring の事前定義されたダッシュボードに加えて、カスタム ダッシュボードを作成して、アラートをセットアップし、Monitoring API を使用して指標をクエリできます。
Cloud Monitoring の指標の表示
コンソール
Metrics Explorer を使用してモニタリング対象リソースの指標を表示するには、次の操作を行います。
-
Google Cloud コンソールで、leaderboard[Metrics Explorer] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。
- [指標] 要素の [指標を選択] メニューを開いてフィルタバーに「
Internal Application Load Balancer Rule
」と入力し、サブメニューを使用して特定のリソースタイプと指標を選択します。- [有効なリソース] メニューで、[Internal Application Load Balancer Rule] を選択します。
- 指標を選択するには、[Active metric categories] メニューと [Active metrics] メニューを使用します。
- [適用] をクリックします。
表示から時系列を削除するには、[フィルタ] 要素を使用します。
時系列を結合するには、[集計] 要素のメニューを使用します。たとえば、ゾーンに基づいて VM の CPU 使用率を表示するには、最初のメニューを [平均] に設定し、2 番目のメニューを [ゾーン] に設定します。
[集計] 要素の最初のメニューが [未集計] に設定されている場合は、すべての時系列が表示されます。[集計] 要素のデフォルト設定は、選択した指標タイプによって決まります。
- 割り当てと、1 日に 1 つのサンプルを報告するその他の指標については、次の操作を行います。
- [表示] ペインで、[ウィジェット タイプ] を [積み上げ棒グラフ] に設定します。
- 期間は少なくとも 1 週間に設定します。
アラート ポリシーを定義する
コンソール
アラート ポリシーを作成して指標の値をモニタリングすると、指標が条件に違反した場合に通知できます。
-
Google Cloud コンソールで、[notificationsアラート] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] の結果を選択します。
- 通知チャンネルを作成せずに通知を受け取る場合は、[EDIT NOTIFICATION CHANNELS] をクリックして、通知チャンネルを追加します。チャンネルを追加したら、[アラート] ページに戻ります。
- [アラート] ページで、[CREATE POLICY] をクリックします。
- 指標を選択するには、[指標を選択] メニューを開き、次の操作を行います。
- メニューを関連するエントリに限定するには、フィルタバーに「
Internal Application Load Balancer Rule
」と入力します。結果が表示されない場合は、[Show only active resources & metrics] をオフに切り替えます。 - [リソースの種類] で、[内部アプリケーション ロードバランサのルール] を選択します。
- 指標カテゴリと指標を選択して、[適用] を選択します。
- メニューを関連するエントリに限定するには、フィルタバーに「
- [次へ] をクリックします。
- [Configure alert trigger] ページの設定によって、アラートがトリガーされるタイミングが決まります。条件タイプを選択し、必要に応じてしきい値を指定します。詳細については、指標しきい値のアラート ポリシーを作成するをご覧ください。
- [次へ] をクリックします。
- (省略可)アラート ポリシーに通知を追加するには、[通知チャネル] をクリックします。ダイアログで、メニューから 1 つ以上の通知チャンネルを選択し、[OK] をクリックします。
- (省略可)インシデントの自動クローズ期間を更新します。このフィールドは、指標データがない場合に Monitoring がインシデントを閉じるタイミングを決定します。
- (省略可)[Documentation] をクリックして、通知メッセージに追加する情報を入力します。
- [アラート名] をクリックして、アラート ポリシーの名前を入力します。
- [Create Policy] をクリックします。
Monitoring カスタム ダッシュボードの定義
コンソール
内部アプリケーション ロードバランサの指標の上にカスタム Monitoring ダッシュボードを作成できます。
Google Cloud コンソールで [Monitoring] ページに移動します。
[ダッシュボード] > [CREATE DASHBOARD] を選択します。
[Add Chart] をクリックします。
グラフにタイトルを付けます。
指標とフィルタを選択します。指標のリソースタイプは、Internal HTTP/S Load Balancer です。
[保存] をクリックします。
指標報告の頻度と保持
ロードバランサの指標は、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-a 、europe-west1-b 、asia-east1 、UNKNOWN 。 |
PROXY_REGION | 内部アプリケーション ロードバランサ、クライアント、バックエンドのリージョン。例: us-central1 、europe-west1 、asia-east1 。 |
バックエンド | クライアント リクエストを処理したバックエンド インスタンス グループまたは NEG の名前。 |
BACKEND_TARGET | クライアント リクエストを処理したバックエンド サービスの名前。 |
MATCHED_URL_RULE | クライアント HTTP(S) リクエストのプレフィックスに一致する URL マップ パスルールまたはルートルール(最大 50 文字)。 |
Response code class fraction
指標はロードバランサ全体でサポートされています。これ以上の粒度はサポートされません。
次のステップ
- 内部アプリケーション ロードバランサのコンセプトについて理解する。
- 内部アプリケーション ロードバランサを作成する。
- ロードバランサで使用できる DNS 名オプションについては、内部ロード バランシングと DNS 名をご覧ください。