根據 Stackdriver Monitoring 指標調度資源

您可以設定自動配置器根據下列指標類型執行資源調度:

  • 使用個別執行個體指標執行資源調度:在此情況下,所選指標提供的資料說明代管執行個體群組中每個執行個體的資源使用率。
  • 使用個別群組指標 (Beta 版) 執行資源調度:在此情況下,群組執行資源調度的依據指標,是與整個代管執行個體群組相關的值。

這些指標可以是 Stackdriver Monitoring 服務提供的標準指標,也可以是您建立的自訂 Stackdriver Monitoring 指標。

事前準備

個別執行個體指標

個別執行個體指標會單獨為群組中的每個執行個體提供資料。 這些指標提供的資料說明代管執行個體群組中每個執行個體的資源使用率。針對個別執行個體指標,執行個體群組大小無法縮減到 1 以下,因為自動配置器必須有至少一個執行中執行個體的相關指標才能操作。

如果您執行資源調度時,必須使用非屬個別執行個體特有的他種 Stackdriver 指標,或是偶爾要將執行個體群組規模縮減到零,則您可以將執行個體設定為改用個別群組指標執行資源調度。

標準個別執行個體指標

Stackdriver Monitoring 有一組標準指標,您可以用來監控虛擬機器執行個體。但是,並非所有標準指標都是自動配置器可以使用的有效使用率指標。

有效的資源調度使用率指標,應符合下列條件:

  • 標準指標必須包含 gce_instance 受控資源的資料。您可以使用 timeSeries.list API 呼叫來確認特定指標是否會匯出這個資源的資料。

  • 標準指標說明執行個體的忙碌程度;且指標值的增減,也會與群組中虛擬機器執行個體數成比例。

下面的指標無效,因為值不會根據使用率變更,且自動配置器無法使用該值來按比例執行資源調度:

compute.googleapis.com/instance/cpu/reserved_cores

在您選取要用於自動配置器的標準指標之後,可以設定依據該指標自動調度資源

自訂指標

您可以使用 Stackdriver Monitoring 建立自訂指標,並將自己的監控資料寫入 Stackdriver Monitoring 服務。這可讓您使用熟悉的資料結構與一致的查詢語法,同時存取標準 Cloud Platform 資料與您的自訂監控資料。如果您擁有自訂指標,可選擇根據來自這些指標的資料執行資源調度。

必備條件

為了使用自訂指標,您必須已執行下列操作:

  • 建立自訂指標。如要瞭解如何建立自訂指標,請參閱自訂指標說明文件
  • 設定代管執行個體群組,以便從代管執行個體群組中所有的執行個體匯出自訂指標。

選擇有效的自訂指標

並非所有自訂指標都可用於自動配置器。如要選擇有效的自訂指標,指標必須擁有下列所有屬性:

  • 指標必須是個別執行個體指標。指標必須個別匯出與每個特定 Compute Engine 執行個體相關的資料。
  • 匯出的個別執行個體值必須與 gce_instance 受控資源相關聯,且這個資源包含下列標籤:
    • zone,且具有執行個體所在區域的名稱。
    • instance_id,且具有指派給執行個體的唯一數值 ID 值。
  • 指標至少必須每 60 秒匯出資料一次。您可以低於 60 秒的頻率匯出資料,自動配置器將能夠更快地回應負載變更。如果匯出資料的間隔時間超過 60 秒,自動配置器可能無法足夠快速地回應負載變更。
  • 指標必須是有效使用率指標,這表示來自指標的資料可用來按比例增減虛擬機器數。
  • 指標必須匯出 int64double 資料值。

為了讓自動配置器與自訂指標搭配使用,您必須從代管執行個體群組中的所有執行個體匯出這個自訂指標的資料。

附註:您可以從執行個體內,針對中繼資料伺服器的 ID 屬性提出要求,來取得執行個體的數值 ID。例如,您可以在 curl 中執行這項操作:
curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google
如要進一步瞭解如何使用中繼資料伺服器,請參閱中繼資料伺服器一文。

設定依據個別執行個體監控指標自動調度資源

設定自動配置器採用標準或自訂指標的程序均相同。如要建立使用 Stackdriver Monitoring 指標的自動配置器,您必須提供指標識別碼、需要的目標使用率等級使用率目標類型。下文簡要說明其中的每一個屬性:

  • 指標 ID:要使用的指標名稱。如果您使用自訂指標,一開始建立指標時,您就已定義這個名稱。ID 的格式如下:

    custom.googleapis.com/path/to/metric
    

    如要進一步瞭解建立、瀏覽及讀取指標的資訊,請參閱使用自訂指標一文。

  • 目標使用率等級:自動配置器必須針對這個指標維持的目標使用率等級。這必須是正數。例如,24.51100 都是可接受的值。請注意,它與 CPU 和負載平衡使用率不同,這兩個使用率必須是介於 0.0 和 1.0 之間的浮點值。

  • 目標類型:這項屬性定義自動配置器如何計算從執行個體收集來的資料。可能的目標類型為:

    • GAUGE:自動配置器會計算在最後幾分鐘收集的資料平均值,並將這個值與自動配置器的目標使用率值進行比較。
    • DELTA_PER_MINUTE:自動配置器會計算每分鐘的平均成長率,並將這個值與目標使用率比較。
    • DELTA_PER_SECOND:自動配置器會計算每秒的平均成長率,並將這個值與目標使用率比較。

    如果您以秒為單位表示需要的目標使用率,建議您使用 DELTA_PER_SECOND;同樣的,如果您以分鐘為單位表示目標使用率,建議您使用 DELTA_PER_MINUTE,好讓自動配置器可以執行精確的比較。

主控台

針對地區與單一區域代管執行個體群組,設定自動調度資源的操作說明有所不同。地區代管執行個體群組不支援個別執行個體指標的篩選功能。

如要針對地區 (多區域) 代管執行個體群組設定自動調度資源:

  1. 前往執行個體群組頁面
  2. 如果您沒有執行個體群組,請建立一個執行個體群組。 或者,在清單中按一下執行個體群組的名稱,開啟執行個體群組詳細資料頁面。群組必須為地區群組。
  3. 在執行個體群組詳細資料頁面上,按一下 [編輯群組] 按鈕。
  4. 在「自動調度資源」底下,選取 [開啟] 以啟用自動調度資源。
  5. 在「自動配置依據」區段,選取 [Stackdriver Monitoring 指標]
  6. 在「Metric identifier」(指標 ID) 部分,以下列格式輸入指標名稱:example.googleapis.com/path/to/metric
  7. 在「目標」區段,指定目標值。
  8. 在「目標類型」區段,指定與指標測量種類對應的目標類型。
  9. 在您準備好時儲存變更。

如要針對單一區域代管執行個體群組設定自動調度資源:

  1. 前往執行個體群組頁面
  2. 如果您沒有執行個體群組,請建立一個執行個體群組。 或者,按一下執行個體群組的名稱,開啟執行個體群組詳細資料頁面。執行個體群組必須是單一區域。
  3. 在執行個體群組詳細資料頁面上,按一下 [編輯群組] 按鈕。
  4. 在「自動調度資源」底下,選取 [開啟] 以啟用自動調度資源。
  5. 在「自動配置依據」區段,選取 [Stackdriver Monitoring 指標]
  6. 在「指標匯出範圍」區段,選取 [每個執行個體的時間序列] 以使用個別執行個體指標設定自動調度資源。
  7. 在「Metric identifier」(指標 ID) 部分,以下列格式輸入指標名稱:example.googleapis.com/path/to/metric
  8. 在「其他篩選器運算式」區段,您也可以選擇輸入篩選器,並從擁有多個串流或標籤的指標裡,運用其內所包含的個別值。詳情請參閱篩選個別執行個體指標一文。
  9. 在「使用率目標」區段,指定目標值。
  10. 在「使用率目標類型」區段,確認目標類型與指標的測量種類對應。
  11. 在您準備好時儲存變更。

gcloud

例如,在 gcloud 中,下列指令會建立使用 GAUGE 目標類型的自動配置器。建立自動配置器時,除了 --custom-metric-utilization 參數,還需要 --max-num-replicas 參數:

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --custom-metric-utilization metric=example.googleapis.com/path/to/metric,utilization-target-type=GAUGE,utilization-target=10 \
    --max-num-replicas 20 \
    --cool-down-period 90

或者,您也可以使用 --cool-down-period 標記,這個標記會通知自動配置器,在新虛擬機器已啟動後、自動配置器開始從中收集用量資訊前,要等待的秒數。虛擬機器進行初始化可能花費的時間也計算在內,在這段時間,收集到的用量對於自動調度資源而言不可靠。預設等待期為 60 秒。

針對多區域代管執行個體群組,使用 --region 標記指定可在哪裡找到執行個體群組。例如:

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --custom-metric-utilization metric=example.googleapis.com/path/to/metric,utilization-target-type=GAUGE,utilization-target=10 \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-central1

如要查看可用 gcloud 指令與標記的完整清單,請參閱 gcloud 參考資料

API

附註:雖然自動調度資源是代管執行個體群組的一項功能,但它是一個單獨的 API 資源。當您針對自動調度資源建構 API 要求時,請記住這一點。

在 API 中,對下列網址提出 POST 要求,將 myproject 取代為您自己的專案 ID 並將 us-central1-f 取代為您選擇的區域:

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

您的要求主體必須包含 nametargetautoscalingPolicy 欄位。在 autoscalingPolicy 中,提供 maxNumReplicascustomMetricUtilizations 屬性。

或者,您也可以使用 coolDownPeriodSec 參數,這個參數會通知自動配置器,在新執行個體啟動後、開始收集用量前,要等待的秒數。等待期過後,自動配置器會開始收集新執行個體的用量資訊,並確定群組是否需要額外執行個體。執行個體進行初始化可能花費的時間也計算在內,在這段時間,收集到的用量對於自動調度資源而言不可靠。預設等待期為 60 秒。

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "example.googleapis.com/some/metric/name",
    "utilizationTarget": 10,
    "utilizationTargetType": "GAUGE"
   }          ]
 }
}

篩選個別執行個體指標

您可以將篩選器套用至 Stackdriver 個別執行個體指標,這可讓您使用擁有多個串流或標籤之指標中的個別值,對單一區域代管執行個體群組執行資源調度。

個別執行個體指標篩選需求

自動配置器篩選與 Stackdriver Monitoring 篩選器語法相容。 個別執行個體指標的篩選器必須符合下列需求:

  • 針對加入選取器,您可以只使用 AND 運算子。
  • 您可以只使用 = 直接相等性比較運算子,但無法將該運算子與任何函式搭配使用。例如,您無法將 startswith() 函式與 = 比較運算子搭配使用。
  • 您不得設定 resource.typeresource.label.* 選取器。個別執行個體指標一律會使用群組中的所有執行個體資源。
  • 為獲得最佳結果,篩選器應十分精確,以傳回每個執行個體的單一時間序列。如果篩選器傳回多個時間序列,系統會把它們加在一起。

設定自動配置器以篩選指標

您可以使用 Google Cloud Platform 主控台、gcloud Beta 版指令列工具Compute Engine Beta API,為單一區域代管執行個體群組的自動調度資源功能新增指標篩選器。

主控台

建立篩選個別執行個體指標的自動配置器的程序,與建立一般個別執行個體自動配置器的程序類似,但您也可以指定指標篩選器。舉例來說,compute.googleapis.com/instance/network/received_bytes_count 指標包括 instance_nameloadbalanced 標籤。如何根據 loadbalanced 布林值進行篩選:

  1. 前往執行個體群組頁面
  2. 如果您沒有執行個體群組,請建立一個執行個體群組。 或者,按一下執行個體群組的名稱,開啟執行個體群組詳細資料頁面。執行個體群組必須是單一區域。
  3. 在執行個體群組詳細資料頁面上,按一下 [編輯群組] 按鈕。
  4. 在「自動調度資源」底下,選取 [開啟] 以啟用自動調度資源。
  5. 在「自動配置依據」區段,選取 [Stackdriver Monitoring 指標]
  6. 在「指標匯出範圍」區段,選取 [每個執行個體的時間序列] 以使用個別執行個體指標設定自動調度資源。
  7. 在「指標識別碼」區段,輸入指標名稱。例如 compute.googleapis.com/instance/network/received_bytes_count
  8. 在「其他篩選器運算式」區段,輸入篩選器。例如 'metric.label.loadbalanced = true'
  9. 在您準備好時儲存變更。

gcloud

建立篩選個別執行個體指標的自動配置器的程序,與建立一般個別執行個體自動配置器的程序類似,但您必須針對使用率目標與目標類型指定指標篩選器與個別標記。舉例來說,compute.googleapis.com/instance/network/received_bytes_count 指標包括 instance_nameloadbalanced 標籤。如要根據 loadbalanced 布林值進行篩選,請將 --stackdriver-metric-filter 篩選器標記指定為 'metric.label.loadbalanced = true' 值。請分別包含使用率目標與目標類型標記。

gcloud beta compute instance-groups managed set-autoscaling example-managed-instance-group \
    --update-stackdriver-metric=compute.googleapis.com/instance/network/received_bytes_count \
    --stackdriver-metric-utilization-target-utilization-target=10 \
    --stackdriver-metric-utilization-target-type=DELTA_PER_SEC \
    --stackdriver-metric-filter='metric.label.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90

這個範例會將自動調度資源設定為僅使用 loadbalanced 流量資料做為使用率目標的一部分。

如要查看可用 gcloud 指令與標記的完整清單,請參閱 gcloud Beta 版參考資料

API

附註:雖然自動調度資源是代管執行個體群組的一項功能,但它是一個單獨的 API 資源。當您針對自動調度資源建構 API 要求時,請記住這一點。

建立篩選個別執行個體指標的自動配置器的程序,與建立一般個別執行個體自動配置器的程序類似,但您必須針對使用率目標與目標類型指定指標篩選器與個別標記。舉例來說,compute.googleapis.com/instance/network/received_bytes_count 指標包括 instance_nameloadbalanced 標籤。如要根據 loadbalanced 布林值進行篩選,請將 filter 參數指定為 "metric.label.loadbalanced = true" 值。

在 API 中,對下列網址提出 POST 要求,將 myproject 取代為您自己的專案 ID 並將 us-central1-f 取代為您選擇的區域。要求主體必須包含 nametargetautoscalingPolicy 欄位。在 autoscalingPolicy 中,提供 maxNumReplicascustomMetricUtilizations 屬性。

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "compute.googleapis.com/instance/network/received_bytes_count",
    "filter": "metric.label.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SEC"
   }
  ]
 }
}

這個範例會將自動調度資源設定為僅使用 loadbalanced 流量資料做為使用率目標的一部分。

個別群組指標

個別群組指標允許使用不會匯出個別執行個體使用率資料之標準或自訂指標的自動調度資源。群組會根據套用至整個群組且與適用於群組的工作量或群組的忙碌程度對應的值來執行資源調度。群組會根據這個群組指標值的波動以及您定義的設定來執行資源調度。

當您針對個別群組指標設定自動調度資源時,必須指出您想讓自動配置器相對於指標佈建執行個體的方式:

  • 執行個體指派:指定執行個體指派,讓自動配置器根據可指派給每個執行個體的工作量來新增或移除執行個體。請為這個參數指定值,來表示您預期每個執行個體可以處理的工作量。舉例來說,您可以指定 2,將兩個工作單元指派給每個執行個體;您也可以指定 0.5,將半個工作單元指派給每個執行個體。自動配置器會為代管執行個體群組新增足夠的執行個體,以確保該群組有足夠的執行個體來完成指標所指示的可進行工作。如果指標值為 10,且您已將 0.5 個工作單元指派給每個執行個體,自動配置器就會在代管執行個體群組中建立 20 個執行個體。只要透過執行個體指派來執行資源調度,就能讓執行個體群組在指標值降到 0 時縮減為 0 個執行個體,並在指標值升高到 0 以上時再次恢復。下圖顯示透過執行個體指派政策執行資源調度時,指標值與執行個體數之間的比例關係。顯示指標值與執行個體數之間比例關係的圖表
  • 使用率目標:指定使用率目標,讓自動配置器新增或移除執行個體,以嘗試將指標維持在指定值。當指標高於指定目標時,自動配置器會逐步新增執行個體,直到指標降低到目標值為止。當指標低於指定目標值時,自動配置器會逐步移除執行個體,直到指標增加到目標值為止。但透過使用率目標執行資源調度時,無法將群組縮減為 0 個執行個體。下圖顯示自動配置器會依據某項指標值新增及移除執行個體,以維持指定的使用率目標。顯示自動配置器新增及移除執行個體以維持目標使用率的圖表

每個選項的用途如下:

  • 執行個體指派:根據 Google Pub/Sub 訂閱中的未確認訊息數,或是網路端點的總 QPS 速率,調整代管執行個體群組的大小。
  • 使用率目標:根據並非來自標準個別執行個體 CPU 之自訂指標的使用率目標,或是記憶體用量指標,調整代管執行個體群組的大小。例如,您可以根據自訂延遲時間指標,對群組執行資源調度。

當您使用個別群組指標設定自動調度資源並指定執行個體指派時,執行個體群組可以縮減為 0 個執行個體。如果您的指標顯示執行個體群組沒有待完成工作,群組會縮減為 0 個執行個體,直到指標偵測到有新工作為止。與個別群組執行個體指派相比,個別執行個體自動調度資源需要至少一個執行個體的資源使用率指標,使群組大小無法縮減到 1 以下。

篩選個別群組指標

您可以將篩選器套用至 Stackdriver 個別群組指標,這可讓您使用擁有多個串流或標籤之指標中的個別值,對代管執行個體群組執行資源調度。

個別群組指標篩選需求

自動配置器篩選與 Stackdriver Monitoring 篩選器語法相容。 個別群組指標的篩選器必須符合下列需求:

  • 針對加入選取器,您可以只使用 AND 運算子。
  • 針對每個選取器,您無法將 = 直接相等性比較運算子與任何函式搭配使用。
  • 您可以在篩選器中指定 metric.type = "..." 的指標類型選取器,同時包含原始 metric 欄位。或者,您可以只使用 metric 欄位。指標必須符合下列需求:
    • 必須在至少一個位置指定指標。
    • 可以在兩個位置指定指標,但這兩者必須相等。
  • 您必須指定 resource.type 選取器,但如果您要使用個別群組指標來執行資源調度,就無法將該選取器設定為 gce_instance
  • 為獲得最佳結果,篩選器應十分精確,以傳回群組的單一時間序列。如果篩選器傳回多個時間序列,系統會把它們加在一起。

設定依據個別群組監控指標自動調度資源

您可以使用 Google Cloud Platform 主控台、gcloud Beta 版指令列工具Compute Engine Beta API,為單一區域代管執行個體群組設定採用個別群組指標的自動調度資源功能。

主控台

  1. 前往執行個體群組頁面
  2. 如果您沒有執行個體群組,請建立一個執行個體群組。 或者,按一下執行個體群組的名稱,開啟執行個體群組詳細資料頁面。執行個體群組必須是單一區域。
  3. 在執行個體群組詳細資料頁面上,按一下 [編輯群組] 按鈕。
  4. 在「自動調度資源」底下,選取 [開啟] 以啟用自動調度資源。
  5. 在「自動配置依據」區段,選取 [Stackdriver Monitoring 指標]
  6. 在「指標匯出範圍」區段,選取 [每個群組的單一時間序列]
  7. 在「Metric identifier」(指標識別碼) 部分,以下列格式指定指標名稱:example.googleapis.com/path/to/metric
  8. 指定「指標資源類型」
  9. 提供其他篩選器運算式以使用擁有多個串流或標籤之指標中的個別值。篩選器必須符合自動配置器篩選需求
  10. 在「資源配置政策」區段,選取 [執行個體指派] 或 [使用率目標]
    • 如果您選取執行個體指派政策,則提供「單一執行個體指派」值來表示要指派給代管執行個體群組中每個執行個體的工作量。例如,請指定 2,將兩個工作單元指派給每個執行個體。自動配置器會維持足夠的執行個體以完成可用工作 (如指標所指示)。如果指標值為 10,且您已將 2 個工作單元指派給每個執行個體,自動配置器就會在代管執行個體群組中建立 5 個執行個體。
    • 如果您選取使用率目標政策:
      • 提供「Utilization target」(使用率目標) 值來表示自動配置器應嘗試維持的指標值。
      • 選取 [使用率目標類型] 來表示指標的值類型。
  11. 在您準備好時儲存變更。

gcloud

為代管執行個體群組建立與個別執行個體自動配置器類似的自動配置器,但要指定 --update-stackdriver-metric 標記。您可以加入下列其中一個標記,指定自動配置器佈建執行個體的方式:

  • 執行個體指派:指定 --stackdriver-metric-single-instance-assignment 標記。
  • 使用率目標:指定 --stackdriver-metric-utilization-target 標記。

執行個體指派:

指定您想測量的指標,並指定 --stackdriver-metric-single-instance-assignment 標記來指出您預期每個執行個體處理的工作量。您也必須使用 --stackdriver-metric-filter 標記指定指標的篩選器。

gcloud beta compute instance-groups managed set-autoscaling [GROUP_NAME] \
    --zone=[ZONE] \
    --max-num-replicas=[MAX_INSTANCES] \
    --min-num-replicas=[MIN_INSTANCES] \
    --update-stackdriver-metric='[METRIC_URL]' \
    --stackdriver-metric-filter='[METRIC_FILTER]' \
    --stackdriver-metric-single-instance-assignment=[INSTANCE_ASSIGNMENT]

其中:

  • [GROUP_NAME] 是您要新增自動配置器的代管執行個體群組名稱。
  • [ZONE] 是代管執行個體群組所在的區域。您無法針對個別群組指標指定自動配置器的地區。
  • [MAX_INSTANCES] 是自動配置器可新增至代管執行個體群組的執行個體數上限。
  • [MIN_INSTANCES] 是自動配置器在代管執行個體群組中可擁有的執行個體數下限。
  • [METRIC_URL] 是無通訊協定的 Google Cloud Monitoring 指標網址。
  • [METRIC_FILTER]Stackdriver Monitoring 篩選器,您可以利用這個篩選器指定擁有相關 TimeSeriesMonitoredResource監控篩選器。篩選器必須符合自動配置器篩選需求
  • [INSTANCE_ASSIGNMENT] 是要指派給代管執行個體群組中每個執行個體的工作量。舉例來說,您可以指定 2,將兩個工作單元指派給每個執行個體;您也可以指定 0.5,將半個工作單元指派給每個執行個體。自動配置器會為代管執行個體群組新增足夠的執行個體,以確保該群組有足夠的執行個體來完成指標所指示的可進行工作。如果指標值為 10,且您已將 0.5 個工作單元指派給每個執行個體,自動配置器就會在代管執行個體群組中佈建 20 個執行個體。

使用率目標:

在某些情況下,您可能會想要搭配個別群組指標來利用使用率目標,而不是指定相對於自動配置器所測量指標值的執行個體數。您仍可以將自動配置器指向個別群組指標,但自動配置器會嘗試維持指定的使用率目標。請使用 --stackdriver-metric-utilization-target 標記來指定目標與目標類型。您也必須使用 --stackdriver-metric-filter 標記指定指標的篩選器。

gcloud beta compute instance-groups managed set-autoscaling [GROUP_NAME] \
   --zone=[ZONE] \
   --max-num-replicas=[MAX_INSTANCES] \
   --min-num-replicas=[MIN_INSTANCES] \
   --update-stackdriver-metric='[METRIC_URL]' \
   --stackdriver-metric-filter='[METRIC_FILTER]' \
   --stackdriver-metric-utilization-target=[TARGET_VALUE] \
   --stackdriver-metric-utilization-target-type=[TARGET_TYPE]

其中:

  • [GROUP_NAME] 是您要新增自動配置器的代管執行個體群組名稱。
  • [ZONE] 是代管執行個體群組所在的區域。您無法針對個別群組指標指定自動配置器的地區。
  • [MAX_INSTANCES] 是自動配置器可新增至代管執行個體群組的執行個體數上限。
  • [MIN_INSTANCES] 是自動配置器在代管執行個體群組中可擁有的執行個體數下限。
  • [METRIC_URL] 是無通訊協定的 Google Cloud Monitoring 指標網址。
  • [METRIC_FILTER]Stackdriver Monitoring 篩選器,您可以利用這個篩選器指定擁有相關 TimeSeriesMonitoredResource監控篩選器。您必須指定 resource.type 值,但如果您想依據個別群組指標執行資源調度,就不能指定 gce_instance。篩選器必須符合自動配置器篩選需求
  • [TARGET_VALUE] 是自動配置器嘗試維持的指標值。
  • [TARGET_TYPE] 是指標的值類型。您可以將自動配置器設定為按照 GAUGE、值的 delta-per-minute 或值的 delta-per-second 來監控指標。

如要查看能與個別群組自動調度資源搭配使用的可用自動配置器 gcloud 指令與標記的完整清單,請參閱 gcloud Beta 版參考資料

API

請注意:雖然自動調度資源是代管執行個體群組的功能,但[自動配置器](/compute/docs/reference/beta/autoscalers)是不同的 API 資源。當您針對自動調度資源建構 API 要求時,請記住這一點。

請為代管執行個體群組建立自動配置器。您可以透過包含下列其中一個參數,來指定想讓自動配置器佈建執行個體的方式:

  • 執行個體指派:指定 singleInstanceAssignment 參數。
  • 使用率目標:指定 utilizationTarget 參數。

執行個體指派:

在 API 中,提出 POST 要求以建立自動配置器。在要求主體中,加入您要用來建立個別執行個體自動配置器的一般參數,但要指定 single-instance-assignment 參數。這個參數指定了您預期每個執行個體處理的工作量。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/[ZONE]/instanceGroupManagers/[GROUP_NAME]",
 "autoscalingPolicy": {
  "maxNumReplicas": [MAX_INSTANCES],
  "minNumReplicas": [MIN_INSTANCES],
  "customMetricUtilizations": [
    {
      "metric": "[METRIC_URL]",
      "filter": "[METRIC_FILTER]",
      "singleInstanceAssignment": [INSTANCE_ASSIGNMENT]
    }
  ],
 }
}

其中:

  • [PROJECT_ID] 是您的專案 ID。
  • [ZONE] 是代管執行個體群組所在的區域。
  • [GROUP_NAME] 是您要新增自動配置器的代管執行個體群組名稱。
  • [MAX_INSTANCES] 是自動配置器可新增至代管執行個體群組的執行個體數上限。
  • [MIN_INSTANCES] 是自動配置器在代管執行個體群組中可擁有的執行個體數下限。
  • [METRIC_URL] 是無通訊協定的 Google Cloud Monitoring 指標網址。
  • [METRIC_FILTER]Stackdriver Monitoring 篩選器,您可以利用這個篩選器指定擁有相關 TimeSeriesMonitoredResource監控篩選器。您必須指定 resource.type 值,但如果您想依據個別群組指標執行資源調度,就不能指定 gce_instance。篩選器必須符合自動配置器篩選需求
  • [INSTANCE_ASSIGNMENT] 是要指派給代管執行個體群組中每個執行個體的工作量。舉例來說,您可以指定 2,將兩個工作單元指派給每個執行個體;您也可以指定 0.5,將半個工作單元指派給每個執行個體。自動配置器會為代管執行個體群組新增足夠的執行個體,以確保該群組有足夠的執行個體來完成指標所指示的可進行工作。如果指標值為 10,且您已將 0.5 個工作單元指派給每個執行個體,自動配置器就會在代管執行個體群組中佈建 20 個執行個體。

使用率目標:

在某些情況下,您可能會想要搭配個別群組指標來利用使用率目標,而不是指定相對於自動配置器所測量指標值的執行個體數。您仍可以將自動配置器指向個別群組指標,但自動配置器會嘗試維持指定的使用率目標。請使用 utilizationTarget 參數來指定這些目標。您也必須使用 filter 參數來指定指標的篩選器。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/[ZONE]/instanceGroupManagers/[GROUP_NAME]",
 "autoscalingPolicy": {
  "maxNumReplicas": [MAX_INSTANCES],
  "minNumReplicas": [MIN_INSTANCES],
  "customMetricUtilizations": [
    {
      "metric": "[METRIC_URL]",
      "filter": "[METRIC_FILTER]",
      "utilizationTarget": [TARGET_VALUE],
      "utilizationTargetType": [TARGET_TYPE]
    }
  ],
 }
}

其中:

  • [GROUP_NAME] 是您要新增自動配置器的代管執行個體群組名稱。
  • [ZONE] 是代管執行個體群組所在的區域。
  • [MAX_INSTANCES] 是自動配置器可新增至代管執行個體群組的執行個體數上限。
  • [MIN_INSTANCES] 是自動配置器在代管執行個體群組中可擁有的執行個體數下限。
  • [METRIC_URL] 是無通訊協定的 Google Cloud Monitoring 指標網址。
  • [METRIC_FILTER]Stackdriver Monitoring 篩選器,您可以利用這個篩選器指定擁有相關 TimeSeriesMonitoredResource監控篩選器。您必須指定 resource.type 值,但如果您想依據個別群組指標執行資源調度,就不能指定 gce_instance。篩選器必須符合自動配置器篩選需求
  • [TARGET_VALUE] 是自動配置器嘗試維持的指標值。
  • [TARGET_TYPE] 是指標的值類型。您可以將自動配置器設定為按照 GAUGE、值的 DELTA_PER_MINUTE 或值的 DELTA_PER_SECOND 來監控指標。

範例:使用執行個體指派來根據 Pub/Sub 佇列執行資源調度

假設下列設定:

  • 有效的 Google Cloud Pub/Sub 主題從某個來源接收訊息。
  • 有效的 Google Cloud Pub/Sub 訂閱項目已在提取設定中連線至主題。訂閱項目命名為 our-subscription
  • 工作站集區將從這個訂閱項目提取訊息並加以處理。集區是名為 our-instance-group 的單一區域代管執行個體群組,且位於區域 us-central1-a 中。集區不得超過 100 個工作站,且當佇列中沒有訊息時,應縮減為 0 個工作站。
  • 工作站平均一分鐘處理一則訊息。

如要決定最佳執行個體指派值,請考慮多種方法:

  • 如要儘快處理佇列中的所有訊息,您可以選擇 1 做為執行個體指派值。這會針對佇列中的每則訊息建立一個執行個體 (限制為我們群組中的執行個體數上限)。但是,這會導致超額佈建。最糟的狀況是,在自動配置器將建立的執行個體關閉之前,這個執行個體只處理了一則訊息,而這會消耗比執行實際工作更多的資源。
    • 請注意,如果工作站能夠同時處理多則訊息,將值增加為並行程序數是有意義的。
    • 請注意,在這個範例中,將值設定為低於 1 沒有意義,因為一則訊息無法由多個工作站處理。
  • 或者,如果處理延遲時間的重要性比不上資源使用率和負擔成本,您可以計算每個執行個體在生命週期內必須處理多少則訊息,才會視為有效率的利用。請將啟動與關閉時間,以及自動調度資源不會立即刪除執行個體這一事實納入考量。舉例來說,假設啟動與關閉總共耗時 5 分鐘,同時假設自動調度資源功能只會在約 10 分鐘之後刪除執行個體,您計算得知,在群組中建立額外的執行個體可提高效率,只要它能夠在自動配置器將其關閉之前處理至少 15 則訊息即可,而這會因建立、啟動及關閉執行個體的總時間造成最多 25% 的負擔。在這種情況下,您可以選擇 15 做為執行個體指派值。
  • 根據處理延遲時間與資源使用率兩個因素何者優先,可折衷使用這兩種方法,進而產生介於 115 之間的數值。

查看可用的 Pub/Sub 指標,我們會找到表示訂閱項目佇列長度的指標:subscription/num_undelivered_messages

請注意,這個指標會匯出佇列中的訊息總數,其中包括目前正在處理但尚未確認的訊息。不建議使用不包含正在處理之訊息的指標,因為這類指標會在仍有工作正在執行時降到 0,而這會提示自動調度資源縮減且可能會中斷實際工作。

您現在可以為佇列設定自動調度資源:

gcloud beta compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=pubsub.googleapis.com/subscription/num_undelivered_messages \
    --stackdriver-metric-filter="resource.type = pubsub_subscription AND resource.label.subscription_id = our-subscription" \
    --stackdriver-metric-single-instance-assignment=15

範例:使用使用率目標來根據平均延遲時間執行資源調度

可能會有一種情況,即提供相關訊號的指標並不表示可用工作或適用於群組之其他資源的總數 (像在上一個範例中一樣),但卻表示平均值、百分位數或其他統計屬性。針對這個範例,假設您會根據群組的平均處理延遲時間執行資源調度。

假設下列設定:

  • 已指派名為 our-instance-group 的代管執行個體群組來執行特定工作。群組位於區域 us-central1-a 中。
  • 您擁有 Stackdriver Monitoring 自訂指標,可匯出您想維持在特定層級的值。針對這個範例,假設指標表示指派給群組之處理查詢的平均延遲時間。
    • 已為自訂指標命名:custom.googleapis.com/example_average_latency
    • 自訂指標擁有一個標籤,且鍵名為 group_name,值等於執行個體群組名稱 our-instance-group
    • 自訂指標會針對全球監控資源匯出資料,也就是說,它不會與任何特定執行個體相關聯。

您已決定當指標值高於某個特定值時,需要將更多的執行個體新增至群組來處理負載,而當它低於這個值時,可以釋出部分資源。自動調度資源會以與指標高於或低於目標的程度成正比的比率,來逐步新增或移除執行個體。針對這個範例,假設計算的目標值為 100

您現在可以使用 100 的個別群組使用率目標,為群組設定自動調度資源,而這個目標表示自動配置器必須嘗試維持的指標值:

gcloud beta compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=custom.googleapis.com/example_average_latency \
    --stackdriver-metric-filter "resource.type = global AND metric.label.group_name = our-instance-group" \
    --stackdriver-metric-utilization-target=100 \
    --stackdriver-metric-utilization-target-type=delta-per-second
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件