區域性外部應用程式負載平衡器的記錄與監控功能

本文說明如何搭配區域外部應用程式負載平衡器,設定及使用 Cloud LoggingCloud Monitoring

記錄

您可以啟用、停用及查看外部應用程式負載平衡器後端服務的記錄功能。

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

請務必確認您沒有適用於外部應用程式負載平衡器的記錄排除項目。如要瞭解如何確認系統允許 Cloud HTTP Load Balancer 記錄,請參閱「記錄接收器篩選器」。

記錄取樣和收集

系統會取樣負載平衡器後端虛擬機器 (VM) 執行個體所處理的要求和相應的回應。取樣的要求經過處理後,就會產生記錄。您可以根據 logConfig.sampleRate 欄位,控制以記錄項目形式發出的要求比例。如果 logConfig.sampleRate1.0 (100%),表示產生的記錄涵蓋「所有要求」,並寫入 Cloud Logging。

選填欄位

記錄包含必填欄位和選填欄位。如需必填和選填欄位的清單,請參閱「記錄內容」一節。所有必填欄位一律會包含,選填欄位則可自訂是否要保留。

  • 如果選取「include all optional」(包含所有選填欄位),記錄會包含記錄格式中的所有選填欄位。記錄格式新增選填欄位時,記錄會自動納入這些新欄位。

  • 如果選取「exclude all optional」(排除所有選填欄位),所有選填欄位皆會省略。

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

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

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

控制台

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

    前往「Load balancing」(負載平衡)

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

  3. 按一下 「Edit」(編輯)

  4. 按一下「Backend Configuration」(後端設定)

  5. 選取「Create a backend service」(建立後端服務)

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

  7. 在「Logging」(記錄) 部分,勾選「Enable logging」(啟用記錄功能) 核取方塊。

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

  9. 選用:如要在記錄中納入所有選填欄位,請在「Optional fields」(選填欄位) 部分,按一下「Include all optional fields」(包含所有選填欄位)

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

  11. 點選「Update」(更新),完成編輯負載平衡器。

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.01.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 可讓您以半形逗號分隔的清單,指定要納入記錄的選填欄位。

    舉例來說,只有在 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」(負載平衡) 頁面。

    前往「Load balancing」(負載平衡)

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

  3. 按一下 「Edit」(編輯)

  4. 按一下「Backend Configuration」(後端設定)

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

  6. 在「Logging」(記錄) 部分,勾選「Enable logging」(啟用記錄功能) 核取方塊。

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

  8. 選用:如要在記錄中納入所有選填欄位,請在「Optional fields」(選填欄位) 部分,按一下「Include all optional fields」(包含所有選填欄位)

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

  10. 點選「Update」(更新),完成編輯負載平衡器。

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.01.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 時,才能設定這個值。如果您使用自訂指標,並想記錄 ORCA 負載報表的元素,請將 LOGGING_OPTIONAL_MODE 設為 CUSTOM,並在 OPTIONAL_FIELDS 欄位指定須記錄的元素。例如 orca_load_report.cpu_utilization,orca_load_report.mem_utilization

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

控制台

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

    前往「Load balancing」(負載平衡)

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

  3. 按一下 「Edit」(編輯)

  4. 按一下「Backend Configuration」(後端設定)

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

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

  7. 如果保持啟用記錄功能,即可設定不同的「Sample rate」(取樣率) 分數。您可以設定從 0.01.0 的數字,0.0 表示不會記錄任何要求,1.0 則代表會記錄所有要求。預設值為 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 \
    --region=REGION \
    --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 則表示會記錄所有要求。這個值只在使用 --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

將記錄選用模式從「CUSTOM」(自訂) 更新為其他模式

gcloud compute backend-services update BACKEND_SERVICE \
    --region=REGION \
    --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 \
    --region=REGION \
    --logging-sample-rate=VALUE

查看記錄

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

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

前往「Logs Explorer」

  • 如要查看所有記錄,請在「Resource」(資源) 篩選器選單,依序選取「Cloud HTTP Load Balancer」(Cloud HTTP 負載平衡器) >「All forwarding rules」(所有轉送規則)

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

  • 如要查看特定網址對應的記錄,請選取轉送規則,然後選取網址對應。

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

記錄欄位會強制採用 UTF-8 編碼。非 UTF-8 字元都會替換為問號。對於區域性外部應用程式負載平衡器,您可以使用資源記錄 (resource.type="http_external_regional_lb_rule") 匯出以記錄為準的指標

記錄內容

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

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

某些記錄欄位採用多欄位格式,也就是指定欄位會包含多項資料。舉例來說,tls 欄位採用 TlsInfo 格式,也就是一個欄位同時包含 TLS 通訊協定和 TLS 密碼。以下記錄格式表說明這些多欄位格式的欄位。

欄位 欄位格式 欄位類型:必填或選填 說明
severity
insertID
timestamp
logName
LogEntry 必填 記錄項目中說明的一般欄位。
httpRequest HttpRequest 必填 記錄 HTTP 要求的常見通訊協定。
資源 MonitoredResource 必填

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

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

jsonPayload 物件 (struct 格式) 必填 以 JSON 物件表示的記錄項目酬載。JSON 物件包含下列欄位:
  • proxyStatus
  • tls
  • backendTargetProjectNumber
  • mtls
  • authzPolicyInfo
  • backendNetworkName
  • orca_load_report
字串 必填

proxyStatus 欄位包含字串,說明區域外部應用程式負載平衡器為何傳回 HttpRequest.status

如果值為空字串,系統不會記錄該欄位。如果 Proxy 或後端未傳回狀態碼,或傳回的狀態碼不是 04xx5xx,就可能發生這種情況。

proxyStatus 欄位包含兩個部分:

AuthzPolicyInfo 必填 authzPolicyInfo 欄位會儲存授權政策結果的資訊。這項資訊僅適用於已啟用 授權政策的區域性外部應用程式負載平衡器。詳情請參閱「授權政策記錄內容」。
TlsInfo 選用

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

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

  • tls.protocol
  • tls.cipher

--logging-optional-fields 設為 tls 並「不能」指定所有元素。

MtlsInfo 選用

mtls 欄位會保留 MtlsInfo 值,指定用戶端與負載平衡器之間連線的 mTLS 中繼資料。只有在負載平衡器使用前端雙向 TLS (mTLS) 時,才會顯示這個欄位。

字串 必填 backendNetworkName 欄位會指定後端的 VPC 網路。
OrcaLoadReport 選填

orca_load_report 欄位包含後端傳回的部分或所有 ORCA 負載報表元素。只有在後端傳回 ORCA 負載報表,且您已將負載平衡器設為記錄 ORCA 負載報表時,才會顯示這個欄位。

使用 --logging-optional-fields 參數指定須記錄 ORCA 負載報表的哪些元素:

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

您也可以將 --logging-optional-fields 設為 orca_load_report,指定必須記錄所有元素。

TlsInfo 欄位格式

欄位 欄位格式 欄位類型:必填或選填 說明
protocol 字串 選填 用戶端用來與負載平衡器建立連線的 TLS 通訊協定。可能的值為 TLSv1TLSv1.1TLSv1.2TLSv1.3QUIC。如果用戶端未使用 TLS/SSL 加密,這個值會設為 NULL
cipher 字串 選填 用戶端用來與負載平衡器建立連線的 TLS 加密。如果用戶端未使用 HTTP(S) 或 TLS/SSL 加密,這個值會設為 NULL

MtlsInfo 欄位格式

欄位 欄位格式 欄位類型:必填或選填 說明
clientCertPresent bool 選用

true,如果用戶端在 TLS 交握期間提供憑證;否則為 false

clientCertChainVerified bool 選用

true 如果已根據設定的 TrustStore 驗證用戶端憑證鏈結,否則為 false

clientCertError 字串 選用

代表錯誤情況的預先定義字串。如要進一步瞭解錯誤字串,請參閱「用戶端驗證模式」。

clientCertSha256Fingerprint 字串 選用

用戶端憑證的 Base64 編碼 SHA-256 指紋。

clientCertSerialNumber 字串 選用

用戶端憑證的序號。 如果序號長度超過 50 個位元組,系統會將 client_cert_serial_number_exceeded_size_limit 字串新增至 client_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。如果值無效或超過 2048 個位元組,SPIFFE ID 會設為空字串。

如果 SPIFFE ID 長度超過 2048 個位元組,系統會將 client_cert_spiffe_id_exceeded_size_limit 字串加到 client_cert_error

clientCertUriSans 字串 選用

以逗號分隔的 Base64 編碼清單,列出 URI 類型的 SAN 擴充功能。系統會從用戶端憑證擷取 SAN 擴充功能。 SPIFFE ID 不會包含在 client_cert_uri_sans 欄位中。

如果 client_cert_uri_sans 欄位長度超過 512 個位元組,系統會將 client_cert_uri_sans_exceeded_size_limit 字串加到 client_cert_error,並將以半形逗號分隔的清單設為空字串。

clientCertDnsnameSans 字串 選用

以逗號分隔的 Base64 編碼清單,列出 DNSName 類型的 SAN 擴充功能。系統會從用戶端憑證擷取 SAN 擴充功能。

如果 client_cert_dnsname_sans 欄位長度超過 512 個位元組,系統會將 client_cert_dnsname_sans_exceeded_size_limit 字串加到 client_cert_error,並將以半形逗號分隔的清單設為空字串。

clientCertIssuerDn 字串 選用

憑證中 Base64 編碼的完整簽發者欄位。

如果 client_cert_issuer_dn 欄位長度超過 512 個位元組,系統會在 client_cert_error 中加入 client_cert_issuer_dn_exceeded_size_limit 字串,並將 client_cert_issuer_dn 設為空字串。

clientCertSubjectDn 字串 選用

憑證中 Base64 編碼的完整「主體」欄位。

如果 client_cert_subject_dn 欄位長度超過 512 個位元組,系統會在 client_cert_error 中加入 client_cert_subject_dn_exceeded_size_limit 字串,並將 client_cert_subject_dn 設為空字串。

clientCertLeaf 字串 選用

已建立 mTLS 連線的用戶端葉子憑證,且該憑證已通過驗證。憑證編碼符合 RFC 9440:二進位 DER 憑證會使用 Base64 編碼 (不含換行符、空格或 Base64 字母以外的其他字元),並以兩側的半形冒號做為分隔符。

如果 client_cert_leaf 超過 16 KB (未編碼),系統會將字串 client_cert_validated_leaf_exceeded_size_limit 新增至 client_cert_error,並將 client_cert_leaf 設為空字串。

clientCertChain 字串 選用

以半形逗號分隔的憑證清單,採用標準 TLS 順序,列出已建立 mTLS 連線的用戶端憑證鏈,其中用戶端憑證已通過驗證,但不包括葉憑證。憑證編碼符合 RFC 9440 規定。

如果 client_cert_leafclient_cert_chain 在 Base64 編碼前的總大小超過 16 KB,系統會將 client_cert_validated_chain_exceeded_size_limit 字串加到 client_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 字串 根據與要求相符的網址對應路徑規則或轉送規則,選擇用於處理要求的後端名稱。
backend_target_type 字串 後端目標的類型。可以是 BACKEND_SERVICE,如未指派後端,則為 UNKNOWN
backend_type 字串 後端群組的類型。可以是 INSTANCE_GROUPNETWORK_ENDPOINT_GROUP,如未指派後端,則為 UNKNOWN
forwarding_rule_name 字串 轉送規則物件的名稱。
matched_url_path_rule 字串 網址對應路徑規則或路由規則,設為網址對應鍵的一部分。可以把 UNMATCHEDUNKNOWN 當做備用值。
  • UNMATCHED 是指要求沒有相符的網址路徑規則,因此會使用預設路徑規則。
  • UNKNOWN 表示發生內部錯誤或 TLS 連線失敗。
network_name 字串 負載平衡器的 VPC 網路名稱。
project_id 字串 與這個資源相關聯的 Google Cloud 專案 ID。
region 字串 定義負載平衡器的區域。
target_proxy_name 字串 轉送規則所參照的目標 Proxy 物件名稱。
url_map_name 字串 設為用來選取後端服務的網址對應物件名稱。如果 TLS 連線失敗url_map_name 會是空白。

proxyStatus 錯誤欄位

proxyStatus 欄位包含的字串會說明負載平衡器為何傳回錯誤。「proxyStatus」欄位包含兩個部分:「proxyStatus error」和「proxyStatus details」。本節說明 proxyStatus error 欄位支援的字串。

proxyStatus 錯誤欄位適用於下列負載平衡器:

  • 區域性外部應用程式負載平衡器
  • 跨區域內部應用程式負載平衡器
  • 區域性內部應用程式負載平衡器
proxyStatus 錯誤 說明 常見的隨附回應代碼
destination_unavailable 負載平衡器會將後端視為無法使用。舉例來說,最近嘗試與後端通訊時發生錯誤,或是健康狀態檢查失敗。 500503
connection_timeout 負載平衡器嘗試開啟與後端的連線時逾時。 504
connection_terminated

負載平衡器與後端的連線在收到完整回應前終止。

在下列任一情況下,系統都會傳回此 proxyStatus error

  • 負載平衡器與後端的連線在收到完整回應前已結束。
  • TLS 連線在 SSL 交握時失敗,且用戶端未與負載平衡器建立連線。

0502503
connection_refused 負載平衡器連線至後端遭拒。 502503
connection_limit_reached

負載平衡器已設定連線至後端的連線數上限,且已超過該上限。

在下列任一情況下,系統都會傳回 proxyStatus error

  • 如果任何後端處於維護模式,流量就無法轉送至後端。
  • 如果要求在本機受到頻率限制。
  • Envoy 會處理記憶體不足等錯誤狀況。
502503
destination_not_found 負載平衡器無法判斷要使用哪個後端來處理這項要求。舉例來說,後端可能未設定。 500404
dns_error 負載平衡器嘗試尋找後端主機名稱的 IP 位址時,發生 DNS 錯誤。 502503
proxy_configuration_error 負載平衡器發生內部設定錯誤。 500
proxy_internal_error 負載平衡器發生內部錯誤。這個錯誤可能是因為管理連線的 Proxy 預定重新啟動所致。 0500502
proxy_internal_response 負載平衡器產生回應,但未嘗試連線至後端。 根據問題類型,可能出現任何狀態碼。舉例來說,410 狀態碼表示後端因欠費而無法使用。
http_response_timeout 負載平衡器等待後端傳回完整回應時,達到設定的後端服務逾時上限。 504408
http_request_error 負載平衡器發生 HTTP 4xx 錯誤,表示用戶端要求有問題。 400403405406408411413414415416417429
http_protocol_error 負載平衡器與後端通訊時發生 HTTP 通訊協定錯誤。 502
tls_protocol_error 負載平衡器在 TLS 交握期間發生 TLS 錯誤。 0
tls_certificate_error 負載平衡器在驗證伺服器或用戶端提供的憑證時發生錯誤 (啟用 mTLS 時)。 0
tls_alert_received 負載平衡器在 TLS 交握期間遇到嚴重 TLS 快訊。 0

proxyStatus 詳細資料欄位

proxyStatus 欄位包含的字串會說明負載平衡器為何傳回錯誤。「proxyStatus」欄位包含兩個部分:「proxyStatus error」和「proxyStatus details」。proxyStatus details 欄位為選填欄位,只有在有額外資訊時才會顯示。 本節說明 proxyStatus details 欄位支援的字串。

proxyStatus 詳細資料欄位適用於下列負載平衡器:

  • 區域性外部應用程式負載平衡器
  • 區域性內部應用程式負載平衡器
  • 跨區域內部應用程式負載平衡器
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 要求經由 Proxy 傳送至後端,且後端已提供回應。 HTTP 狀態碼是由後端執行的軟體設定。
client_timed_out

負載平衡器與用戶端之間的連線超過閒置逾時時間。

如要進一步瞭解區域性外部應用程式負載平衡器,請參閱「用戶端 HTTP 保持運作逾時」。如要進一步瞭解內部應用程式負載平衡器,請參閱「用戶端 HTTP 保持運作逾時」。
0408
backend_timeout

後端逾時產生回應。

502
http_protocol_error_from_backend_response 後端回應包含 HTTP 通訊協定錯誤。 501502
http_protocol_error_from_request 用戶端要求含有 HTTP 通訊協定錯誤。 400503
http_version_not_supported 系統不支援 HTTP 通訊協定版本。只支援 HTTP 1.1 和 2.0。 400
handled_by_identity_aware_proxy 這個回應是由 Identity-Aware Proxy (IAP) 產生,目的是在允許存取前驗證用戶端身分。 200302400401403500502
invalid_request_headers

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

舉例來說,如果標頭欄位名稱包含雙引號 ("),或標準 ASCII 範圍以外的任何字元 (即任何 >= 0x80 的位元組),即為無效。

如需詳細資訊,請參閱:

400404
ip_detection_failed 系統無法偵測原始 IP 位址。 根據失敗的性質,可能出現任何狀態碼。值必須介於 400599 之間。
request_body_too_large HTTP 要求主體超過負載平衡器支援的長度上限。 413507
request_header_timeout 負載平衡器未在 5 秒內收到完整要求,因此要求標頭逾時。 408504
denied_by_security_policy 由於 Google Cloud Armor 安全性政策,負載平衡器已拒絕這個要求。 403
throttled_by_security_policy 要求遭到 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 握手期間,用戶端未提供要求的憑證。詳情請參閱「已記錄的連線關閉錯誤」。 0
client_cert_pki_too_large 用於驗證的 PKI 有超過三個中繼憑證,這些憑證共用相同的SubjectSubject Public Key Info。詳情請參閱「已記錄的連線關閉錯誤」。 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 您已設定雙向傳輸層安全標準 (TLS),但未設定 TrustConfig。 詳情請參閱「已記錄的連線關閉錯誤」。 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 身分識別,就會傳送這項錯誤。這個錯誤會導致 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 憑證,或 CA 憑證與已知信任錨點不符,因此無法接受該憑證。這個錯誤會導致 TLS 連線關閉。 0
unexpected_message 不當訊息,例如錯誤的信號交換訊息或過早收到應用程式資料。這個錯誤會導致 TLS 連線關閉。 0
bad_record_mac 系統收到無法解除保護的記錄。這個錯誤會導致 TLS 連線關閉。 0
record_overflow 收到的 TLSCiphertext 記錄長度超過 214+256 個位元組,或解密後的 TLSPlaintext 記錄長度超過 214 個位元組 (或其他協商限制)。這個錯誤會導致 TLS 連線關閉。 0
handshake_failure 無法根據可用選項,協商出一組可接受的安全參數。這個錯誤會導致 TLS 連線關閉。 0
illegal_parameter 交握中的某個欄位有誤,或與其他欄位不一致。 這個錯誤會導致 TLS 連線關閉。 0
access_denied 系統已收到有效憑證或 PSK,但套用存取控制後,用戶端未繼續進行協商。這個錯誤會導致 TLS 連線關閉。 0
decode_error 由於部分欄位超出指定範圍,或訊息長度有誤,因此無法解碼。這個錯誤會導致 TLS 連線關閉。 0
decrypt_error 交握 (非記錄層) 加密作業失敗,包括無法正確驗證簽章、驗證完成的訊息或 PSK 繫結。這個錯誤會導致 TLS 連線關閉。 0
insufficient_security 伺服器要求的參數比用戶端支援的參數更安全,因此交涉失敗。這個錯誤會導致 TLS 連線關閉。 0
inappropriate_fallback 伺服器傳送此訊息,是為了回應用戶端無效的連線重試嘗試。這個錯誤會導致 TLS 連線關閉。 0
user_cancelled 使用者因與通訊協定失敗無關的原因取消握手。這個錯誤會導致 TLS 連線關閉。 0
missing_extension 由接收握手訊息的端點傳送,該訊息未包含必須為提供的 TLS 版本或其他協商參數傳送的擴充功能。這個錯誤會導致 TLS 連線關閉。 0
unsupported_extension 由端點傳送,這些端點會接收任何含有已知禁止納入指定交握訊息的擴充功能,或在 ServerHelloCertificate 中包含任何未先在相應 ClientHelloCertificateRequest 中提供的擴充功能的交握訊息。這個錯誤會導致 TLS 連線關閉。 0
unrecognized_name 當伺服器無法透過用戶端透過「server_name」擴充功能提供的名稱識別時,就會傳送這項警示。請參閱 TLS 擴充功能定義 0
bad_certificate_status_response 當伺服器透過「status_request」擴充功能提供無效或無法接受的 OCSP 回應時,用戶端會傳送這項警示。請參閱 TLS 擴充功能定義。 這個錯誤會導致 TLS 連線關閉。 0
load_balancer_configured_resource_limits_reached 負載平衡器已達到設定的資源限制,例如連線數量上限。 0

傳輸層安全標準 (TLS) 連線失敗記錄項目

如果用戶端與負載平衡器之間的 TLS 連線在選取任何後端之前失敗,記錄檔項目會記錄錯誤。您可以設定後端服務,使用不同的記錄取樣率。如果傳輸層安全標準 (TLS) 連線失敗,失敗的傳輸層安全標準 (TLS) 連線記錄取樣率會是任何後端服務的最高取樣率。舉例來說,如果您已將兩個後端服務的記錄取樣率分別設為 0.30.5,則失敗的 TLS 連線記錄取樣率為 0.5

您可以查看下列記錄項目詳細資料,找出失敗的 TLS 連線:

  • proxyStatus 錯誤類型為 tls_alert_receivedtls_certificate_errortls_protocol_errorconnection_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"
  

授權政策要求記錄

負載平衡器記錄項目 JSON 酬載中的 authz_info 物件包含授權政策的資訊。您可以根據這些政策允許或拒絕的流量,設定記錄指標。進一步瞭解授權政策記錄詳細資料

欄位 類型 說明
authz_info.policies[] 物件 符合要求的政策清單。
authz_info.policies[].name 字串 符合要求的授權政策名稱。

名稱空白的原因如下:

  • 沒有與要求相符的 ALLOW 政策,而要求遭拒。
  • 沒有與要求相符的 DENY 政策,而要求獲准。
authz_info.policies[].result 列舉 結果可以是 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 列舉 結果可以是 ALLOWEDDENIED

與記錄互動

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

Monitoring

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

監控指標可用於以下用途:

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

除了 Monitoring 預先定義的資訊主頁,您可透過 Cloud Monitoring API 建立自訂資訊主頁、設定警告及查詢指標。

設定警告政策

您可以建立警告政策來監控指標值,並在指標違反條件時收到通知。

  1. 前往 Google Cloud 控制台的 「Alerting」(警告) 頁面

    前往「Alerting」(警告)

    如果是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 如果尚未建立通知管道,但想收到通知,請按一下「Edit Notification Channels」(編輯通知管道),新增通知管道。新增管道後,請返回「Alerting」(警告) 頁面。
  3. 在「Alerting」(警告) 頁面,選取「Create policy」(建立政策)
  4. 如要選取指標,請展開「Select a metric」(選取指標) 選單,執行下列步驟:
    1. 如要限制選單只顯示相關項目,請在篩選列輸入 Regional External Application Load Balancer Rule。如果選單篩選後沒有任何結果,請停用「Show only active resources & metrics」(僅顯示使用中的資源和指標) 切換鈕。
    2. 在「Resource type」(資源類型) 部分,選取「Regional External Application Load Balancer Rule」(區域外部應用程式負載平衡器規則)
    3. 選取「Metric category」(指標類別) 和「Metric」(指標),然後選取「Apply」(套用)
  5. 點選「Next」(下一步)
  6. 「Configure alert trigger」(設定警告觸發條件) 頁面中的設定會決定警告觸發時機。選取條件類型,視需要指定門檻。詳情請參閱「建立指標門檻警告政策」。
  7. 點選「Next」(下一步)
  8. 選用:如要新增警告政策的通知,請按一下「Notification channels」(通知管道)。在對話方塊中,從選單選取一或多個通知管道,然後按一下「OK」(確定)
  9. 選用:更新「Incident autoclose duration」(事件自動關閉期限)。這個欄位會決定 Monitoring 在沒有指標資料下關閉事件的時機。
  10. 選用:按一下「Documentation」(說明文件),新增要納入通知訊息的資訊。
  11. 按一下「Alert name」(警告名稱),輸入警告政策的名稱。
  12. 點選「建立政策」
詳情請參閱「快訊總覽」。

設定 Cloud Monitoring 自訂資訊主頁

您可以為負載平衡器的指標建立自訂 Cloud Monitoring 資訊主頁:

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

    前往「Monitoring」

  2. 依序選取「Dashboards」(資訊主頁) >「Create Dashboard」(建立資訊主頁)

  3. 按一下「Add Chart」(新增圖表),然後為圖表命名。

  4. 如要識別要顯示的時間序列,請選擇資源類型和指標類型:

    1. 按一下「Resource & Metric」(資源與指標) 中的圖表,然後在「Select a metric」(選取指標) 部分,從可用選項中選取項目:
    2. 如果是區域性外部應用程式負載平衡器,資源類型請選取「Regional External Application Load Balancer Rule」(區域性外部應用程式負載平衡器規則)
    3. 按一下「套用」
  5. 如要指定監控篩選器,請依序點選「Filters」(篩選器) >「Add filter」(新增篩選器)

  6. 按一下「Save」(儲存)

指標回報頻率與保留期

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

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

Monitoring 指標

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

下列區域外部應用程式負載平衡器指標會回報給 Cloud Monitoring

表格中的這些指標會以 network.googleapis.com/loadbalancer/backend/ 開頭 (預先發布版):

  • in_flight_requests
  • configured_in_flight_requests

表格中的其他指標會以 loadbalancing.googleapis.com/ 開頭。

指標 名稱 說明
已設定後端比率 (預覽) network.googleapis.com/loadbalancer/backend/configured_rate 為每個後端群組設定的每秒要求數上限。這是將目標容量乘以 (容量縮放器) 的結果 (如有指定)。
已設定的後端使用率 (預先發布版) network.googleapis.com/loadbalancer/backend/configured_utilization 每個後端群組設定的 CPU 使用率上限 (以分數表示)。這是將目標容量乘以容量調整器 (如有指定) 的結果。
後端錯誤率 (預覽版) network.googleapis.com/loadbalancer/backend/error_rate 每個後端群組每秒提供的錯誤數。
後端容量 (預覽版) network.googleapis.com/loadbalancer/backend/fullness 每個後端群組目前的飽和度 (以百分比表示),計算依據為負載平衡器的平衡模式
後端延遲時間 loadbalancing.googleapis.com/https/external/regional/backend_latencies

後端延遲時間的分布情形。後端延遲時間是指傳送至後端的要求的最後一個位元組,到 Proxy 接收回應的最後一個位元組之間的時間,以毫秒為單位。這包括後端處理要求,以及回應傳回 Proxy 所花費的時間。

後端負載平衡自訂指標 (預覽版) network.googleapis.com/loadbalancer/backend/lb_custom_metric 根據您定義的自訂指標,每個後端群組目前的使用率。
後端費率 (預覽) network.googleapis.com/loadbalancer/backend/rate 每個後端群組每秒收到的要求數。
後端使用率 (預先發布版) network.googleapis.com/loadbalancer/backend/utilization 群組中 VM 的 CPU 總使用率 (以分數表示)。
已設定處理中的要求 (預先發布版) loadbalancer/backend/configured_in_flight_requests 每個後端群組的處理中要求數量上限。進行中的要求會決定要求負載的分散方式,這些要求執行時間超過一秒。
處理中的要求 (預先發布版) loadbalancer/backend/in_flight_requests 每個後端群組正在進行的查詢數量。
要求數量 loadbalancing.googleapis.com/https/external/regional/request_count 由區域性外部應用程式負載平衡器提供服務的要求數量。
要求位元組數 loadbalancing.googleapis.com/https/external/regional/request_bytes 以要求形式,從用戶端傳送至區域外部應用程式負載平衡器的位元組數。
回應位元組數 loadbalancing.googleapis.com/https/external/regional/response_bytes 以回應形式,從區域外部應用程式負載平衡器傳送至用戶端的位元組數。
總延遲時間 loadbalancing.googleapis.com/https/external/regional/total_latencies

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

不包括用戶端與 Proxy 之間的封包往返時間。此外,在同一個使用 Connection: keep-alive 的連線上,要求之間的停頓不會影響測量結果。在 Cloud Monitoring 檢視畫面,這種測量結果通常會縮減至第 95 個百分位數。

指標篩選維度

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

指標的匯總依據為各個區域性外部應用程式負載平衡器。您可以依據下列維度篩選 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 根據與要求相符的網址對應路徑規則或轉送規則,選擇用於處理要求的後端名稱。
backend_target_type 後端目標的類型。可以是 BACKEND_SERVICE,如未指派後端,則為 UNKNOWN
backend_type 後端群組的類型。可以是 INSTANCE_GROUPNETWORK_ENDPOINT_GROUP,如未指派後端,則為 UNKNOWN
forwarding_rule_name 轉送規則物件的名稱。
matched_url_path_rule 網址對應路徑規則或路由規則,設為網址對應鍵的一部分。可以把 UNMATCHEDUNKNOWN 當做備用值。
  • UNMATCHED 是指要求沒有相符的網址路徑規則,因此會使用預設路徑規則。
  • UNKNOWN 表示發生內部錯誤。
network_name 負載平衡器的 VPC 網路名稱。
project_id 與這個資源相關聯的 Google Cloud 專案 ID。
region 定義負載平衡器的區域。
target_proxy_name 轉送規則所參照的目標 Proxy 物件名稱。
url_map_name 設為用來選取後端服務的網址對應物件名稱。

後續步驟