監控 VM 健康狀態變更


本文件說明如何查看及讀取代管執行個體群組 (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

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    For more information, see Authenticate for using REST in the Google Cloud authentication documentation.

定價

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

如要避免產生記錄成本,您可以停用健康狀態變更記錄。

查看健康狀態變更記錄

如果健康狀態變更記錄仍處於啟用狀態,那麼只要受管理執行個體的健康狀態發生變更,Compute Engine 就會將記錄項目寫入平台記錄。您可以查看專案、特定 MIG 或特定管理執行個體的這些記錄。

查看專案或 MIG 的記錄檔

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

主控台

  1. 前往 Google Cloud 控制台的「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

如要查看特定 Managed Instance Group 的所有健康狀態變更記錄,請使用下列指令:

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

如要查看特定 Managed Instance Group 的健康狀態變更記錄,請使用下列指令:

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。

主控台

  1. 前往 Google Cloud 控制台的「Logs Explorer」(記錄檔探索工具)

    前往「Logs Explorer」

  2. 在「Query」建構工具中複製以下查詢。

    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. 前往 Google Cloud 控制台的「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
    labels."compute.googleapis.com/instance_name"="INSTANCE_NAME"
    
  3. 在「查詢結果」部分,依序點選「動作」和「建立指標」

  4. 在「Create logs metric」頁面中執行下列操作:

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

      「Build filter」部分會顯示 Logs Explorer 中的記錄查詢。您也可以將 severity>=WARNING 新增至篩選器,藉此設定指標的篩選器,只考量中斷狀態,例如 UNHEALTHYTIMEOUT

    3. 按一下「標籤」下方的「新增標籤」

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

    5. 將「Label type」設為 STRING

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

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

    8. 點選「建立指標」

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

  6. 按一下指標資料列中的選單 ,然後選取「在 Metrics Explorer 中查看」。「Metrics explorer」會開啟並顯示圖表,代表您在查詢中指定的 VM 執行個體的健康狀態變更。

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

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

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

  1. 前往 Google Cloud 控制台的「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. 在「Create logs metric」頁面中執行下列操作:

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

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

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

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

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

  1. 前往 Google Cloud 控制台的「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. 在「Create logs metric」頁面中執行下列操作:

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

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

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

總體而言,健康狀態變更次數最多的執行個體,就是最常變為不健康的執行個體。

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

您可以篩選指定 VM 執行個體的 repair 作業記錄,找出導致自動修復嘗試的原因。

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

  1. 前往 Google Cloud 控制台的「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] (執行查詢)。「查詢結果」會顯示 VM 上所有自動修復嘗試,並在 protoPayload.status.message 中顯示自動修復的原因。

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

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

  1. 前往 Google Cloud 控制台的「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 的啟動速度可能比其他 VM 慢,因此在指定自動修復政策的初始延遲時間時,Google 建議您在觀察到的初始化時間 (從插入作業到健康狀態) 中加入一些緩衝時間。

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

  1. 前往 Google Cloud 控制台的「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 的所有健康狀態變更。

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

  3. 針對其他幾個 VM 重複上述步驟,以便取得初始延遲參數的更準確近似值。