當端點的健康狀態變更時,您可以取得負載平衡健康狀態檢查的記錄。您可以使用健康狀態檢查記錄來執行下列操作:
- 即時偵錯及排解端點健康狀態問題
- 瞭解端點的健康狀態
- 稽核和法規遵循用途
健康狀態檢查會將健康狀態轉換資訊記錄到 Logging。您可以針對每項健康狀態檢查啟用或停用記錄功能。
如要在 Logging 中查看健康狀態檢查記錄,您必須確保沒有套用於健康狀態檢查的記錄排除項目。如需驗證系統是否允許 GCE Instance Group
和 Network Endpoint Group
記錄的操作說明,請參閱「排除篩選器」。
啟用及停用記錄功能
本節說明如何啟用新或現有健康狀態檢查的記錄功能,以及如何停用現有健康狀態檢查的記錄功能。
啟用新健康狀態檢查的記錄功能
主控台
在 Google Cloud 控制台中,前往「Health checks」(健康狀態檢查) 頁面。
按一下「建立健康狀態檢查」。
針對「記錄」,選取「開啟」。
繼續設定健康狀態檢查。
gcloud
gcloud compute health-checks create PROTOCOL HEALTH_CHECK_NAME \ --enable-logging
旗標 --enable-logging
可為該健康狀態檢查啟用記錄功能。
Terraform
如要為不同通訊協定建立含有記錄的健康狀態檢查,請使用 google_compute_health_check
資源。
如要使用區域性負載平衡器,請使用 google_compute_region_health_check
資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
啟用現有健康狀態檢查的記錄功能
主控台
在 Google Cloud 控制台中,前往「Health checks」(健康狀態檢查) 頁面。
按一下健康狀態檢查的名稱。
按一下「編輯」圖示
。針對「記錄」,選取「開啟」。
按一下 [儲存]。
gcloud
gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \ --enable-logging
旗標 --enable-logging
可為該健康狀態檢查啟用記錄功能。
停用現有健康狀態檢查的記錄功能
主控台
在 Google Cloud 控制台中,前往「Health checks」(健康狀態檢查) 頁面。
按一下健康狀態檢查的名稱。
按一下「編輯」圖示
。針對「Logs」,選取「Off」。
按一下 [儲存]。
gcloud
gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \ --no-enable-logging
旗標 --no-enable-logging
會停用該健康狀態檢查的記錄功能。
查看記錄
如要查看記錄,請前往「Logs Explorer」(記錄檔探索工具)。
如要查看所有記錄,請根據後端類型,在「Resource」選單中選取
GCE Instance Group
或Network Endpoint Group
。或者,您也可以將下列內容貼到「Query」欄位中。將
PROJECT_ID
替換為專案 ID。logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
您可以針對負載平衡器健康檢查設定匯出記錄指標。
使用篩選器查看記錄檔
您也可以根據更具體的搜尋條件取得記錄檔。舉例來說,下列篩選器會顯示指定後端例項 IP 位址的所有記錄:
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" jsonPayload.healthCheckProbeResult.ipAddress="IP_ADDRESS"
「布林」類型的記錄檔欄位通常只會在欄位的值為 true
時才會顯示。如果布林欄位的值為 false
,則記錄檔會省略該欄位。
系統會對記錄檔欄位強制採用 UTF-8 編碼。非 UTF-8 字元都會替換為問號。
記錄內容
健康狀態檢查記錄項目包含的資訊適合用於監控及偵錯端點狀態。記錄項目包含下列資訊類型:
- 多數記錄檔所示的一般資訊,如嚴重性、專案 ID、專案編號和時間戳記。
- 下表說明健康檢查專用的欄位。
健康狀態檢查狀態
端點會視為 HEALTHY
或 UNHEALTHY
。這些是基本狀態。在每個基本狀態中,都有幾個更詳細的狀態。
使用分散式 Envoy 健康狀態檢查的混合型 NEG 和區域性網際網路 NEG 不支援詳細的健康狀態。
下表顯示基本健康狀態與詳細健康狀態之間的對應關係。
基本健康狀態 | 詳細健康狀態 |
---|---|
HEALTHY |
HEALTHY DRAINING
|
UNHEALTHY |
UNKNOWN UNHEALTHY TIMEOUT
|
狀態變更不一定會改變負載平衡器的行為。請考慮下列情況:
- 伺服器傳回錯誤的回應,因此端點會視為
UNHEALTHY
。 - 接著,伺服器會停止回應,新狀態為
TIMEOUT
。 - 負載平衡器仍會將端點視為
UNHEALTHY
,因為詳細的TIMEOUT
狀態會對應至基本UNHEALTHY
狀態。
下表說明各健康狀態的定義。
詳細健康狀態檢查狀態 | 意義 | 基本狀態 |
---|---|---|
HEALTHY
|
可連線至端點,且符合健康狀態檢查定義的需求。 | HEALTHY
|
UNHEALTHY
|
可連線至端點,但不符合健康狀態檢查所定義的需求。 | UNHEALTHY
|
DRAINING
|
端點正在排空。系統會允許現有的端點連線完成,但會拒絕新的連線。端點視為 HEALTHY 。 |
HEALTHY
|
TIMEOUT
|
無法連上端點。視健康狀態檢查類型而定,可能無法建立與端點的連線,或是伺服器在指定的逾時時間內未回應。端點視為 UNHEALTHY 。 |
UNHEALTHY
|
UNKNOWN
|
健康狀態檢查系統知道端點,但不知道其健康狀態。端點視為 UNHEALTHY 。 |
UNHEALTHY
|
系統會使用多個健康檢查器來探查每個端點; Google Cloud會在記錄前去除重複的日誌項目,以便只產生不重複的日誌。
如果健康檢查器重新啟動,您可能偶爾會看到記錄的健康狀態從 UNKNOWN
變更為上述的已知狀態之一,即使端點的健康狀態並未實際變更。 Google Cloud 會盡力使用啟發式搜尋法來抑制這類記錄項目。
如果您使用連線耗盡,則系統不會根據端點健康狀態 DRAINING
產生健康狀態檢查記錄。這是因為健康狀態檢查記錄會反映健康狀態檢查探測器觀察到的結果,而連線耗盡不會影響健康狀態檢查探測器觀察到的結果。連線耗盡功能只會通知負載平衡器新狀態為 DRAINING
,並有效覆寫健康檢查器觀察到的端點實際健康狀態。
您可以使用 Cloud Logging API 與記錄互動。這個 API 可讓您透過多種互動方式篩選已設定特定欄位的記錄,並將相符的記錄匯出至 Cloud Logging、Cloud Storage、BigQuery 或 Pub/Sub。如要進一步瞭解 Cloud Logging API,請參閱「Cloud Logging API 總覽」。
健康狀態檢查記錄項目
LogEntry
jsonPayload
會填入欄位 healthCheckProbeResult
,其中包含下列資訊。
欄位 | 類型 | 說明 |
---|---|---|
ipAddress |
string |
與每個後端 VM 的主要網路介面相關聯的主要內部 IP 位址。這是人類可讀的字串。 |
healthCheckProtocol |
enum(HealthCheckProtocol) |
用於檢查端點健康狀態的健康狀態檢查通訊協定。範例:TCP、HTTP、HTTPS。 |
healthState |
enum(HealthState) |
端點目前的健康狀態:HEALTHY 或 UNHEALTHY 。 |
previousHealthState |
enum(HealthState) |
端點先前的健康狀態:HEALTHY 或 UNHEALTHY 。 |
detailedHealthState |
enum(DetailedHealthState) |
端點目前的詳細健康狀態。如需可能的狀態清單,請參閱「健康狀態檢查狀態」。 不支援混合 NEG 和地區性網際網路 NEG 的分散式 Envoy 健康狀態檢查。 |
previousDetailedHealthState |
enum(DetailedHealthState) |
端點先前的詳細健康狀態。如需可能的狀態清單,請參閱「健康狀態檢查狀態」。 不支援混合 NEG 和地區性網際網路 NEG 的分散式 Envoy 健康狀態檢查。 |
probeRequest |
string |
對於 HTTP、HTTPS 和 HTTP/2,這是網址要求路徑 (資源設定中的 針對 TCP/SSL,這是在建立健康狀態檢查連線後傳送的設定選用字串 (資源設定中的 不支援混合 NEG 和地區性網際網路 NEG 的分散式 Envoy 健康狀態檢查。 |
probeCompletionTimestamp |
google.protobuf.Timestamp |
探針完成時間戳記。 |
connectLatency |
google.protobuf.Duration |
為 TCP、SSL、HTTP、HTTPS 和 HTTP/2 等連線導向健康檢查通訊協定設定連線所需的時間。 不支援混合 NEG 和地區性網際網路 NEG 的分散式 Envoy 健康狀態檢查。 |
responseLatency |
google.protobuf.Duration |
探針測量到的請求與回應之間的延遲時間。 不支援混合 NEG 和地區性網際網路 NEG 的分散式 Envoy 健康狀態檢查。 |
probeResultText |
string |
與探針結果相關的說明文字。可能會顯示「連線逾時」或「HTTP 回應:Bad Gateway」,也可能會是空白。 不支援混合 NEG 和地區性網際網路 NEG 的分散式 Envoy 健康狀態檢查。 |
probeSourceIp |
string |
健康狀態檢查探測的來源 IP 位址。 對於分散式 Envoy 健康狀態檢查,這會對應至僅限 Proxy 子網路的 Proxy IP 位址。 |
probeSourceRegion |
string |
健康狀態檢查的來源雲端 Vantage Point 區域。 只有在對應的健康狀態檢查中設定 |
targetIp |
string |
用於探測的 IP 位址。這可能與 ipAddress 不同。探測的目標 IP 位址取決於負載平衡器的類型。詳情請參閱「健康狀態檢查總覽」中的「
探針封包目的地」。 |
targetPort |
int |
探測目標的通訊埠。這個值可以是探測要求的預設通訊埠,或是您建立健康狀態檢查時指定的通訊埠。 |
篩選器示例
本節提供常見記錄篩選器的範例。
找出特定執行個體群組的所有健康狀態檢查結果
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" AND resource.type="gce_instance_group" AND resource.labels.instance_group_name="INSTANCE_GROUP_NAME"
查看特定 NEG 的所有健康狀態檢查結果
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" AND resource.type="gce_network_endpoint_group" AND resource.labels.network_endpoint_group_id="ENDPOINT_GROUP_ID"
查看後端執行個體 IP 位址的所有健康檢查轉換狀態 10.128.15.201
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" jsonPayload.healthCheckProbeResult.ipAddress="10.128.15.201"
找出所有先前為 HEALTHY,但現在為 TIMEOUT 的端點
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" jsonPayload.healthCheckProbeResult.previousDetailedHealthState="HEALTHY" jsonPayload.healthCheckProbeResult.detailedHealthState="TIMEOUT"
找出特定時間範圍內的健康記錄
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" timestamp>"2019-02-14T02:20:00.0Z" timestamp<"2019-02-14T03:30:00.0Z"
限制
- 系統只會針對端點健康狀態轉換作業產生記錄。
- 不支援舊版健康狀態檢查。
- 不支援目標集區。
- 端點的健康狀態為
UNKNOWN
時,系統不會產生記錄。 - 如果是虛擬機器人遷移作業,當端點的健康狀態轉換為
UNHEALTHY
狀態時,您可能不會看到任何記錄項目。 - 刪除端點時不會產生記錄。例如停止 VM 時。
後續步驟
- 請參閱健康狀態檢查概念資訊。
- 建立健康狀態檢查。
- 請參閱記錄相關說明。