後端服務的記錄和指標

本文說明如何設定及使用 Cloud LoggingCloud Monitoring,搭配傳統版應用程式負載平衡器、全域外部應用程式負載平衡器和 Cloud CDN。

記錄

您可以啟用、停用及查看外部應用程式負載平衡器後端服務的記錄功能。對於含有後端 bucket的外部應用程式負載平衡器,系統會自動啟用記錄功能,且無法停用。

您可以為每個後端服務啟用或停用記錄功能。您可以設定是否要記錄所有要求,或是隨機取樣記錄一小部分。

請務必確認您沒有套用至外部應用程式負載平衡器的記錄排除項目。如要瞭解如何驗證是否允許 Cloud HTTP Load Balancer 記錄,請參閱排除篩選器

記錄取樣和收集

系統會對負載平衡器後端虛擬機器 (VM) 執行個體處理的要求 (和相應回應) 進行取樣。系統會處理這些取樣的要求,產生記錄。您可以根據 logConfig.sampleRate 參數控管要以記錄項目形式傳送的請求比例。如果 logConfig.sampleRate1.0 (100%),表示系統會為所有要求產生記錄,並將記錄寫入 Cloud Logging。

選填欄位

記錄包含必填欄位和選填欄位。「What is logged」一節列出哪些欄位為選填欄位,哪些欄位為必填欄位。系統一律會納入所有必填欄位。您可以自訂要保留哪些選用欄位。

  • 如果選取「包含所有選用欄位」,則記錄記錄格式中的所有選用欄位都會納入記錄。將新的選用欄位新增至記錄格式時,記錄會自動納入新欄位。

  • 如果選取「排除所有選填欄位」,系統就會略過所有選填欄位。

  • 如果選取「自訂」,您可以指定要納入的選用欄位,例如 tls.protocol,tls.cipher,orca_load_report.cpu_utilization,orca_load_report.mem_utilization

如要瞭解如何自訂選填欄位,請參閱「啟用新後端服務的記錄功能」。

啟用新後端服務的記錄功能

主控台

  1. 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。

    前往「負載平衡」

  2. 點選負載平衡器的名稱。

  3. 按一下「編輯」圖示

  4. 按一下「後端設定」

  5. 選取「Create a backend service」

  6. 填寫後端服務的必填欄位。

  7. 在「Logging」專區中,勾選「Enable logging」核取方塊。

  8. 設定「Sample rate」(取樣率) 分數。您可以設定從 0.01.0 的數字,其中 0.0 表示不會記錄任何要求,1.0 則代表有 100% 的要求會記錄完畢。預設值為 1.0

  9. 選用:如要將所有選用欄位納入記錄,請在「選用欄位」部分中按一下「包含所有選用欄位」

  10. 點選「更新」,完成編輯後端服務。

  11. 按一下「更新」,完成負載平衡器的編輯作業。

gcloud:全域模式

使用 gcloud compute backend-services create 指令建立後端服務並啟用記錄功能。

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

gcloud compute backend-services create 指令支援下列欄位:

  • --global 表示後端服務是全域服務。請將這個欄位用於與全域外部應用程式負載平衡器搭配使用的後端服務。
  • --enable-logging 可為該後端服務啟用記錄功能。
  • --logging-sample-rate 可讓您指定介於 0.01.0 之間的值,其中 0.0 表示不會記錄任何要求,1.0 則代表有 100% 的要求會記錄完畢。這個欄位僅適用於 --enable-logging 參數。啟用記錄功能但將取樣率設為 0.0,等同於停用記錄功能。預設值為 1.0
  • --logging-optional 可讓您指定要納入記錄中的選用欄位:

    • INCLUDE_ALL_OPTIONAL 來納入所有選填欄位。

    • EXCLUDE_ALL_OPTIONAL (預設) 可排除所有選填欄位。

    • CUSTOM 包含您在 OPTIONAL_FIELDS 中指定的選填欄位自訂清單。

  • --logging-optional-fields 可讓您指定要納入記錄的選用欄位清單,並以半形逗號分隔。

    舉例來說,只有在 LOGGING_OPTIONAL_MODE 設為 CUSTOM 時,才能設定 tls.protocol,tls.cipher。如果您使用自訂指標,且想記錄 ORCA 負載報表的元素,請將 LOGGING_OPTIONAL_MODE 設為 CUSTOM,並指定 OPTIONAL_FIELDS 欄位中必須記錄的元素。例如:orca_load_report.cpu_utilization,orca_load_report.mem_utilization

啟用現有後端服務的記錄功能

主控台

  1. 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。

    前往「負載平衡」

  2. 點選負載平衡器的名稱。

  3. 按一下「編輯」圖示

  4. 按一下「後端設定」

  5. 按一下後端服務旁的 「Edit」(編輯)

  6. 在「Logging」專區中,勾選「Enable logging」核取方塊。

  7. 在「Sample rate」(取樣率) 欄位中,設定取樣機率。您可以設定從 0.01.0 的數字,其中 0.0 表示不會記錄任何要求,1.0 則代表有 100% 的要求會記錄完畢。預設值為 1.0

  8. 點選「更新」,完成編輯後端服務。

  9. 按一下「更新」,完成負載平衡器的編輯作業。

gcloud:全域模式

使用 gcloud compute backend-services update 指令啟用現有後端服務的記錄功能。

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

其中

  • --global 表示後端服務是全域服務。請將這個欄位用於與全域外部應用程式負載平衡器搭配使用的後端服務。
  • --enable-logging 可為該後端服務啟用記錄功能。
  • --logging-sample-rate 可讓您指定介於 0.01.0 之間的值,其中 0.0 表示不會記錄任何要求,1.0 則代表有 100% 的要求會記錄完畢。這個值僅在使用 --enable-logging 參數時有作用。啟用記錄功能但將取樣率設為 0.0,等同於停用記錄功能。預設值為 1.0

gcloud:傳統模式

使用 gcloud compute backend-services update 指令啟用現有後端服務的記錄功能。

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

其中

  • --global 表示後端服務是全域服務。請將這個欄位用於與傳統版應用程式負載平衡器搭配使用的後端服務。
  • --enable-logging 可為該後端服務啟用記錄功能。
  • --logging-sample-rate 可讓您指定介於 0.01.0 之間的值,其中 0.0 表示不會記錄任何要求,1.0 則代表有 100% 的要求會記錄完畢。這個值僅在使用 --enable-logging 參數時有作用。啟用記錄功能但將取樣率設為 0.0,等同於停用記錄功能。預設值為 1.0

停用或修改現有後端服務的記錄功能

主控台

  1. 前往 Google Cloud 控制台的「Load Balancing」(負載平衡) 頁面。

    前往「負載平衡」

  2. 點選負載平衡器的名稱。

  3. 按一下「編輯」圖示

  4. 按一下「後端設定」

  5. 按一下後端服務旁的 「Edit」(編輯)

  6. 如要完全停用記錄功能,請在「Logging」部分取消勾選「Enable logging」核取方塊。

  7. 如果您保持啟用記錄功能,即可設定不同的「Sample rate」(取樣率) 分數。您可以設定從 0.01.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 \
    --global \
    --no-enable-logging

其中

  • --global 表示後端服務是全域服務。請將這個欄位用於與全域外部應用程式負載平衡器搭配使用的後端服務。
  • --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.01.0 之間的值,其中 0.0 表示不會記錄任何要求,1.0 則代表有 100% 的要求會記錄完畢。這個值僅在使用 --enable-logging 參數時有作用。啟用記錄功能但將取樣率設為 0.0,等同於停用記錄功能。預設值為 1.0
  • --logging-optional 可讓您指定要納入記錄中的選用欄位:

    • INCLUDE_ALL_OPTIONAL 來納入所有選填欄位。

    • EXCLUDE_ALL_OPTIONAL (預設) 可排除所有選填欄位。

    • CUSTOM 包含您在 OPTIONAL_FIELDS 中指定的選填欄位自訂清單。

  • --logging-optional-fields 可讓您指定要納入記錄的選用欄位清單,並以半形逗號分隔。

    舉例來說,只有在 LOGGING_OPTIONAL_MODE 設為 CUSTOM 時,才能設定 tls.protocol,tls.cipher。如果您使用自訂指標,且想要記錄 ORCA 負載報表的元素,請將 LOGGING_OPTIONAL_MODE 設為 CUSTOM,並指定 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 \
    --logging-sample-rate=VALUE

gcloud:傳統模式

使用 gcloud compute backend-services update 指令停用後端服務的記錄功能。

完全停用記錄功能

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --no-enable-logging

其中

  • --global 表示後端服務是全域服務。請將這個欄位用於與傳統版應用程式負載平衡器搭配使用的後端服務。
  • --no-enable-logging 可停用該後端服務的記錄功能。

修改記錄取樣率

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

其中

  • --global 表示後端服務是全域服務。請將這個欄位用於與傳統版應用程式負載平衡器搭配使用的後端服務。
  • --logging-sample-rate 可讓您指定介於 0.01.0 之間的值,其中 0.0 表示不會記錄任何要求,1.0 則代表有 100% 的要求會記錄完畢。這個值僅在使用 --enable-logging 參數時有作用。啟用記錄功能但將取樣率設為 0.0,等同於停用記錄功能。

查看記錄


如要直接在 Google Cloud 控制台按照逐步指南操作,請按一下「Guide me」(逐步引導)

逐步引導


系統會依序按照轉送規則網址對應為 HTTP(S) 記錄建立索引。

如要查看記錄,請前往「Logs Explorer」頁面:

前往「Logs Explorer」

  • 如要查看所有記錄,請在「Resource」篩選器選單中,依序選取「Cloud HTTP Load Balancer」>「All forwarding rules」

  • 如要查看單一轉送規則的記錄,請選取單一轉送規則名稱。

  • 如要查看某個網址對應的記錄,請依序選取轉送規則和網址對應。

「布林」類型的記錄欄位通常只會在欄位的值為 true 時才會顯示。如果布林欄位的值為 false,則記錄檔會省略該欄位。

系統會對記錄檔欄位強制採用 UTF-8 編碼。非 UTF-8 字元的字元都會替換為問號。針對傳統版應用程式負載平衡器和全域外部應用程式負載平衡器,您可以使用資源記錄 (resource.type="http_load_balancer") 匯出記錄指標。系統會根據「應用程式負載平衡器規則 (記錄指標)」資源 (l7_lb_rule) 建立指標,該資源會顯示於 Cloud Monitoring 資訊主頁下方,而不是 https_lb_rule 資源下方。

記錄內容

外部應用程式負載平衡器記錄項目包含的資訊實用,有助於監控 HTTP(S) 流量及執行偵錯作業。記錄包含必要欄位,這些欄位是每個記錄的預設欄位。

記錄檔包含選用欄位,可提供 HTTP(S) 流量的其他資訊。如不需要,也可以跳過選填欄位,節省儲存空間費用。

某些記錄欄位採用多欄位格式,也就是指定欄位會包含多項資料。舉例來說,tls 欄位採用 TlsInfo 格式,其中包含 earlyDataRequest 欄位。下表說明這些多欄位格式的欄位。

欄位 欄位格式 欄位類型:必要或選填 說明
severity
insertID
logName
LogEntry 必填 記錄項目中所述的一般欄位。
時間戳記 string (Timestamp 格式) 選用 第一層 GFE 收到要求的時間。
httpRequest HttpRequest 必填 用於記錄 HTTP 要求的常用通訊協定。

HttpRequest.protocol 未為 resource.type="http_load_balancer" 填入資料

resource MonitoredResource 必填

MonitoredResource 是與記錄檔項目相關聯的資源類型。

MonitoredResourceDescriptor 會使用類型名稱和一組標籤,描述 MonitoredResource 物件的結構定義。詳情請參閱「資源標籤」。

jsonPayload object (Struct format) 必填 以 JSON 物件表示的記錄項目酬載。JSON 物件包含下列欄位:
  • statusDetails
  • backendTargetProjectNumber
  • overrideResponseCode
  • errorService
  • errorBackendStatusDetails
  • authzPolicyInfo
  • loadBalancingScheme
  • tls
  • orca_load_report
字串 必填 statusDetails 欄位會包含字串,說明負載平衡器為何傳回 HTTP 狀態碼。如要進一步瞭解這些記錄字串,請參閱「statusDetails HTTP 成功訊息」和「statusDetails HTTP 失敗訊息」。
字串 必填 backendTargetProjectNumber 欄位會保留建立後端目標 (後端服務或後端 bucket) 的專案編號。這個欄位的格式為 "projects/PROJECT_NUMBER"。這項資訊僅適用於使用自訂錯誤回應的全域外部應用程式負載平衡器。
整數 必填 overrideResponseCode 會保留套用至傳送至用戶端的回應的覆寫回應代碼。這項資訊僅適用於使用自訂錯誤回應的全域外部應用程式負載平衡器。
字串 必填 errorService 欄位會保留提供自訂錯誤回應的後端服務。這項資訊僅適用於使用自訂錯誤回應的全域外部應用程式負載平衡器。
字串 必填 errorBackendStatusDetails 欄位會保留傳送至用戶端的最終回應的 statusDetails。這項資訊僅適用於使用自訂錯誤回應的全域外部應用程式負載平衡器。
AuthzPolicyInfo 必填 authzPolicyInfo 欄位會儲存授權政策結果的相關資訊。這項資訊僅適用於已啟用 授權政策的全域外部應用程式負載平衡器。詳情請參閱 授權政策記錄的內容
字串 選用 只有在您使用傳統版應用程式負載平衡器遷移功能時,才會填入 loadBalancingScheme 欄位。這個欄位會保留字串,說明用於將要求轉送至哪個負載平衡配置。可能的值為 EXTERNALEXTERNAL_MANAGED
TlsInfo 必填

tls 欄位會保留 TlsInfo 欄位,該欄位會指定用戶端與負載平衡器之間連線的 TLS 中繼資料。只有在用戶端使用 TLS/SSL 加密時,才能使用這個欄位。

使用 --logging-optional-fields 參數指定必須記錄的元素:

  • 選用:tls.protocol
  • 選用:tls.cipher
  • 必要項目:tls.earlyDataRequest

無法--logging-optional-fields 設為 tls,以便指定所有元素。

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-fields 設為 orca_load_report,指定所有元素都必須記錄。

TlsInfo 欄位格式

欄位 欄位格式 欄位類型:必要或選填 說明
protocol 字串 選用 用戶端用來與負載平衡器建立連線的 TLS 通訊協定。可能的值為 TLSv1TLSv1.1TLSv1.2TLSv1.3QUIC。如果用戶端未使用 TLS/SSL 加密,這個值會設為 NULL
cipher 字串 選用 用戶端用於與負載平衡器建立連線的 TLS 加密。如果用戶端未使用 HTTP(S),或未使用 TLS/SSL 加密,則會將此值設為 NULL
earlyDataRequest 布林值 必填 這項要求會在 TLS 握手中加入早期資料。

資源標籤

下表列出 resource.type="http_load_balancer" 的資源標籤。

欄位 類型 說明
backend_service_name 字串 後端服務的名稱。
forwarding_rule_name 字串 轉送規則物件的名稱。
project_id 字串 與此資源相關聯的 Google Cloud 專案 ID。
target_proxy_name 字串 轉送規則所參照的目標 Proxy 物件名稱。
url_map_name 字串 設定用來選取後端服務的網址對應物件名稱。
zone 字串 負載平衡器執行的區域。區域為 global

statusDetails HTTP 成功訊息

statusDetails (成功) 意義 常見隨附回應代碼
byte_range_caching 透過 Cloud CDN 位元組範圍快取提供 HTTP 要求。 可能出現任何可快取的回應碼
response_from_cache 從 Cloud CDN 快取提供 HTTP 要求。 可能出現任何可快取的回應碼
response_from_cache_validated 從通過後端驗證的 Cloud CDN 快取項目設定傳回碼。 可能出現任何可快取的回應碼
response_sent_by_backend 成功將 HTTP 要求經由 Proxy 傳送至後端,且後端傳回回應。 在後端執行的軟體會設定 HTTP 回應碼。

statusDetails HTTP 失敗訊息

statusDetails (失敗) 意義 常見的隨附狀態碼
aborted_request_due_to_backend_early_response 後端提早傳送含有狀態碼的回應,因此已取消含有主體的要求。已將回應轉送給用戶端。 已終止要求。 4XX5XX
backend_connection_closed_after_partial_response_sent 在將部分回應傳送給用戶端後,後端連線意外關閉。

後端執行的軟體會設定 HTTP 狀態碼。HTTP 狀態碼 0 (零) 表示後端傳送的 HTTP 標頭不完整。

如果 HTTP(S) 連線已升級為 WebSocket 連線,則 HTTP 狀態碼為 101

backend_connection_closed_before_data_sent_to_client 在將回應經由 Proxy 傳送至用戶端前,後端意外關閉其負載平衡器連線。

502、503

如果 HTTP(S) 連線已升級為 WebSocket 連線,則 HTTP 狀態碼為 101

backend_early_response_with_non_error_status 在收到整個要求主體前,後端將非錯誤狀態碼 (1XX2XX) 傳送給要求。 502503
backend_interim_response_not_supported 在不支援臨時回應的情況中,後端傳送臨時 1XX 狀態碼給要求。

502503

backend_response_corrupted 後端傳送的 HTTP 回應主體的區塊傳輸編碼無效或毀損。 根據毀損的性質,可能出現任何狀態碼。通常是 502503
backend_response_headers_too_long 後端傳送的 HTTP 回應標頭超過允許上限。詳情請參閱「外部應用程式負載平衡器的標頭大小」一節。 502503
backend_timeout

後端在產生回應時逾時。

針對 WebSocket 連線:

  • 對於全域外部應用程式負載平衡器,當 GFE 在後端服務逾時後關閉閒置狀態的 WebSocket 連線時,系統會產生狀態碼。
  • 對於傳統應用程式負載平衡器,當 GFE 在後端服務逾時後,在閒置或活動狀態下關閉 WebSocket 連線時,系統會產生狀態碼。

502503

如果 HTTP(S) 連線已升級為 WebSocket 連線,則 HTTP 狀態碼為 101

banned_by_security_policy 這項要求遭到 Google Cloud Armor 以費率為準的封鎖規則禁止。 429
body_not_allowed 用戶端傳送含有主體的 HTTP 要求,但使用的 HTTP 方法不允許有主體。 400
byte_range_caching_aborted 負載平衡器先前收到的回應指出資源可快取且支援位元組範圍。Cloud CDN 收到不一致的回應 (例如,狀態碼與預期的 206 Partial Content 不同)。這是在嘗試使用位元組範圍要求執行快取填補作業時發生的情況。因此,負載平衡器已取消對用戶端的回應。 2XX
byte_range_caching_forwarded_backend_response 負載平衡器先前收到的回應指出資源可快取且支援位元組範圍。Cloud CDN 收到不一致的回應 (例如,狀態碼與預期的 206 Partial Content 不同)。這是在嘗試使用位元組範圍要求執行快取填補作業時發生的情況。負載平衡器隨後將不一致的回應轉送給用戶端。

從後端傳回;可能出現任何狀態碼。

byte_range_caching_retrieval_abandoned 用戶端已取消 Cloud CDN 所起始的位元組範圍要求或驗證要求。

從後端傳回;可能出現任何狀態碼。

byte_range_caching_retrieval_from_backend_failed_after_partial_response Cloud CDN 所起始的位元組範圍要求或驗證要求發生錯誤。如需詳細後端狀態,請參閱對應的 Cloud Logging 記錄項目,瞭解 Cloud CDN 所起始的要求。 2XX
cache_lookup_failed_after_partial_response 發生內部錯誤,因此負載平衡器無法從 Cloud CDN 快取提供完整回應。 2XX
cache_lookup_timeout_after_partial_response Cloud CDN 快取查詢串流逾時,因為用戶端並未及時擷取內容。 2XX
client_disconnected_after_partial_response 在負載平衡器傳送部分回應後,用戶端連線已中斷。

從後端傳回;可能出現任何狀態碼。

如果 HTTP(S) 連線已升級為 WebSocket 連線,則 HTTP 狀態碼為 101

client_disconnected_before_any_response 在負載平衡器傳送任何回應前,用戶端連線已中斷。

0

如果 HTTP(S) 連線已升級為 WebSocket 連線,則 HTTP 狀態碼為 101

client_timed_out 由於對要求或回應進行 Proxy 處理時缺乏進度,Google 前端 (GFE) 因閒置而中斷用戶端連線。 0408
client_cert_invalid_rsa_key_size 用戶端葉狀憑證或中繼憑證的 RSA 金鑰大小無效。詳情請參閱「關閉連線的記錄錯誤」。 0
client_cert_unsupported_elliptic_curve_key 用戶端或中繼憑證使用不支援的橢圓曲線。詳情請參閱「關閉連線的記錄錯誤」。 0
client_cert_unsupported_key_algorithm 用戶端或中繼憑證使用非 RSA 或非 ECDSA 演算法。詳情請參閱「關閉連線的記錄錯誤」。 0
client_cert_pki_too_large 用於驗證的 PKI 包含超過十張中繼憑證,這些憑證共用相同的主體和主體公開金鑰資訊。詳情請參閱「已關閉連線的記錄錯誤」。 0
client_cert_chain_max_name_constraints_exceeded 用於驗證的中繼憑證有超過十個名稱限制。詳情請參閱「關閉連線的記錄錯誤」。 0
client_cert_chain_invalid_eku 用戶端憑證或其核發者沒有包含 clientAuth擴充金鑰用途。詳情請參閱「關閉連線的記錄錯誤」。 0
client_cert_validation_timed_out 驗證憑證鏈結時超過時間限制。 詳情請參閱「關閉連線的記錄錯誤」。 0
client_cert_validation_search_limit_exceeded 嘗試驗證憑證鏈結時,已達到深度或迭代限制。詳情請參閱「關閉連線的記錄錯誤」。 0
client_cert_validation_not_performed 您已設定 mTLS,但未設定 TrustConfig。詳情請參閱「關閉連線的記錄錯誤」。 0
client_cert_not_provided 在握手期間,用戶端未提供要求的憑證。詳情請參閱「關閉連線的記錄錯誤」。 0
client_cert_validation_failed 使用 MD4、MD5 和 SHA-1 等雜湊演算法時,用戶端憑證無法通過 TrustConfig 的驗證。詳情請參閱「關閉連線的記錄錯誤」。 0
config_not_found

負載平衡器缺少專案設定。這可能會間歇性發生,尤其是在您變更設定並新增資源後。

另一個可能導致錯誤的原因是第一層 GFE 無法連線至第二層 GFE。這可能是因為內部錯誤 (例如正在進行的部署作業、負載平衡器超載,或間歇性設定問題) 所致。

這些錯誤是暫時性的,且符合SLA。不過,如果錯誤率超過 0.01%,請與Google Cloud 支援團隊聯絡,尋求進一步協助。

404502503
direct_response 負載平衡器已覆寫這項要求,並傳回固定回應。 視問題的性質而定,您可能會看到任何 HTTP 狀態碼。舉例來說,HTTP 410 狀態碼表示後端因未繳款而無法使用。
denied_by_security_policy 由於有 Google Cloud Armor 安全性政策,負載平衡器已拒絕這個要求。 在安全性政策中設定。
error_uncompressing_gzipped_body 解壓縮以 gzip 格式壓縮的 HTTP 回應時發生錯誤。 502503
failed_to_connect_to_backend 負載平衡器無法連線至後端。這包括連線階段的逾時。 502503
failed_to_pick_backend 負載平衡器無法挑選健康狀態良好的後端來處理要求。 502503
failed_to_negotiate_alpn 負載平衡器和後端無法交涉要用來在 TLS 上彼此溝通的應用程式層通訊協定 (例如 HTTP/2)。 502503
headers_too_long 要求標頭超過系統規定的上限。 413
http_version_not_supported HTTP 版本不受支援。僅支援 HTTP 0.9、1.0、1.1 和 2.0。 400
internal_error 負載平衡器發生內部錯誤。通常代表負載平衡器基礎架構中的暫時性錯誤。重試查詢。 4XX
invalid_external_origin_endpoint 外部後端的設定無效。查看網際網路 NEG 設定,確認其指定的 FQDN/IP 位址和通訊埠有效。 4XX
invalid_request_headers

從用戶端收到的 HTTP 要求標頭,至少包含一個不符合適用 HTTP 規格規定的字元。

舉例來說,標頭欄位名稱若包含雙引號 ("),或是標準 ASCII 範圍以外的任何字元 (也就是任何位元組 >= 0x80),都會無效。

如需詳細資訊,請參閱:

400
invalid_http2_client_header_format 來自用戶端的 HTTP/2 標頭無效。詳情請參閱 invalid_request_headers 400
invalid_http2_client_request_path

來自用戶端的 HTTP/2 要求路徑至少包含一個不符合 URI 規範的字元。

詳情請參閱「3.3. 路徑」一節

400
multiple_iap_policies 您無法合併多個 Identity-Aware Proxy (IAP) 政策。如果您已將 IAP 政策套用至後端服務,並將另一項政策套用至無伺服器物件,請移除其中一個政策,然後再試一次。無伺服器物件包括 App Engine、Cloud Run 和 Cloud Run 函式。 500
malformed_chunked_body 要求主體並未以正確的方式進行區塊編碼。 411
request_loop_detected 負載平衡器偵測到要求迴圈。這個迴圈可能是由於後端將要求轉送回負載平衡器的設定錯誤所造成。 502503
required_body_but_no_content_length HTTP 要求需要主體,但要求標頭並未包含內容長度或傳輸編碼區塊標頭。 400403411
secure_url_rejected 在明文 HTTP/1.1 連線上收到含有 https:// 網址的要求。 400
server_cert_chain_exceeded_limit 伺服器憑證鏈結過長 (包含的伺服器憑證中繼憑證超過 10 個)。 502503

server_cert_chain_invalid_eku

伺服器憑證含有 Extended Key Usage (EKU) 副檔名欄位,但該欄位不含 serverAuth

server_cert_chain_max_name_constraints_exceeded

用於驗證的中繼憑證有超過 10 個名稱限制。 502503
server_cert_exceeded_size_limit 伺服器憑證酬載 (包括任何中繼憑證) 過大 (超過 16 KB)。 503
server_cert_invalid_rsa_key_size

伺服器或中介憑證的 RSA 金鑰大小無效。

不會執行驗證。

RSA 金鑰的長度可介於 2048 至 4096 位元之間。

503
server_cert_not_provided 伺服器在握手期間未提供要求的憑證。 503
server_cert_pki_too_large

用於驗證的 PKI 包含超過十張共用相同主體和主體公開金鑰資訊的中繼憑證。

不會執行驗證。

503
server_cert_trust_config_not_found 找不到相符的 TrustConfig 503
server_cert_unsupported_elliptic_curve_key

伺服器或中繼憑證使用不支援的橢圓曲線。

不會執行驗證。

有效的曲線為 P-256 和 P-384。

503
server_cert_unsupported_key_algorithm

伺服器或中繼憑證使用非 RSA 或非 ECDSA 演算法。

不會執行驗證。

503
server_cert_validation_internal_error 驗證憑證鏈結時發生內部錯誤。 503
server_cert_validation_not_performed

您未設定 TrustConfig 資源,就設定了 mTLS。

503
server_cert_validation_search_limit_exceeded

嘗試驗證憑證鏈結時,已達到深度或迭代限制。

憑證鏈的深度上限為十層,包括根憑證和伺服器憑證。迭代次數上限為 100 (檢查憑證以驗證伺服器憑證鏈結)。

503
server_cert_validation_timed_out 嘗試驗證憑證鏈結時超過時間限制。 503
server_cert_validation_unavailable 服務無法執行憑證鏈結驗證。 503
ssl_certificate_san_verification_failed 負載平衡器無法在符合設定主機名稱的後端提供的 SSL 憑證中找到主體別名 (SAN)。 502503
ssl_certificate_chain_verification_failed 後端提供的安全資料傳輸層 (SSL) 憑證無法通過 SSL 憑證驗證。 502503
throttled_by_security_policy 這項要求遭到 Google Cloud Armor 節流規則封鎖。 429
unsupported_method 用戶端提供不支援的 HTTP 要求方法。 400
unsupported_100_continue 用戶端要求在未支援的通訊協定中加入了「Expect: 100-continue」標頭。 400
upgrade_header_rejected 用戶端 HTTP 要求包含 Upgrade 標頭且遭到拒絕。 400
websocket_closed WebSocket 連線已關閉。 101
websocket_handshake_failed WebSocket 握手失敗。 根據交握失敗的性質,可能出現任何狀態碼。
request_body_too_large HTTP 要求主體超過後端支援的上限。不適用於 VM 後端。 413
handled_by_identity_aware_proxy 這個回應是由 Identity-Aware Proxy 在允許存取權之前,驗證用戶端身分時產生。

200302400401403500502503

429 (受 IAP 節流)

serverless_neg_routing_failed 無法調度無伺服器 NEG 要求。如果無法存取 NEG 中指定的區域,或是找不到資源名稱 (例如 Cloud Run 函式名稱),就會發生這個錯誤。 404502503
fault_filter_abort 如果客戶已設定錯誤篩選器,且系統為指定要求觸發錯誤篩選器,就可能發生此錯誤。 值必須介於 200599 之間。
early_data_rejected

透過 TLS 早期資料傳送的要求無效。

這可能發生於下列情況,但不限於:

  • TargetHttpsProxy 的 TLS 早期資料已設為 STRICT,但要求包含查詢參數。
  • TargetHttpsProxy 的 TLS 早期資料已設為 STRICTPERMISSIVE,但要求使用非冪等 HTTP 方法 (例如 POST 或 PUT)。
425

查看 mTLS 用戶端憑證驗證記錄

如要在雙向 TLS 用戶端憑證驗證期間查看已記錄的已關閉連線錯誤,請完成下列步驟。

控制台查詢

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往「Logs Explorer」

  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. 點選「執行查詢」

授權政策要求記錄

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 結果可以是 ALLOWEDDENIED

Google Cloud Armor 記錄

statusDetail HTTP 失敗訊息的資料表包含一些適用於 Google Cloud Armor 的訊息。如要進一步瞭解 Google Cloud Armor 記錄的內容,請參閱「使用要求記錄」一文。

共用虛擬私有雲部署作業的記錄

應用程式負載平衡器記錄和指標通常會匯出至含有轉送規則的專案。因此,服務管理員 (也就是建立後端服務的專案擁有者或使用者) 預設不會有權存取負載平衡器的記錄和指標。您可以使用 IAM 角色,將這些權限授予服務管理員。如要進一步瞭解可用的身分與存取權管理角色,以及提供存取權的步驟,請參閱「授予 Monitoring 存取權」。

與記錄檔互動

您可以使用 Cloud Logging API 與外部應用程式負載平衡器記錄互動。Logging API 可讓您透過多種互動方式篩選已設定特定欄位的記錄。它會將符合條件的記錄匯出至 Cloud Logging、Cloud Storage、BigQuery 或 Pub/Sub。如要進一步瞭解 Logging API,請參閱「Logging API 總覽」。

監控

負載平衡器會將監控資料匯出至「監控」

您可以使用監控指標執行下列操作:

  • 評估負載平衡器的設定、用量和效能
  • 排解問題
  • 改善資源利用率和使用者體驗

指標回報頻率與保留期

外部應用程式負載平衡器的指標會以 1 分鐘的精細度批次匯出至 Cloud Monitoring,而監控資料則會保留 6 週。

資訊主頁會以 1H (一小時)、6H (六小時)、1D (一天)、1W (一週) 和 6W (六週) 的預設間隔時間提供資料分析。您可以手動要求以 6W 到 1 分鐘之間的任何間隔時間進行資料分析。

監控指標

您可以監控外部應用程式負載平衡器的下列指標。

下列全域外部應用程式負載平衡器指標會回報至 Cloud Monitoring。這些指標會在開頭加上 loadbalancing.googleapis.com/

指標 名稱 說明
要求數量 https/request_count 外部應用程式負載平衡器提供的要求數量
要求位元組數 https/request_bytes_count 以要求形式從用戶端傳送至外部應用程式負載平衡器的位元組數
回應位元組數 https/response_bytes_count 以回應形式從外部應用程式負載平衡器傳送至用戶端的位元組數
總延遲時間 https/total_latencies

總延遲時間的分布情形。總延遲時間是指 Proxy 收到要求的第一個位元組,到 Proxy 傳送回應的最後一個位元組之間的時間,以毫秒為單位。包括:Proxy 處理要求所需的時間、從 Proxy 傳送至後端的時間、後端處理要求所需的時間、回應傳回 Proxy 所需的時間,以及 Proxy 處理回應並將回應傳送至用戶端所需的時間。

不包含用戶端和 Proxy 之間的 RTT。此外,在使用 Connection: keep-alive 的相同連線上,要求之間的暫停不會影響測量結果。在 Cloud Monitoring 檢視畫面中,這種測量通常會縮減至第 95 個百分位數。

對於 WebSocket 連線,這個欄位是指連線的整個時間長度。*

範例:負載平衡器每秒有 1 個來自英國的要求 (全部都有 100 毫秒的延遲時間),且每秒有 9 個來自美國的要求 (全部都有 50 毫秒的延遲時間)。在某一分鐘內,有 60 個來自 UK 的要求,以及 540 個來自 US 的要求。Monitoring 指標會保留所有維度的分布情形。您可以要求下列資訊:

  • 中位數整體延遲時間 (300/600):50 毫秒
  • 中位數 UK 延遲時間 (30/60):100 毫秒
  • 第 95 個百分位數整體延遲時間 (570/600):100 毫秒
前端 RTT https/frontend_tcp_rtt

前端 RTT 的分布情形。前端 RTT 是指資料從用戶端傳送至 Proxy 再傳回所需的時間 (以毫秒為單位)。包括要求從用戶端傳送至 Proxy,再從 Proxy 傳送回用戶端所需的時間。這項值不會在連線的生命週期中更新。舉例來說,使用 3 方握手動作設定 (TCP) 連線,需要 1.5 次 RTT。

處理要求時,負載平衡器會取樣並計算資料在用戶端和 Proxy 之間來回傳輸所需的時間,然後記錄經過平滑處理的 RTT 值。平滑 RTT 是一種演算法,可處理 RTT 評估中可能發生的變化和異常情形。

後端延遲時間 https/backend_latencies

後端延遲時間的分布情形。後端延遲時間是指後端收到要求的第一個位元組,到 Proxy 收到回應的最後一個位元組之間的時間 (以毫秒為單位)。包括:從 Proxy 傳送至後端的要求所需時間、後端處理要求所需時間,以及將回應傳回 Proxy 所需時間。

回應碼類別分數 各個回應碼類別 (2XX4XX...) 中外部應用程式負載平衡器回應總數的分數。在「監控」中,這個值僅適用於預設資訊主頁。自訂資訊主頁無法提供。您可以使用 Monitoring API 為其設定快訊。
後端要求數量 https/backend_request_count 從外部應用程式負載平衡器傳送至後端的要求數量。
後端要求位元組數 https/backend_request_bytes_count 以要求形式從外部應用程式負載平衡器傳送至後端的位元組數。
後端回應位元組數 https/backend_response_bytes_count 以回應形式從後端 (包括快取) 傳送至外部應用程式負載平衡器的位元組數。

*如要監控 WebSocket 連線,請建立專門用於 WebSocket 的後端服務。

前端 RTT 與後端延遲時間的總和可能不小於或等於總延遲時間。原因在於,雖然我們在確認 HTTP 回應時,透過通訊端從 GFE 到用戶端對 RTT 進行輪詢,但我們使用核心報表功能進行某些測量,且無法保證核心會有指定 HTTP 回應的 RTT 測量。最後會得到平滑 RTT 值,這也是受到先前 HTTP 回應、SYN/ACK 和安全資料傳輸層 (SSL) 交握的影響,但這些因素不會影響目前的 HTTP 要求實際時間。

篩選指標的維度

您可以為外部應用程式負載平衡器的指標套用篩選器。

系統會針對每個傳統版應用程式負載平衡器和全域外部應用程式負載平衡器匯總指標。您可以依據下列維度篩選 resource.type="http_load_balancer"resource.type="https_lb_rule" 的匯總指標。請注意,並非所有維度都適用於所有指標。

屬性 說明
backend_scope 提供連線的後端服務執行個體群組的 Google Cloud 範圍 (地區或區域)。

如果沒有任何可用的執行個體群組,或如果要求是由其他實體提供,則會顯示下列其中一個值,而不是後端服務執行個體群組的地區或區域。

  • FRONTEND_5XX:在 GFE 能夠選取後端之前,發生內部錯誤。GFE 將 5XX 傳回用戶端。
  • INVALID_BACKEND:GFE 找不到健康狀態良好的後端來指派要求,因此傳回 5XX 回應給要求者。
  • NO_BACKEND_SELECTED:在選取後端或發生網址重新導向前,發生錯誤或其他中斷問題。
  • MULTIPLE_BACKENDS:要求可能是由多個後端提供。當 Cloud CDN 已從快取中提供部分要求,並且已將一或多個位元組範圍要求傳送至後端時,就可能發生這種情況。使用 backend_scope 細目資料,以視覺化方式查看每個負載平衡器至後端的要求。

選擇這個細分方式時,圖表會顯示後端指標 (負載平衡器至後端),而不是顯示前端指標 (用戶端至負載平衡器)。

backend_type

為用戶端要求提供服務的後端群組名稱。如果未指派後端,則會傳回 INSTANCE GROUPNETWORK_ENDPOINT_GROUPUNKNOWN。如果沒有可用的後端群組,或要求是由其他實體提供,則會顯示下列其中一個值,而不是後端群組。

  • FRONTEND_5XX:在 GFE 能夠選取後端前,發生內部錯誤。GFE 將 5XX 傳回用戶端。
  • INVALID_BACKEND:GFE 找不到健康狀態良好的後端來指派要求,因此傳回 5XX 回應給要求者。
  • NO_BACKEND_SELECTED:在選取後端或發生網址重新導向前,發生錯誤或其他中斷問題。
  • MULTIPLE_BACKENDS:要求可能是由多個後端提供。當 Cloud CDN 已從快取中提供部分要求,並且已將一或多個位元組範圍要求傳送至後端時,就可能發生這種情況。使用 backend_scope 細目資料,以視覺化方式查看每個負載平衡器至後端的要求。
backend_target_type 處理要求的後端服務名稱。如果未指派後端,可以是 BACKEND_SERVICEBACKEND_BUCKETUNKNOWN;如果在選取後端或發生網址重新導向前發生錯誤或其他中斷問題,則可以是 NO_BACKEND_SELECTED
matched_url_path_rule 符合 HTTP(S) 要求前置字串的網址對應路徑規則 (最多 50 個字元)。
forwarding_rule_name 用戶端用來傳送要求的轉送規則名稱。
url_map_name

網址對應路徑規則或轉送規則,設定為網址對應鍵的一部分。可以把 UNMATCHEDUNKNOWN 當做備用值。

  • UNMATCHED 是指要求沒有相符的網址路徑規則,因此 url_map_name 會使用預設路徑規則。
  • UNKNOWN 表示內部錯誤。
target_proxy_name 轉送規則所參照的目標 HTTP(S) Proxy 物件名稱。
backend_target_name 後端目標的名稱。目標可以是後端服務或後端值區。如果未指派後端,系統會傳回 UNKNOWN
backend_name 後端執行個體群組、值區或 NEG 的名稱。如果未指派後端,系統會傳回 UNKNOWN;如果在選取後端或發生網址重新導向前,發生錯誤或其他中斷問題,則會傳回 NO_BACKEND_SELECTED
backend_scope_type

後端群組範圍的類型。如果在選取後端或發生網址重新導向之前發生錯誤或其他中斷情形,或是其他可能的 backend_type 輸出,則可以是 GLOBALREGIONZONEMULTIPLE_BACKENDSNO_BACKEND_SELECTED

使用區塊快取時,會使用 MULTIPLE_BACKENDS。系統會將多個查詢傳送至相同的後端,針對不同的資料區塊支援單一用戶端要求。

proxy_continent 終止 HTTP(S) 連線的 HTTP(S) GFE 所在大洲,例如 AmericaEuropeAsia
protocol 用戶端使用的通訊協定,可選值為 HTTP/1.0HTTP/1.1HTTP/2.0QUIC/HTTP/2.0UNKNOWN
response_code 要求的 HTTP 狀態碼。
response_code_class 要求的 HTTP 狀態碼類別:2003004005000 (如果沒有則為空白)。
cache_result 透過 Proxy 服務 HTTP 要求的快取結果:HITMISSDISABLEDPARTIAL_HIT (針對部分從快取提供,部分從後端提供的請求) 或 UNKNOWN
client_country 發出 HTTP 要求的用戶端國家/地區,例如 United StatesGermany
load_balancing_scheme 使用的負載平衡架構。如果使用傳統版應用程式負載平衡器,這個值為 EXTERNAL。如果使用全域外部應用程式負載平衡器,則值為 EXTERNAL_MANAGED

後續步驟