端點的健康狀態變更時,您可以取得負載平衡健康狀態檢查的記錄。健康狀態檢查記錄可用於下列用途:
- 即時偵錯及排解端點健康狀態問題
- 瞭解端點的健康狀態
- 稽核與法規遵循
健康狀態檢查會將健康狀態轉換資訊記錄到 Logging。您可以針對每個健康狀態檢查啟用或停用記錄功能。
如要在 Logging 中查看健康狀態檢查記錄,請務必確認您沒有適用於健康狀態檢查的記錄排除規則。如需驗證是否允許 GCE Instance Group
和 Network Endpoint Group
記錄檔的操作說明,請參閱「排除篩選器」。
啟用及停用記錄功能
本節說明如何啟用新健康狀態檢查或現有健康狀態檢查的記錄功能,以及如何停用現有健康狀態檢查的記錄功能。
在新健康狀態檢查中啟用記錄功能
主控台
前往 Trusted Cloud 控制台的「健康狀態檢查」頁面。
按一下「建立健康狀態檢查」。
針對「記錄」,選取「開啟」。
繼續設定健康檢查。
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 指令」。
為現有健康狀態檢查啟用記錄功能
主控台
前往 Trusted Cloud 控制台的「健康狀態檢查」頁面。
按一下健康狀態檢查的名稱。
按一下「編輯」
。針對「記錄」,選取「開啟」。
按一下 [儲存]。
gcloud
gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \ --enable-logging
--enable-logging
旗標可為該健康狀態檢查啟用記錄功能。
停用現有健康狀態檢查的記錄功能
主控台
前往 Trusted Cloud 控制台的「健康狀態檢查」頁面。
按一下健康狀態檢查的名稱。
按一下「編輯」
。在「記錄」中選取「關閉」。
按一下 [儲存]。
gcloud
gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \ --no-enable-logging
--no-enable-logging
旗標會停用該健康狀態檢查的記錄功能。
查看記錄
如要查看記錄,請前往記錄探索工具。
如要查看所有記錄,請在「資源」選單中選取
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
|
有多個健康狀態檢查程式會探查每個端點; Trusted Cloud系統會在記錄前移除重複的記錄項目,因此只會產生不重複的記錄。
如果健康狀態檢查程式重新啟動,您可能會偶爾看到記錄的健康狀態從 UNKNOWN
變更為先前列出的已知狀態之一,即使端點的健康狀態實際上並未變更。 Trusted 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 |
健康狀態檢查的雲端觀測點區域。 只有在對應的健康狀態檢查中設定 |
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
,系統就不會產生記錄。 - 如果是 VM 遷移作業,端點健康狀態轉換為
UNHEALTHY
狀態時,您可能不會看到任何產生的記錄項目。 - 刪除端點時不會產生記錄檔。舉例來說,停止 VM 時就會發生這種情況。
後續步驟
- 閱讀健康狀態檢查的概念資訊。
- 建立健康狀態檢查。
- 請參閱記錄。