監控 VM 健康狀態變化

本文說明如何查看及讀取代管執行個體群組 (MIG) 中 VM 的健康狀態變更記錄項目,並提供具體的用途,協助您監控群組中的 VM。

如果您已為 MIG 設定以應用程式為準的健康狀態檢查,每當受管理執行個體的健康狀態變更時,Compute Engine 就會寫入記錄項目,例如執行個體從 HEALTHY 狀態變更為 UNHEALTHY 狀態時。這些記錄項目可協助您監控及偵錯每個受管理執行個體的健康狀態,以及 MIG 的整體健康狀態。

事前準備

  • 請參閱設定健康狀態檢查和自動修復。
  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Cloud de Confiance by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上範例的預計用途分頁:

    控制台

    使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,不需要設定驗證。

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init
  • 設定預設區域和可用區。
  • REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。

    詳情請參閱 Cloud de Confiance 驗證說明文件中的「使用 REST 進行驗證」。

定價

Compute Engine 會使用 Cloud Logging,為受管理執行個體健康狀態的變更產生記錄項目。Cloud Logging 每個月都會提供免費配額,超出配額的記錄檔項目會依資料量計費。詳情請參閱「Cloud Logging 定價摘要」。

如要避免記錄費用,可以停用健康狀態變更記錄。

查看健康狀態變更記錄

只要健康狀態變更記錄保持啟用,Compute Engine 就會在受管理執行個體的健康狀態變更時,將記錄項目寫入平台記錄。您可以查看專案、特定 MIG 或特定代管執行個體的這些記錄。

查看專案或 MIG 的記錄

如要查看專案或特定 MIG 的記錄項目,請使用Cloud de Confiance 控制台、gcloud CLI 或 REST。

控制台

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

    前往 Logs Explorer

  2. 設定下列查詢參數:

    • 資源 - GCE 執行個體群組管理員
    • 記錄名稱 - instance_group_manager_events
  3. 或者,您也可以在「查詢」建立工具中複製下列查詢。

    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"
    
  4. 按一下「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 的健康狀態變更記錄

如要查看特定代管執行個體的記錄項目,請使用Cloud de Confiance 控制台、gcloud CLI 或 REST。

控制台

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

    前往 Logs Explorer

  2. 在「查詢」建立工具中複製下列查詢。

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

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 執行個體健康狀態的變化頻率。

如要建立指標並監控變更,請按照下列步驟操作:

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

    前往 Logs Explorer

  2. 在「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"
    
  3. 在「查詢結果」部分,依序點選「動作」和「建立指標」。

  4. 在「建立記錄指標」頁面中,執行下列操作:

    1. 將「指標類型」設為「計數器」。
    2. 輸入「記錄指標名稱」,例如 health-mig-xyzq。

      「建立篩選器」部分會顯示「Logs Explorer」的記錄查詢。您也可以在篩選器中新增 severity>=WARNING,只納入 UNHEALTHY 和 TIMEOUT 等中斷狀態,藉此設定指標的篩選條件。

    3. 在「標籤」下方,按一下「新增標籤」。

    4. 輸入標籤名稱,例如 health_state。

    5. 將「標籤類型」設為 STRING。

    6. 將「Field name」(欄位名稱) 設為 jsonPayload.instanceHealthStateChange.detailedHealthState。這樣一來,您就能區分不同的健康狀態變化。

    7. 按一下「完成」即可新增標籤。

    8. 點選「建立指標」。

  5. 前往「記錄指標」頁面,然後找出新建立的指標。

  6. 按一下指標列中的選單 ,然後選取「在 Metrics Explorer 中查看」。「指標探索器」隨即開啟,並顯示代表查詢中指定 VM 執行個體健康狀態變化的圖表。

監控 MIG 中所有 VM 的健康狀態變化

您可以建立指標,追蹤受管理執行個體的健康狀態變化,藉此監控所有受管理執行個體的健康狀態變化。

如要建立指標並監控變更,請按照下列步驟操作:

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

    前往 Logs Explorer

  2. 在「查詢」產生器中輸入下列查詢,並使用專案 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"
    
  3. 在「查詢結果」部分,依序點選「動作」和「建立指標」。

  4. 在「建立記錄指標」頁面中,執行下列操作:

    1. 將「指標類型」設為「計數器」。
    2. 輸入「記錄指標名稱」,例如 health-mig-xyzq。
    3. 在「標籤」下方,按一下「新增標籤」。
    4. 輸入標籤名稱,例如 health_state。
    5. 將「標籤類型」設為 STRING。
    6. 將「欄位名稱」設為 jsonPayload.instanceHealthStateChange.detailedHealthState。這樣您就能區分不同的健康狀態變化。
    7. 按一下「完成」即可新增標籤。
    8. 點選「建立指標」。
  5. 前往「記錄指標」頁面,然後 找出新建立的指標。

  6. 按一下指標列中的選單 ,然後選取「在 Metrics Explorer 中查看」。「指標探索器」會開啟,並顯示代表查詢中指定代管執行個體群組內所有 VM 執行個體健康狀態變化的圖表。

找出經常處於健康狀態不良的 VM

您可以建立指標,追蹤 MIG 中所有 VM 執行個體的健康狀態變化,並依執行個體分組指標,找出經常進入 UNHEALTHY 狀態的問題 VM。

如要建立指標並依執行個體分組,請按照下列步驟操作:

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

    前往 Logs Explorer

  2. 在「查詢」產生器中輸入下列查詢,並使用專案 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"
    
  3. 在「查詢結果」部分,依序點選「動作」和「建立指標」。

  4. 在「建立記錄指標」頁面中,執行下列操作:

    1. 將「指標類型」設為「計數器」。
    2. 輸入「記錄指標名稱」,例如 health-mig-xyzq。
    3. 在「標籤」下方,按一下「新增標籤」。
    4. 輸入標籤名稱,例如 health_state。
    5. 將「標籤類型」設為 STRING。
    6. 將「欄位名稱」設為 jsonPayload.instanceHealthStateChange.detailedHealthState。這樣您就能區分不同的健康狀態變化。
    7. 按一下「完成」即可新增標籤。
    8. 同樣地,新增第二個標籤 (例如 instance),並將「欄位名稱」設為 jsonPayload.instanceHealthStateChange.instance。
    9. 點選「建立指標」。
  5. 前往「記錄指標」頁面,然後找出新建立的指標。

  6. 按一下指標列中的選單 ,然後選取「在 Metrics Explorer 中查看」。「指標探索器」會開啟,並顯示代表查詢中指定代管執行個體群組內所有 VM 執行個體健康狀態變化的圖表。

  7. 將「Group By」(分組依據) 設為 instance,即可查看每個執行個體的健康狀態變更總數。

健康狀態變更次數最多的執行個體,就是最常進入健康狀態不良的執行個體。

檢查導致自動修復嘗試的原因

如要找出自動修復嘗試的原因,請針對特定 VM 執行個體篩選記錄檔中的 repair 作業。

如要篩選維修作業,請按照下列步驟操作:

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

    前往 Logs Explorer

  2. 在「查詢」產生器中輸入下列查詢,並使用專案 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$"
    
  3. 按一下「Run query」(執行查詢)。「Query results」(查詢結果) 會顯示 VM 的所有自動修復嘗試,以及 protoPayload.status.message 中的自動修復原因。

檢查 VM 的自動修復功能是否成功

如要瞭解 VM 執行個體的自動修復嘗試是否成功,請依 VM 執行個體名稱篩選 repair 作業和健康狀態變更的記錄。如果執行修復作業後,執行個體的健康狀態變更為 HEALTHY,您會看到相應的健康狀態變更記錄。步驟如下:

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

    前往 Logs Explorer

  2. 在「查詢」產生器中輸入下列查詢,並使用專案 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 執行個體的所有健康狀態變化。

    在「查詢結果」中,修復作業後不久,detailedHealthState 設為 HEALTHY 的健康狀態變更事件,表示自動修復嘗試成功。

判斷 MIG 的初始延遲時間值

有了 VM 執行個體健康狀態記錄,就能更輕鬆地為 MIG 自動修復功能判斷適當的初始延遲值。您可以透過記錄,觀察 instances.insert 作業完成後,到收到群組中一組執行個體的第一個正常訊號之間的時間。這個時間間隔會顯示執行個體完全啟動所需的時間。由於部分 VM 的啟動速度可能較慢,因此 Google 建議在自動修復政策中指定初始延遲時,為觀察到的初始化時間 (從插入作業到正常狀態) 增加一些緩衝時間。

如要測量插入執行個體作業與執行個體恢復正常之間的間隔時間,請依據 VM 執行個體名稱,查詢 insert 作業和健康狀態變更記錄。使用這兩項作業的時間戳記,計算執行個體的初始化時間。步驟如下:

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

    前往 Logs Explorer

  2. 在「查詢」產生器中輸入下列查詢,並使用專案 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 的所有健康狀態變化。

    在「查詢結果」中,插入作業後不久,健康狀態變更事件的時間戳記會設為 HEALTHY,detailedHealthState 顯示這個 VM 的啟動時間。

  3. 針對更多 VM 重複執行上述步驟,以取得初始延遲參數的更準確近似值。