設定以應用程式為基礎的健康狀態檢查和自動修復功能


本文說明如何設定以應用程式為準的健康狀態檢查,以便自動修復受管理的執行個體群組 (MIG) 中的 VM。並說明如何執行下列操作:使用不含自動修復功能的健康狀態檢查、移除健康狀態檢查、查看自動修復政策,以及檢查每個 VM 的健康狀態。

您可以設定以應用程式為基礎的健康狀態檢查,驗證 VM 上的應用程式是否如預期回應。如果您設定的健康狀態檢查偵測到 VM 上的應用程式沒有回應,MIG 就會將該 VM 標示為「不健康」並進行修復。根據以應用程式為準的健康狀態檢查修復 VM 的動作稱為「自動修復」

您也可以關閉 MIG 中的修復功能,這樣一來,您就可以使用健康狀態檢查,而不會觸發自動修復功能。

如要進一步瞭解 MIG 中的修復作業,請參閱「關於修復高可用性 VM」。

事前準備

  • 如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 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.

    Terraform

    To use the Terraform samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.

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

    3. To initialize the gcloud CLI, run the following command:

      gcloud init
    4. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    For more information, see Set up authentication for a local development environment.

    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.

定價

設定以應用程式為基礎的健康狀態檢查後,只要 VM 的健康狀態發生變更,Compute Engine 就會在 Cloud Logging 中寫入記錄項目。 Cloud Logging 每個月都會提供免費配額,超出配額後,記錄功能就會依據資料量計費。為避免產生費用,您可以停用健康狀態變更記錄檔。

設定以應用程式為基礎的健康狀態檢查和自動修復功能

如要在 MIG 中設定以應用程式為準的健康狀態檢查和自動修復功能,請執行下列操作:

  1. 如果尚未建立健康狀態檢查,請先完成這項作業。
  2. 在 MIG 中設定自動修復政策,以便套用健康狀態檢查。

建立健康狀態檢查

一項健康狀態檢查最多可以套用到 50 個 MIG。如果超過 50 個群組,請建立多個健康狀態檢查。

以下範例說明如何建立自動修復的健康狀態檢查。您可以為 MIG 中的自動修復功能建立區域全球健康狀態檢查。在這個範例中,您會建立全域健康狀態檢查,藉此查看通訊埠 80 的網路伺服器回應。如要讓健康狀態檢查探測器能連線到網路伺服器,請設定防火牆規則。

主控台

  1. 建立比負載平衡健康狀態檢查更為保守的自動修復健康狀態檢查。

    例如,建立會在通訊埠 80 中尋找回應的健康狀態檢查,且這個檢查必須能容忍幾次失敗,之後才將 VM 標示為 UNHEALTHY 並重新建立。在這個範例中,如果健康檢查成功傳回一次,VM 就會標示為健康。如果健康狀態檢查連續 3 次未成功傳回,VM 就會標示為不健康。

    1. 前往 Google Cloud 控制台中的「Create a health check」(建立健康狀態檢查) 頁面。

      前往「建立健康狀態檢查」

    2. 為健康狀態檢查指定名稱,例如 example-check

    3. 選取「範圍」。您可以選取「地區性」或「全球」。在本例中,請選取「Global」

    4. 針對「Protocol」(通訊協定)欄,確認 [HTTP] 已選取。

    5. 在「Port」(通訊埠) 欄中,輸入 80

    6. 在「Health criteria」部分中,提供下列值:

      1. 在「Check interval」(檢查時間間隔) 欄中,輸入 5
      2. 在「Timeout」(逾時) 欄中,輸入 5
      3. 設定「Healthy threshold」(良好健康狀態判定門檻),決定系統必須連續傳回多少次成功執行的健康狀態檢查結果,才能將不良的 VM 標示為健康狀態良好。在這個範例中,請輸入 1
      4. 設定「Unhealthy threshold」(不良健康狀態判定門檻),決定系統必須連續傳回多少次失敗的健康狀態檢查,才能將健康的 VM 標示為不良。在這個範例中,請輸入 3
    7. 按一下 [Create] (建立),建立健康狀態檢查。

  2. 建立防火牆規則,允許健康狀態檢查探測器連線至應用程式。

    健康狀態檢查探測器的來源位址範圍介於 130.211.0.0/2235.191.0.0/16 之間,因此請確保網路防火牆規則允許健康狀態檢查連線。在這個範例中,MIG 使用 default 網路,且 VM 使用通訊埠 80 接聽。如果尚未在預設網路開啟通訊埠 80,請建立防火牆規則。

    1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。

      前往「防火牆政策」

    2. 點按「建立防火牆規則」

    3. 輸入防火牆規則的「Name」(名稱)。例如:allow-health-check

    4. 在「Network」(網路) 中選取 default

    5. 在「Targets」(目標) 中選取 All instances in the network

    6. 在「Source filter」(來源篩選器) 中選取 IPv4 ranges

    7. 在「Source IPv4 ranges」(來源 IPv4 範圍) 中輸入 130.211.0.0/2235.191.0.0/16

    8. 在「Protocols and ports」(通訊協定和通訊埠) 中,選取「Specified protocols and ports」(指定的通訊協定和通訊埠),然後執行下列操作:

      1. 選取「TCP」
      2. 在「Ports」欄位中輸入 80
    9. 按一下 [建立]。

gcloud

  1. 建立比負載平衡健康狀態檢查更為保守的自動修復健康狀態檢查。

    例如,建立會在通訊埠 80 中尋找回應的健康狀態檢查,且這個檢查必須能容忍幾次失敗,之後才將 VM 標示為 UNHEALTHY 並重新建立。在這個範例中,如果 VM 成功傳回一次,健康狀態就會標示為良好。如果連續 3 次未成功傳回,VM 的健康狀態就會標示為不良。下列指令會建立全域健康狀態檢查。

    gcloud compute health-checks create http example-check --port 80 \
       --check-interval 30s \
       --healthy-threshold 1 \
       --timeout 10s \
       --unhealthy-threshold 3 \
       --global
    
  2. 建立防火牆規則,允許健康狀態檢查探測器連線至應用程式。

    健康狀態檢查探測器的來源位址範圍介於 130.211.0.0/2235.191.0.0/16 之間,因此請確認防火牆規則允許健康狀態檢查連線。在這個範例中,MIG 使用 default 網路,且 VM 使用通訊埠 80 接聽。如果預設網路尚未開啟通訊埠 80,請建立防火牆規則。

    gcloud compute firewall-rules create allow-health-check \
        --allow tcp:80 \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --network default
    

Terraform

  1. 使用 google_compute_http_health_check 資源建立健康狀態檢查。

    例如,建立會在通訊埠 80 中尋找回應的健康狀態檢查,且這個檢查必須能容忍幾次失敗,之後才將 VM 標示為 UNHEALTHY 並重新建立。在這個範例中,如果 VM 成功傳回一次,健康狀態就會標示為良好。如果連續 3 次未成功傳回,VM 的健康狀態就會標示為不良。以下要求會建立全域健康狀態檢查。

    resource "google_compute_http_health_check" "default" {
      name                = "example-check"
      timeout_sec         = 10
      check_interval_sec  = 30
      healthy_threshold   = 1
      unhealthy_threshold = 3
      port                = 80
    }
  2. 使用 google_compute_firewall 資源建立防火牆。

    健康狀態檢查探測器的來源位址範圍介於 130.211.0.0/2235.191.0.0/16 之間,因此請確認防火牆規則允許健康狀態檢查連線。在這個範例中,MIG 使用 default 網路,且 VM 使用通訊埠 80 接聽。如果尚未在預設網路開啟通訊埠 80,請建立防火牆規則。

    resource "google_compute_firewall" "default" {
      name          = "allow-health-check"
      network       = "default"
      source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
      allow {
        protocol = "tcp"
        ports    = [80]
      }
    }

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

REST

  1. 建立比負載平衡健康狀態檢查更為保守的自動修復健康狀態檢查

    例如,建立會在通訊埠 80 中尋找回應的健康狀態檢查,且這個檢查必須能容忍幾次失敗,之後才將 VM 標示為 UNHEALTHY 並重新建立。在這個範例中,如果 VM 成功傳回一次,健康狀態就會標示為良好。如果連續 3 次未成功傳回,VM 的健康狀態就會標示為不良。以下要求會建立全域健康狀態檢查。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks
    
    {
     "name": "example-check",
     "type": "http",
     "port": 80,
     "checkIntervalSec": 30,
     "healthyThreshold": 1,
     "timeoutSec": 10,
     "unhealthyThreshold": 3
    }
    
  2. 建立防火牆規則,允許健康狀態檢查探測器連線至應用程式。

    健康狀態檢查探測器的來源位址範圍介於 130.211.0.0/2235.191.0.0/16 之間,因此請確認防火牆規則允許健康狀態檢查連線。在這個範例中,MIG 使用 default 網路,且 VM 使用通訊埠 80 接聽。如果尚未在預設網路開啟通訊埠 80,請建立防火牆規則。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    
    {
     "name": "allow-health-check",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default",
     "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
     ],
     "allowed": [
      {
       "ports": [
        "80"
       ],
       "IPProtocol": "tcp"
      }
     ]
    }
    

    PROJECT_ID 替換為您的專案 ID

在 MIG 中設定自動修復政策

在 MIG 中,您只能設定一項自動修復政策來套用健康狀態檢查。

您可以使用區域全域健康狀態檢查,為 MIG 中的自動修復功能進行檢查。地區健康狀態檢查可減少跨區域依附元件,並有助於達成資料落地。如果您想在多個區域的 MIG 中使用相同的健康狀態檢查,全域健康狀態檢查就很方便。

設定自動修復政策前:

  • 如果您尚未建立健康狀態檢查,請建立一個
  • 如果您想在設定新健康狀態檢查時避免自動修復功能誤觸發,則必須先在 MIG 中關閉修復功能,然後再設定自動修復政策。

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組)

  2. 在清單的「名稱」欄下方,按一下要套用健康狀態檢查的 MIG 名稱。

  3. 按一下「編輯」即可修改這個 MIG。

  4. 在「VM 執行個體生命週期」部分的「自動修復」下方,選取全球或區域性的「健康狀態檢查」

  5. 變更或保留「Initial delay」(初始延遲) 設定。

    初始延遲是指新 VM 初始化及執行啟動指令碼所需的秒數。在 VM 的初始延遲期間,MIG 會忽略未成功的健康狀態檢查,因為 VM 可能處於啟動程序中。這麼做可避免 MIG 提早重新建立 VM。如果健康狀態檢查在初始延遲期間收到健康回應,表示啟動程序已完成,VM 也已就緒。當 VM 的 currentAction 欄位變更為 VERIFYING 時,初始延遲計時器會啟動。初始延遲的值必須介於 0 至 3600 秒之間。在控制台中,預設值為 300 秒。

  6. 按一下 [Save] (儲存) 套用您的變更。

gcloud

如要在現有 MIG 中設定自動修復政策,請使用 update 指令

舉例來說,您可以使用下列指令,在現有的區域 MIG 中設定自動修復政策:

gcloud compute instance-groups managed update MIG_NAME \
    --health-check HEALTH_CHECK_URL \
    --initial-delay INITIAL_DELAY \
    --zone ZONE

如要在建立 MIG 時設定自動修復政策,請使用 create 指令

舉例來說,建立區域性 MIG 時,請使用下列指令設定自動修復政策:

gcloud compute instance-groups managed create MIG_NAME \
    --size SIZE \
    --template INSTANCE_TEMPLATE_URL \
    --health-check HEALTH_CHECK_URL \
    --initial-delay INITIAL_DELAY \
    --zone ZONE

更改下列內容:

  • MIG_NAME:您要設定自動修復功能的 MIG 名稱。
  • SIZE:群組中的 VM 數量。
  • INSTANCE_TEMPLATE_URL:您要用於在群組中建立 VM 的執行個體範本的部分網址。例如:
    • 區域執行個體範本:projects/example-project/regions/us-central1/instanceTemplates/example-template
    • 全域執行個體範本:projects/example-project/global/instanceTemplates/example-template
  • HEALTH_CHECK_URL:您要設定自動修復功能的健康檢查的部分網址。如要使用區域健康狀態檢查,您必須提供區域健康狀態檢查的部分網址。例如:
    • 地區健康狀態檢查:projects/example-project/regions/us-central1/healthChecks/example-health-check
    • 全域健康狀態檢查:projects/example-project/global/healthChecks/example-health-check
  • INITIAL_DELAY:新虛擬機器人需要多少秒才能初始化及執行開機指令碼。在 VM 的初始延遲期間,MIG 會忽略未成功的健康狀態檢查,因為 VM 可能處於啟動程序中。這樣可避免 MIG 提早重新建立 VM。如果健康狀態檢查在初始延遲期間收到健康狀態回應,表示啟動程序已完成,且 VM 已就緒。當 VM 的 currentAction 欄位變更為 VERIFYING 時,初始延遲計時器會啟動。初始延遲的值必須介於 03600 秒之間。預設值為 0
  • ZONE:MIG 所在區域。如為區域 MIG,請使用 --region 標記。

Terraform

如要在 MIG 中設定自動修復政策,請使用 auto_healing_policies 區塊。

以下範例會在區域性 MIG 中設定自動修復政策。如要進一步瞭解範例中使用的資源,請參閱 google_compute_instance_group_manager。如果是區域 MIG,請使用 google_compute_region_instance_group_manager 資源

resource "google_compute_instance_group_manager" "default" {
  name               = "igm-with-hc"
  base_instance_name = "test"
  target_size        = 3
  zone               = "us-central1-f"
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  auto_healing_policies {
    health_check      = google_compute_http_health_check.default.id
    initial_delay_sec = 30
  }
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

REST

如要在現有的 MIG 中設定自動修復政策,請使用 patch 方法,如下所示:

舉例來說,您可以發出下列呼叫,在現有的區域性 MIG 中設定自動修復功能:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME

{
  "autoHealingPolicies": [
  {
    "healthCheck": "HEALTH_CHECK_URL",
    "initialDelaySec": INITIAL_DELAY
  }
  ]
}

如要在建立 MIG 時設定自動修復政策,請使用 insert 方法,如下所示:

舉例來說,建立區域 MIG 時,請發出下列呼叫來設定自動修復政策:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers

{
  "name": "MIG_NAME",
  "targetSize": SIZE,
  "instanceTemplate": "INSTANCE_TEMPLATE_URL"
  "autoHealingPolicies": [
    {
      "healthCheck": "HEALTH_CHECK_URL",
      "initialDelaySec": INITIAL_DELAY
    }
  ],
}

更改下列內容:

  • PROJECT_ID:您的專案 ID
  • MIG_NAME:您要設定自動修復功能的 MIG 名稱。
  • SIZE:群組中的 VM 數量。
  • INSTANCE_TEMPLATE_URL:您要用於在群組中建立 VM 的執行個體範本的部分網址。例如:
    • 區域執行個體範本:projects/example-project/regions/us-central1/instanceTemplates/example-template
    • 全域執行個體範本:projects/example-project/global/instanceTemplates/example-template
  • HEALTH_CHECK_URL:您要設定自動修復功能的健康檢查的部分網址。例如:
    • 地區健康狀態檢查:projects/example-project/regions/us-central1/healthChecks/example-health-check
    • 全域健康狀態檢查:projects/example-project/global/healthChecks/example-health-check
  • INITIAL_DELAY:新虛擬機器人需要多少秒才能初始化及執行開機指令碼。在 VM 的初始延遲期間,MIG 會忽略未成功的健康狀態檢查,因為 VM 可能處於啟動程序中。這樣可避免 MIG 提早重新建立 VM。如果健康狀態檢查在初始延遲期間收到健康狀態回應,表示啟動程序已完成,且 VM 已就緒。當 VM 的 currentAction 欄位變更為 VERIFYING 時,初始延遲計時器會啟動。初始延遲的值必須介於 03600 秒之間。預設值為 0
  • ZONE:MIG 所在區域。如果是區域 MIG,請在網址中使用 regions/REGION

自動修復設定完成後,自動修復功能可能要過 10 分鐘後,才會開始監控群組中的 VM。監控開始後,Compute Engine 會開始根據您的自動修復設定,將 VM 標示為健康 (或重新建立)。舉例來說,如果您設定初始延遲時間為 5 分鐘、健康狀態檢查間隔為 1 分鐘,且健康狀態門檻為 1 次檢查,時間軸就會如下所示:

  • 自動修復功能會延遲 10 分鐘,才會開始監控群組中的 VM
  • 加上設定的初始延遲時間 5 分鐘
  • + 檢查間隔 1 分鐘 * 健康門檻 (60 秒 * 1)
  • = 在 VM 標示為健康狀態或重新建立前 16 分鐘

如果您在設定自動修復政策前已關閉 MIG 中的修復功能,則可以監控 VM 健康狀態,確認健康狀態檢查是否正常運作,然後將 MIG 設回修復 VM

使用不含自動修復功能的健康狀態檢查

您可以關閉 MIG 中的修復功能,使用在 MIG 中設定的健康狀態檢查,不必使用自動修復功能。如果您只想使用健康狀態檢查來監控應用程式健康狀態,或是想根據健康狀態檢查實作自己的修復邏輯,這項功能就很實用。

如要將 MIG 設回修復不健康的 VM,請參閱「設定 MIG 以修復失敗和不健康的 VM」。

移除健康狀態檢查

您可以按照下列步驟,移除在自動修復政策中設定的健康狀態檢查:

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組)

    1. 按一下要移除健康狀態檢查的 MIG 名稱。
    2. 按一下「編輯」即可修改這個 MIG。
    3. 在「VM 執行個體生命週期」部分的「自動修復」下方,選取「不執行健康狀態檢查」
    4. 點選「儲存」來套用變更。

gcloud

如要移除自動修復政策中的健康狀態檢查設定,請在 update 指令中使用 --clear-autohealing 旗標,如下所示:

gcloud compute instance-groups managed update MIG_NAME \
    --clear-autohealing

MIG_NAME 替換為 MIG 的名稱。

REST

如要移除自動修復政策中的健康狀態檢查設定,請將自動修復政策設為空白值。

舉例來說,如要移除區域 MIG 中的健康狀態檢查,請提出以下要求:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME

{
  "autoHealingPolicies": [
    {}
  ]
}

更改下列內容:

  • PROJECT_ID:您的專案 ID
  • MIG_NAME:您要設定自動修復功能的 MIG 名稱。
  • ZONE:MIG 所在區域。如果是區域 MIG,請使用 regions/REGION

查看 MIG 中的自動修復政策

您可以按照下列步驟查看 MIG 的自動修復政策:

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組)

  2. 按一下要查看自動修復政策的 MIG 名稱。

  3. 前往「詳細資料」分頁。

  4. 在「VM 執行個體生命週期」部分,「自動修復」欄位會顯示自動修復政策中設定的健康狀態檢查和初始延遲時間。

gcloud

如要在 MIG 中查看自動修復政策,請使用下列指令:

gcloud compute instance-groups managed describe MIG_NAME \
    --format="(autoHealingPolicies)"

MIG_NAME 替換為 MIG 的名稱。

以下是輸出內容範例:

autoHealingPolicies:
  healthCheck: https://www.googleapis.com/compute/v1/projects/example-project/global/healthChecks/example-health-check
  initialDelaySec: 300

REST

如要查看 MIG 中的自動修復政策,請使用下列 REST 方法:

舉例來說,您可以提出下列要求,查看區域 MIG 中的自動修復政策:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME

在回應主體中檢查 autoHealingPolicies[] 物件。

以下是回應範例:

{
  ...
  "autoHealingPolicies": [
    {
      "healthCheck": "https://www.googleapis.com/compute/v1/projects/example-project/global/healthChecks/example-health-check",
      "initialDelaySec": 300
    }
  ],
  ...
}

更改下列內容:

  • PROJECT_ID:您的專案 ID
  • MIG_NAME:您要設定自動修復功能的 MIG 名稱。
  • ZONE:MIG 所在區域。如果是區域 MIG,請使用 regions/REGION

查看狀態

在 MIG 中設定以應用程式為準的健康狀態檢查後,您可以使用下列方式驗證 VM 是否正在執行,以及應用程式是否有回應:

檢查 VM 是否正常運作

如果您在 MIG 中設定了以應用程式為準的健康狀態檢查,則可以檢視每個受管理的執行個體的健康狀態。

檢查代管執行個體的健康狀態,以便瞭解下列資訊:

  • 找出未修復的 VM 健康狀態不良。即使 VM 在下列情況中已診斷為不良狀態,也可能無法立即修復:
    • VM 仍在啟動中,並且尚未經過初始延遲。
    • 有大量健康狀態不良的執行個體正在修復中。MIG 會延遲進一步的自動修復操作,以確保群組繼續執行執行個體的子集。
  • 偵測健康狀態檢查設定錯誤。舉例來說,如果執行個體回報健康狀態為 TIMEOUT,即可偵測到設定錯誤的防火牆規則,或無效的應用程式健康狀態檢查端點。
  • 透過測量 VM 轉換為 RUNNING 狀態到 VM 轉換為 HEALTHY 健康狀態之間的時間長度,判斷要設定的初始延遲值。您可以透過輪詢 list-instances 方法,或是觀察 instances.insert 作業與收到第一個正常訊號之間的時間來測量這個時間差距。

可使用主控台gcloud 指令列工具或 REST 檢視健康狀態。

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組)

  2. 在清單的「Name」欄下方,按一下要檢查的 MIG 名稱。系統隨即開啟一個頁面,頁面中包含執行個體群組的屬性及群組包含之 VM 的清單。

  3. 如果 VM 健康狀態不良,您可在「健康狀態檢查狀態」欄位中檢視 VM 的健康狀態。

gcloud

使用 list-instances 子指令。

gcloud compute instance-groups managed list-instances instance-group
NAME              ZONE                  STATUS   HEALTH_STATE  ACTION  INSTANCE_TEMPLATE                            VERSION_NAME  LAST_ERROR
igm-with-hc-fvz6  europe-west1          RUNNING  HEALTHY       NONE    my-template
igm-with-hc-gtz3  europe-west1          RUNNING  HEALTHY       NONE    my-template

HEALTH_STATE 欄位會顯示每個 VM 的健康狀態。

REST

如果是區域 MIG,請對 listManagedInstances 方法建構 POST 要求:

POST https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers/instance-group/listManagedInstances

如果是區域 MIG,請使用區域 MIG listManagedInstances 方法:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group/listManagedInstances

要求會傳回類似以下的回應,其中包含每個代管執行個體的 instanceHealth 欄位。

{
 "managedInstances": [
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/example-group-5485",
   "instanceStatus": "RUNNING",
   "currentAction": "NONE",
   "lastAttempt": {
   },
   "id": "6159431761228150698",
   "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/project-id/global/instanceTemplates/example-template",
   "version": {
    "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/project-id/global/instanceTemplates/example-template"
   },
   "instanceHealth": [
    {
     "healthCheck": "https://www.googleapis.com/compute/v1/projects/project-id/global/healthChecks/http-basic-check",
     "detailedHealthState": "HEALTHY"
    }
   ]
  },
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/example-group-sfdp",
   "instanceStatus": "STOPPING",
   "currentAction": "DELETING",
   "lastAttempt": {
   },
   "id": "6622324799312181783",
   "instanceHealth": [
    {
     "healthCheck": "https://www.googleapis.com/compute/v1/projects/project-id/global/healthChecks/http-basic-check",
     "detailedHealthState": "TIMEOUT"
    }
   ]
  }
 ]
}

健康狀態

可用的 VM 健康狀態如下:

  • HEALTHY:可連線至 VM,可建立到應用程式健康狀態檢查端點的連線,且回應符合由健康狀態檢查定義的需求。
  • DRAINING:VM 正在耗盡。有時間完成 VM 的現有連線,但系統會拒絕新的連線。
  • UNHEALTHY:可連線至 VM,但不符合健康狀態檢查所定義的需求。
  • TIMEOUT:無法連線至 VM,無法建立與應用程式健康狀態檢查端點的連線,或是 VM 上的伺服器在指定的逾時時間內未回應。例如,原因可能是防火牆規則設定錯誤,或是 VM 上的伺服器應用程式超載。
  • UNKNOWN:健康狀態檢查系統目前不知道該 VM 或其健康狀態為何。系統可能要過 10 分鐘後,才會開始監控 MIG 中的新 VM。

新虛擬機器會傳回 UNHEALTHY 狀態,直到健康狀態檢查系統對其進行驗證。

VM 是否已修復取決於其健康狀態:

  • 如果 VM 的健康狀態為 UNHEALTHYTIMEOUT,且已超過初始化期間,則 MIG 會立即嘗試修復。
  • 如果 VM 的健康狀態為 UNKNOWN,MIG 不會立即修復。這是為了防止不必要的 VM 修復作業,因為健康狀態檢查訊號會暫時無法使用。

在下列情況下,自動修復嘗試可能會延遲:

  • 連續多次修復後,VM 的健康狀態仍為不良。
  • 群組中健康狀態不良的 VM 佔了絕大部分。

我們想要瞭解您的用途、難題或 VM 健康狀態值的相關意見。歡迎透過 mig-discuss@google.com 與我們的團隊分享意見。

查看 VM 的目前動作

當 MIG 正在建立 VM 執行個體時,MIG 會將該執行個體的唯讀 currentAction 欄位設為 CREATING。如果群組已附加自動修復政策,則在 VM 建立完成且開始運作後,MIG 會將執行個體的目前動作設為 VERIFYING,並開始探測 VM 的應用程式。如果應用程式在啟動期間內通過這項初始健康狀態檢查,則 VM 會通過驗證,且 MIG 會將 VM 的 currentAction 欄位變更為 NONE

如要查看 VM 上的目前動作,請參閱「查看 VM 上的目前動作」。

檢查 MIG 是否穩定

在群組層級,Compute Engine 會在名稱為 status 的唯讀欄位中填入值,該欄位包含isStable 標記。

如果群組中的所有 VM 均為執行中且健康狀態良好 (也就是說,每個代管執行個體的 currentAction 欄位都設為 NONE),則 MIG 會將 status.isStable 欄位設為 true。請注意,MIG 的穩定性取決於自動修復政策以外的群組設定;舉例來說,假設您的群組能自動調度資源,且目前正在擴充或縮減資源,則因為自動配置器作業的關係,MIG 會將 status.isStable 欄位設為 false

如要檢查 MIG 的 status.isStable 欄位值,請參閱「檢查 MIG 是否穩定」。

查看自動修復作業記錄

您可以使用 gcloud CLI 或 REST 查看過去的自動修復事件。

gcloud

使用 gcloud compute operations list 指令搭配篩選器,即可單獨查看專案中的自動修復事件。

gcloud compute operations list --filter='operationType~compute.instances.repair.*'

如要進一步瞭解特定修復作業,請使用 describe 指令。例如:

gcloud compute operations describe repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5 --zone us-east1-b

REST

針對區域 MIG,請向 regionOperations 資源提交 GET 要求,並加入篩選器,將輸出清單的範圍限定為 compute.instances.repair.* 事件。

GET https://compute.googleapis.com/compute/v1/projects/project-id/region/region/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

如果是區域 MIG,請使用 zoneOperations 資源。

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

如要進一步瞭解特定修復作業,請針對該作業提交 GET 要求。例如:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/operations/repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5

什麼是良好的自動修復健康狀態檢查

用於自動修復功能的健康狀態檢查必須較為保守,這樣才不會預先刪除及重新建立執行個體。如果自動修復程式的健康狀態檢查過於嚴格,自動修復程式可能會將忙碌的執行個體誤判為失敗的執行個體,不必要地加以重新啟動,因而降低了可用性。

  • unhealthy-threshold。應大於 1。最好將此值設為 3 或更大的值。這樣可防止發生如網路封包遺失等罕見失敗狀況。
  • healthy-threshold。值為 2 可以滿足大多數應用程式的需求。
  • timeout。將此時間值設為遠大於 (五倍以上) 預期回應時間。這樣可防止意外的延遲狀況 (例如執行個體忙碌運作或網路連線速度緩慢)。
  • check-interval。此值應介於 1 秒和兩倍的逾時值之間 (不會過長也不會過短)。當值過長時,就無法及時找出失敗的執行個體。如果過短,執行個體和網路可能會因每秒發送的大量健康狀態檢查探測器而變得非常忙碌。

後續步驟