本文說明如何查看及解讀代管執行個體群組 (MIG) 中 VM 的健康狀態變更記錄項目,並提供具體的用途,協助您監控群組中的 VM。
如果您已為 MIG 設定以應用程式為準的健康狀態檢查,每當受管理執行個體的健康狀態變更時 (例如執行個體從 HEALTHY 狀態變更為 UNHEALTHY 狀態),Compute Engine 就會寫入記錄項目。這些記錄項目有助於監控及偵錯每個代管執行個體的健康狀態,以及 MIG 的整體健康狀態。
事前準備
- 請參閱「設定健康狀態檢查與自動修復」。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,可以選取下列任一選項,向 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
-
定價
Compute Engine 會使用 Cloud Logging,為代管執行個體健康狀態變更產生記錄項目。Cloud Logging 每個月都會提供免費配額,超出配額的記錄檔項目則會依資料量計費。詳情請參閱 Cloud Logging 定價摘要。
如要避免記錄費用,可以停用健康狀態變更記錄。
查看健康狀態變更記錄
只要健康狀態變更記錄保持啟用,Compute Engine 就會在受管理執行個體的健康狀態變更時,將記錄項目寫入平台記錄。您可以查看專案、特定 MIG 或特定受管理執行個體的這些記錄。
查看專案或 MIG 的記錄
如要查看專案或特定 MIG 的記錄項目,請使用Google Cloud 主控台、gcloud CLI 或 REST。
主控台
前往 Google Cloud 控制台的「Logs Explorer」頁面。
設定下列查詢參數:
- 資源 - GCE 執行個體群組管理工具
- 記錄名稱 -
instance_group_manager_events
或者,您也可以在「查詢建立工具」中複製下列查詢。
resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:*
您可以使用下列查詢,將搜尋範圍縮小至特定代管執行個體群組。
resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND resource.labels.instance_group_manager_name="MIG_NAME"
按一下 [Run query] (執行查詢)。「Query results」(查詢結果) 會顯示記錄。
gcloud
使用 gcloud logging read 指令查看及讀取記錄項目。
如要查看專案中的所有健康狀態變更記錄,請使用下列指令:
gcloud logging read 'resource.type="gce_instance_group_manager" AND
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
jsonPayload.instanceHealthStateChange:*'\
--limit 10
如要查看特定代管執行個體群組的所有健康狀態變更記錄,請使用下列指令:
gcloud logging read 'resource.type="gce_instance_group_manager" AND
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
jsonPayload.instanceHealthStateChange:* AND
resource.labels.instance_group_manager_name="MIG_NAME"' \
--limit 10
更改下列內容:
PROJECT_ID:您的專案 ID。MIG_NAME:要查看健康狀態變更記錄的 MIG。
REST
如要查看健康狀態變更記錄,請向 entries.list 方法發出 POST 要求。
如要查看專案中的所有健康狀態變更記錄,請使用下列指令:
curl -H "Content-Type: application/json" -H "Authorization: Bearer OAUTH2_TOKEN" -X POST -d \
'{"filter":
"resource.type=gce_instance_group_manager AND
logName=projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events AND
jsonPayload.instanceHealthStateChange:*",
"orderBy": "timestamp desc",
"pageSize": 10,
"resourceNames": ["projects/PROJECT_ID"]
}' https://logging.googleapis.com/v2/entries:list?alt=json
如要查看特定代管執行個體群組的健康狀態變更記錄,請使用下列指令:
curl -H "Content-Type: application/json" -H "Authorization: Bearer OAUTH2_TOKEN" -X POST -d \
'{"filter":
"resource.type=gce_instance_group_manager AND
logName=projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events AND
jsonPayload.instanceHealthStateChange:* AND
resource.labels.instance_group_manager_name=MIG_NAME",
"orderBy": "timestamp desc",
"pageSize": 10,
"resourceNames": ["projects/PROJECT_ID"]
}' https://logging.googleapis.com/v2/entries:list?alt=json
更改下列內容:
OAUTH2_TOKEN:應用程式的存取權杖。如要進行本機測試,可以使用gcloud auth print-access-token指令產生權杖。PROJECT_ID:您的專案 ID。MIG_NAME:要查看健康狀態變更記錄的 MIG。
如要進一步瞭解各個記錄項目,請參閱「記錄項目的格式」。
視您要封存記錄、使用記錄進行分析、將記錄串流傳輸到其他應用程式,還是觸發 Cloud Function 而定,您可以將記錄匯出至 Cloud Storage、BigQuery 或 Pub/Sub 等目的地。如要進一步瞭解如何匯出記錄,請參閱記錄匯出總覽。
查看特定 VM 的健康狀態變更記錄
如要查看特定代管執行個體的記錄項目,請使用Google Cloud 控制台、gcloud CLI 或 REST。
主控台
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在「查詢」建立工具中複製下列查詢。
resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND labels."compute.googleapis.com/instance_name"="INSTANCE_NAME"
點選「執行查詢」
gcloud
使用 gcloud logging read 指令查看及讀取記錄項目。
如要查看代管執行個體的健康狀態變更記錄,請使用下列指令:
gcloud logging read 'resource.type="gce_instance_group_manager" AND
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
jsonPayload.instanceHealthStateChange:* AND
labels."compute.googleapis.com/instance_name"="INSTANCE_NAME"' \
--limit 10
更改下列內容:
PROJECT_ID:您的專案 ID。INSTANCE_NAME:要查看健康狀態變更記錄的受管理執行個體。
REST
如要查看代管執行個體的健康狀態變更記錄,請對 entries.list 方法發出 POST 要求。
curl -H "Content-Type: application/json" -H "Authorization: Bearer OAUTH2_TOKEN" -X POST -d \
'{"filter":
"resource.type=gce_instance_group_manager AND
logName=projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events AND
jsonPayload.instanceHealthStateChange:* AND
labels.\"compute.googleapis.com/instance_name\"=\"INSTANCE_NAME\"",
"orderBy": "timestamp desc",
"pageSize": 10,
"resourceNames": ["projects/PROJECT_ID"]
}' https://logging.googleapis.com/v2/entries:list?alt=json
更改下列內容:
OAUTH2_TOKEN:應用程式的存取權杖。如要進行本機測試,可以使用gcloud auth print-access-token指令產生權杖。PROJECT_ID:您的專案 ID。INSTANCE_NAME:要查看健康狀態變更記錄的受管理執行個體。
記錄項目格式
執行個體健康狀態變更記錄項目包含的資訊,適合用於監控及偵錯受管理執行個體的狀態。
記錄檔會寫入平台記錄,記錄檔名稱為 instance_group_manager_events。平台記錄有助於偵錯及排解問題。
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events"
健康狀態變更記錄項目包含下列資訊類型:
- 多數記錄檔所示的一般資訊,如嚴重性、專案 ID、MIG 名稱和 ID、專案編號和時間戳記等。
- 執行個體健康狀態專屬的欄位。
在每個健康狀態變更記錄項目中,jsonPayload.instanceHealthStateChange 欄位包含下列資訊:
| 欄位 | 說明 |
|---|---|
instance |
執行個體的網址,以字串專案 ID 和執行個體名稱為準。 |
instanceWithId |
執行個體的網址,以數字專案 ID 和執行個體 ID 為準。 |
ipAddress |
健康狀態檢查探測的執行個體 IP 位址。 |
network |
這個執行個體的網路資源網址,以字串專案 ID 和網路名稱為準。 |
networkWithId |
這個執行個體的網路資源網址,以數字專案 ID 和網路 ID 為依據。 |
healthCheck |
為代管執行個體群組設定的健康狀態檢查網址。 |
previousDetailedHealthState |
執行個體先前的健康狀態。如需可能狀態的清單,請參閱「 健康狀態」。 |
detailedHealthState |
執行個體目前的健康狀態。如需可能狀態的清單,請參閱「 健康狀態」。 |
notificationTime |
健康狀態變更的時間戳記。 |
布林類型的記錄欄位通常只會在欄位的值為 true 時才會顯示。如果布林欄位的值為 false,則記錄檔會省略該欄位。
系統會對記錄檔欄位強制採用 UTF-8 編碼。非 UTF-8 字元都會替換為問號。
記錄項目範例
以下範例顯示 VM 執行個體的健康狀態從 HEALTHY 變更為 UNHEALTHY:
{
"logName": "projects/my-project/logs/compute.googleapis.com%2Finstance_group_manager_events",
"resource": {
"type": "gce_instance_group_manager",
"labels": {
"instance_group_manager_id": "3138236342290985981",
"instance_group_manager_name": "my-mig",
"project_id": "my-project",
"location": "europe-west3"
}
},
"labels": {
"compute.googleapis.com/instance_id": "6498902454451155884",
"compute.googleapis.com/instance_location": "europe-west3-a",
"compute.googleapis.com/instance_name": "my-mig-a"
},
"timestamp": "2019-11-19T15:47:57.127Z",
"severity": "INFO",
"jsonPayload": {
"@type": "type.googleapis.com/compute.InstanceGroupManagerEvent",
"instanceHealthStateChange": {
"instance": "projects/my-project/zones/europe-west3-a/instances/my-mig-a",
"instanceWithId": "projects/123456/zones/europe-west3-a/instances/6498902454451155884",
"ipAddress": "10.0.0.4",
"network": "projects/my-project/global/networks/net-1",
"networkWithId": "projects/123456/global/networks/456",
"healthCheck": "projects/my-project/global/healthChecks/my-mig-health-check",
"previousDetailedHealthState": "HEALTHY",
"detailedHealthState": "UNHEALTHY",
"notificationTime": "2019-11-19T15:47:56.444Z"
}
},
"receiveTimestamp": "2019-11-19T15:47:57.296439184Z"
}
用途
在下列監控或偵錯情境中,您可以使用健康狀態變更記錄:
- 瞭解特定 VM 執行個體健康狀態隨時間變化的頻率。
- 評估 MIG 執行個體健康狀態變更的頻率。
- 找出經常進入
UNHEALTHY狀態的問題 VM 執行個體。 - 找出自動修復嘗試的原因。
- 瞭解特定 VM 執行個體的自動修復嘗試是否成功。
- 判斷自動修復的適當初始延遲時間,微調應用程式的健康狀態檢查設定。
監控 VM 的健康狀態變化
您可以建立指標,追蹤特定 VM 的健康狀態變化,藉此監控 VM 執行個體健康狀態的變化頻率。
如要建立指標並監控變更,請按照下列步驟操作:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在「Query」(查詢) 建立工具中輸入下列查詢,並使用您的專案 ID 和執行個體名稱。
resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND labels."compute.googleapis.com/instance_name"="INSTANCE_NAME"
在「查詢結果」部分,依序點選「動作」和「建立指標」。
在「建立記錄指標」頁面中,執行下列操作:
- 將「指標類型」設為「計數器」。
輸入「記錄指標名稱」,例如
health-mig-xyzq。「建立篩選器」部分會顯示「記錄檔探索工具」的記錄查詢。您也可以在篩選器中加入
severity>=WARNING,只考量干擾狀態 (例如UNHEALTHY和TIMEOUT)。按一下「標籤」下方的「新增標籤」。
輸入「標籤名稱」,例如
health_state。將「標籤類型」設為
STRING。將「欄位名稱」設為
jsonPayload.instanceHealthStateChange.detailedHealthState。方便您區分不同的健康狀態變化。按一下「完成」即可新增標籤。
點選「建立指標」。
前往「記錄指標」頁面,然後找出新建立的指標。
按一下指標列中的選單 more_vert,然後選取「在 Metrics Explorer 中查看」。「指標探索工具」隨即開啟,並顯示代表 VM 執行個體健康狀態變化的圖表,該執行個體是在查詢中指定的。
監控 MIG 中所有 VM 的健康狀態變化
您可以建立指標,追蹤代管執行個體的健康狀態變化,藉此監控所有代管執行個體的健康狀態變化。
如要建立指標並監控變更,請按照下列步驟操作:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在「查詢」建構工具中輸入下列查詢,並使用您的專案 ID 和代管執行個體群組名稱。
resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND resource.labels.instance_group_manager_name="MIG_NAME"
在「查詢結果」部分,依序點選「動作」和「建立指標」。
在「建立記錄指標」頁面中,執行下列操作:
- 將「指標類型」設為「計數器」。
- 輸入「記錄指標名稱」,例如
health-mig-xyzq。 - 按一下「標籤」下方的「新增標籤」。
- 輸入「標籤名稱」,例如
health_state。 - 將「標籤類型」設為
STRING。 - 將「欄位名稱」設為
jsonPayload.instanceHealthStateChange.detailedHealthState。這樣您就能區分不同的健康狀態變化。 - 按一下「完成」即可新增標籤。
- 點選「建立指標」。
前往「記錄指標」頁面,然後找出新建立的指標。
按一下指標列中的選單 more_vert,然後選取「在 Metrics Explorer 中查看」。「指標探索器」會開啟,並顯示圖表,代表您在查詢中指定的代管執行個體群組中,所有 VM 執行個體的健康狀態變化。
找出健康狀態經常不良的 VM
您可以建立指標,追蹤 MIG 中所有 VM 執行個體的健康狀態變化,並依執行個體分組指標,找出經常進入 UNHEALTHY 狀態的問題 VM。
如要建立指標並依執行個體分組,請按照下列步驟操作:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在「查詢」建構工具中輸入下列查詢,並使用您的專案 ID 和代管執行個體群組名稱。
resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND resource.labels.instance_group_manager_name="MIG_NAME"
在「查詢結果」部分,依序點選「動作」和「建立指標」。
在「建立記錄指標」頁面中,執行下列操作:
- 將「指標類型」設為「計數器」。
- 輸入「記錄指標名稱」,例如
health-mig-xyzq。 - 按一下「標籤」下方的「新增標籤」。
- 輸入「標籤名稱」,例如
health_state。 - 將「標籤類型」設為
STRING。 - 將「欄位名稱」設為
jsonPayload.instanceHealthStateChange.detailedHealthState。這樣您就能區分不同的健康狀態變化。 - 按一下「完成」即可新增標籤。
- 同樣地,新增第二個標籤 (例如
instance),並將「欄位名稱」設為jsonPayload.instanceHealthStateChange.instance。 - 點選「建立指標」。
前往「記錄指標」頁面,然後找出新建立的指標。
按一下指標列中的選單 more_vert,然後選取「在 Metrics Explorer 中查看」。「指標探索器」會開啟,並顯示圖表,代表您在查詢中指定的代管執行個體群組中,所有 VM 執行個體的健康狀態變化。
將「Group By」(分組依據) 設為
instance,即可查看每個執行個體的健康狀態變化總數。
健康狀態變更次數最多的執行個體,就是最常進入健康狀態不良的執行個體。
檢查導致自動修復嘗試的原因
如要找出自動修復嘗試的原因,請針對特定 VM 執行個體篩選 repair 作業的記錄。
如要篩選修復作業,請按照下列步驟操作:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在「查詢」建構工具中輸入下列查詢,並使用您的專案 ID 和執行個體名稱。
resource.type="gce_instance" AND logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event" AND protoPayload.methodName="compute.instances.repair.recreateInstance" AND protoPayload.resourceName=~"/INSTANCE_NAME$"
按一下 [Run query] (執行查詢)。「Query results」(查詢結果) 會顯示 VM 的所有自動修復嘗試,以及
protoPayload.status.message中的自動修復原因。
檢查 VM 的自動修復是否成功
您可以依 VM 執行個體名稱篩選記錄,找出 repair 作業和健康狀態變化,瞭解 VM 執行個體的自動修復嘗試是否成功。如果執行個體的健康狀態在修復作業後變更為 HEALTHY,您會看到相應的健康狀態變更記錄。請按照以下步驟操作:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在「查詢」建構工具中輸入下列查詢,並使用您的專案 ID 和執行個體名稱。
(resource.type="gce_instance" AND logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event" AND protoPayload.methodName="compute.instances.repair.recreateInstance" AND protoPayload.resourceName=~"/INSTANCE_NAME$") OR (resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND labels."compute.googleapis.com/instance_name"="INSTANCE_NAME")
查詢的第一部分會顯示執行個體修復作業,指出 MIG 自動修復功能已觸發重新建立作業,讓執行個體恢復正常。查詢的第二部分會顯示 VM 執行個體的所有健康狀態變化。
在「Query results」(查詢結果) 中,健康狀態變更事件的
detailedHealthState會在修復作業後不久設為HEALTHY,表示自動修復嘗試成功。
判斷 MIG 的初始延遲值
有了 VM 執行個體健康狀態記錄,就能更輕鬆地為 MIG 自動修復功能判斷適當的初始延遲值。您可以透過記錄,觀察 instances.insert 作業完成後,到群組中一組執行個體收到第一個正常訊號之間的時間。這個時間間隔會顯示執行個體完全啟動所需的時間。由於部分 VM 的啟動速度可能比其他 VM 慢,因此 Google 建議在自動修復政策中指定初始延遲時間時,為觀察到的初始化時間 (從插入作業到正常狀態) 增加一些緩衝時間。
如要測量插入執行個體作業與執行個體進入正常狀態之間的時間,請依據 VM 執行個體名稱,查詢 insert 作業和健康狀態變更記錄。使用這兩項作業的時間戳記,計算執行個體的初始化時間。請按照以下步驟操作:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在「查詢」建構工具中輸入下列查詢,並使用您的專案 ID 和執行個體名稱。
(resource.type="gce_instance" AND logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity" AND protoPayload.request.@type="type.googleapis.com/compute.instances.insert" AND operation.last="true" AND protoPayload.resourceName=~"/INSTANCE_NAME$") OR (resource.type="gce_instance_group_manager" AND logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND jsonPayload.instanceHealthStateChange:* AND labels."compute.googleapis.com/instance_name"="INSTANCE_NAME")
查詢的第一部分會顯示 VM 插入作業完成。 第二部分會顯示 VM 的所有健康狀態變更。
在「Query results」(查詢結果)中,插入作業後不久,
detailedHealthState設為HEALTHY的健康狀態變更事件的時間戳記,會顯示這個 VM 的啟動時間。針對更多 VM 重複執行上述步驟,以取得初始延遲參數的更準確近似值。