基于 Stackdriver Monitoring 指标进行调节

您可以设置自动调节程序,以便根据以下指标类型进行调节:

  • 使用实例指标进行调节,其中,所选指标提供了托管实例组中每个实例的数据,指示了资源利用率。
  • 使用组指标(测试版进行调节,其中,组根据特定的指标进行调节,该指标提供了与整个托管实例组相关的值。

这些指标可以是 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 指标的自动调节程序,您必须提供指标标识符、所需的目标利用率级别利用率目标类型。以下内容简要介绍了其中每个属性:

  • 指标标识符:要使用的指标的名称。如果使用自定义指标,则您在最初创建指标时定义了此名称。标识符具有以下格式:

    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,以便自动调节程序可以执行准确的比较。

Console

对于区域托管实例组和单地区托管实例组而言,用于配置自动调节的说明有所不同。区域托管实例组不支持对实例指标进行过滤。

要为区域(多地区)托管实例组配置自动调节,请执行以下操作:

  1. 转到实例组页面
  2. 如果您没有实例组,请创建一个实例组。否则,请从列表中点击实例组的名称以打开实例组详情页面。实例组必须为区域实例组。
  3. 在实例组详情页面上,点击修改组按钮。
  4. 自动调节下,选择以启用自动调节。
  5. 自动调节的依据部分中,选择 Stackdriver Monitoring 指标
  6. 指标标识符部分中,按以下格式输入指标名称:example.googleapis.com/path/to/metric
  7. 目标部分中,指定目标值。
  8. 目标类型部分中,指定与指标的测量类型对应的目标类型。
  9. 准备好后,请保存所做的更改。

要为单地区托管实例组配置自动调节,请执行以下操作:

  1. 转到实例组页面
  2. 如果您没有实例组,请创建一个实例组。否则,请点击实例组的名称以打开实例组详情页面。实例组必须为单地区实例组。
  3. 在实例组详情页面上,点击修改组按钮。
  4. 自动调节下,选择以启用自动调节。
  5. 自动调节的依据部分中,选择 Stackdriver Monitoring 指标
  6. 指标导出范围部分中,选择每个实例的时间序列以使用实例指标配置自动调节。
  7. 指标标识符部分中,按以下格式输入指标名称: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 Console、gcloud 测试版命令行工具Compute Engine 测试版 API 添加指标过滤器,以自动调节单地区托管实例组。

Console

创建可过滤实例指标的自动调节程序的过程类似于创建普通的实例自动调节程序,但您还另外指定了指标过滤器。例如,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 布尔值进行过滤,请使用 'metric.label.loadbalanced = true' 值指定 --stackdriver-metric-filter 过滤器标志。分别包括利用率目标和目标类型标记。

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 测试版参考

API

注意:虽然自动调节是托管实例组的功能,但它是单独的 API 资源。针对自动调节构建 API 请求时请记住这一点。

创建可过滤实例指标的自动调节程序的过程类似于创建普通的实例自动调节程序,但您必须指定一个指标过滤器以及为利用率目标和目标类型指定各个标志。例如,compute.googleapis.com/instance/network/received_bytes_count 指标包括 instance_nameloadbalanced 标签。要根据 loadbalanced 布尔值进行过滤,请使用 "metric.label.loadbalanced = true" 值指定 filter 参数。

在 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 Console、gcloud 测试版命令行工具Compute Engine 测试版 API

Console

  1. 转到实例组页面
  2. 如果您没有实例组,请创建一个实例组。否则,请点击实例组的名称以打开实例组详情页面。实例组必须为单地区实例组。
  3. 在实例组详情页面上,点击修改组按钮。
  4. 自动调节下,选择以启用自动调节。
  5. 自动调节的依据部分中,选择 Stackdriver Monitoring 指标
  6. 指标导出范围部分中,选择每个实例组的单个时间序列
  7. 指标标识符部分中,按以下格式指定指标名称:example.googleapis.com/path/to/metric
  8. 指定指标资源类型
  9. 提供附加过滤器表达式,以使用具有多个流或标签的指标中的各个值。过滤器必须满足自动调节程序过滤要求
  10. 调节政策部分中,选择实例分配利用率目标
    • 如果选择实例分配政策,则提供单实例分配值,该值表示要分配给托管实例组中每个实例的工作量。例如,指定 2 可为每个实例分配两个单位的工作量。自动调节程序会维持足够的实例来完成指标所指示的可用工作量。如果指标值为 10,并且您为每个实例分配了 2 个单位的工作量,自动调节程序会在托管实例组中创建 5 个实例。
    • 如果选择利用率目标政策:
      • 提供一个利用率目标值,该值表示自动调节程序应尝试维持的指标值。
      • 选择利用率目标类型,该设置表示指标的值类型。
  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 测试版参考

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 文档