View a markdown version of this page

使用高分辨率指标创建目标跟踪服务自动扩缩 - Amazon Elastic Container Service

使用高分辨率指标创建目标跟踪服务自动扩缩

默认情况下,Amazon ECS 以 60 秒的分辨率发布 CPUUtilizationMemoryUtilization 指标。您可以配置 20 秒的分辨率以加快服务自动扩缩速度。

以下高分辨率预定义指标可用于目标跟踪扩缩策略:

PredefinedMetricType 说明
ECSServiceAverageCPUUtilizationHighResolution 20 秒分辨率的平均 CPU 利用率
ECSServiceAverageMemoryUtilizationHighResolution 20 秒分辨率的平均内存利用率

使用高分辨率指标创建新服务以加快自动扩缩速度

  1. 集群页面上,选择要在其中创建服务的集群。

  2. 服务部分中,选择创建

  3. 在“创建服务”窗体的监控配置部分中,选择添加指标配置

  4. 指标名称中,选择要以高分辨率收集的指标。选择 CPUUtilizationMemoryUtilization

  5. 对于分辨率(秒),选择 20

  6. (可选)要以高分辨率添加两个指标,请再次选择添加指标配置,然后对另一个指标重复前两个步骤。

  7. 服务自动扩缩部分中,选择使用服务自动扩缩

  8. 对于最小任务数,输入供服务自动扩缩使用的任务数的下限。所需计数不会低于此计数。

  9. 对于最大任务数,输入供服务自动扩缩使用的任务数的上限。所需计数不会高于此计数。

  10. 对于扩展策略类型,选择目标跟踪

  11. 对于指标类型,选择相应的高分辨率指标。例如,配置 CPUUtilization 为 20 秒分辨率时选择 ECSServiceAverageCPUUtilizationHighResolution,配置 MemoryUtilization 为 20 秒分辨率时选择 ECSServiceAverageMemoryUtilizationHighResolution

  12. 目标值中,输入目标利用率百分比。服务自动扩缩可横向扩展您的容量直到平均利用率达到目标值,或直到达到您指定的最大任务数。

  13. 其他设置下面,请配置以下内容。

    1. 对于横向扩展冷却时间,请输入等待先前的横向扩展活动生效的时长(以秒为单位)。

    2. 对于横向缩减冷却时间,请输入在一个横向缩减活动完成之后、另一个横向缩减活动开始之前的时长(以秒为单位)。

  14. 选择创建以创建服务。

  1. 使用 create-service 命令创建带有监控配置的服务。

    aws ecs create-service --region us-east-1 \ --cluster my-cluster \ --service-name my-service \ --task-definition my-app:1 \ --desired-count 2 \ --monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]"
  2. 使用 register-scalable-target 命令将服务注册为可扩展目标。

    aws application-autoscaling register-scalable-target \ --service-namespace ecs \ --resource-id service/my-cluster/my-service \ --scalable-dimension ecs:service:DesiredCount \ --min-capacity 1 \ --max-capacity 10 \ --region us-east-1
  3. 使用 put-scaling-policy 命令并使用高分辨率预定义指标创建目标跟踪策略。

    aws application-autoscaling put-scaling-policy \ --service-namespace ecs \ --resource-id service/my-cluster/my-service \ --scalable-dimension ecs:service:DesiredCount \ --policy-name my-highres-cpu-policy \ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue": 50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution" } }' \ --region us-east-1
  4. 验证该策略是使用 describe-scaling-policies 命令创建的。

    aws application-autoscaling describe-scaling-policies \ --service-namespace ecs \ --resource-id service/my-cluster/my-service \ --scalable-dimension ecs:service:DesiredCount \ --region us-east-1

更新现有服务以使用高分辨率指标,从而加快自动扩缩速度。

更新现有服务以使用高分辨率指标,从而加快自动扩缩速度,此过程分为两个步骤。您必须先更新监控分辨率,这将触发服务部署。部署成功完成并且所有任务都以 20 秒的分辨率发出指标后,您可以配置高分辨率扩缩策略。

重要

如果您的服务之前使用的是 60 秒的指标分辨率,则只有在您将服务更新为使用 20 秒的指标分辨率并且服务部署完成后,Amazon ECS 控制台才会显示用于扩缩策略的高分辨率指标。

步骤 1:更新监控分辨率

  1. 集群页面上,选择包含要更新的服务的集群。

  2. 服务部分中,选择服务并选择更新

  3. 在“更新服务”窗体的监控配置部分中,选择添加指标配置

  4. 指标名称中,选择要以高分辨率收集的指标。选择 CPUUtilizationMemoryUtilization

  5. 对于分辨率(秒),选择 20

  6. (可选)要以高分辨率添加两个指标,请再次选择添加指标配置,然后对另一个指标重复前两个步骤。

  7. 选择更新以提交更改。这会触发服务部署。

  8. 等待部署完成。您可以在部署选项卡的服务详细信息页面上监控进度。

    注意

    在部署成功并且所有任务都以 20 秒的分辨率发出之前,高分辨率扩缩指标选项在服务自动扩缩部分中呈灰色显示。

步骤 2:配置高分辨率扩缩策略

部署完成后,使用以下方法之一配置扩缩策略。

选项 A:服务详细信息页面
  1. 在服务详细信息页面上,选择服务自动扩缩选项卡。

  2. 选择创建扩缩策略(或编辑现有策略)。

  3. 对于扩展策略类型,选择目标跟踪

  4. 对于指标类型,选择高分辨率指标。例如,ECSServiceAverageCPUUtilizationHighResolutionECSServiceAverageMemoryUtilizationHighResolution

  5. 目标值中,输入目标利用率百分比。

  6. 其他设置下面,请配置以下内容。

    1. 对于横向扩展冷却时间,请输入等待先前的横向扩展活动生效的时长(以秒为单位)。

    2. 对于横向缩减冷却时间,请输入在一个横向缩减活动完成之后、另一个横向缩减活动开始之前的时长(以秒为单位)。

  7. 选择创建扩缩策略

选项 B:更新服务窗体
  1. 在服务详细信息页面上,选择更新

  2. 服务自动扩缩部分中,选择使用服务自动扩缩(如果尚未启用)。

  3. 最小任务数中,输入下限。

  4. 最大任务数中,输入上限。

  5. 对于扩展策略类型,选择目标跟踪

  6. 对于指标类型,选择高分辨率指标(现在于部署完成后启用)。

  7. 目标值中,输入目标利用率百分比。

  8. 其他设置下面,设置横向扩展冷却时间横向缩减冷却时间

  9. 选择更新以提交更改。

步骤 1:更新监控分辨率

  1. 使用 update-service 命令更新带有监控配置的服务。

    aws ecs update-service --region us-east-1 \ --cluster my-cluster \ --service my-service \ --monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]"
  2. 等待部署完成。您可以使用 describe-services 命令并检查部署状态来监控进度。

    aws ecs describe-services --region us-east-1 \ --cluster my-cluster \ --services my-service
  3. 部署完成后,通过描述服务修订版来验证监控配置是否处于活动状态。从 describe-services 输出中获取有效的服务修订版 ARN,然后运行:

    aws ecs describe-service-revisions --region us-east-1 \ --service-revision-arns arn:aws:ecs:us-east-1:012345678910:service-revision/my-cluster/my-service/1234567890123456789

    确认监控配置出现在响应中:

    { "serviceRevisions": [ { ... "monitoring": { "metricConfigurations": [ { "metricNames": ["CPUUtilization", "MemoryUtilization"], "resolutionSeconds": 20 } ] } } ] }
步骤 2:配置高分辨率扩缩策略

  1. 使用 register-scalable-target 命令将服务注册为可扩展目标(如果尚未注册)。

    aws application-autoscaling register-scalable-target \ --service-namespace ecs \ --resource-id service/my-cluster/my-service \ --scalable-dimension ecs:service:DesiredCount \ --min-capacity 1 \ --max-capacity 10 \ --region us-east-1
  2. 使用 put-scaling-policy 命令并使用高分辨率预定义指标创建目标跟踪策略。以下示例针对 50% CPU 分辨率:

    aws application-autoscaling put-scaling-policy \ --service-namespace ecs \ --resource-id service/my-cluster/my-service \ --scalable-dimension ecs:service:DesiredCount \ --policy-name my-highres-cpu-policy \ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue": 50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution" } }' \ --region us-east-1
  3. 验证策略是否已创建:

    aws application-autoscaling describe-scaling-policies \ --service-namespace ecs \ --resource-id service/my-cluster/my-service \ --scalable-dimension ecs:service:DesiredCount \ --region us-east-1

验证更快的服务自动扩缩速度

第 1 部分:验证高分辨率指标正在发布

  1. 导航到 CloudWatch 控制台。

  2. 在导航窗格中,选择指标,然后选择所有指标

  3. 选择 AWS/ECS 命名空间。

  4. 选择 ClusterName、ServiceName

  5. 找到您的服务的 CPUUtilizationMemoryUtilization 指标。

  6. 将时间段设置为 20 秒。您应该以 20 秒为间隔看到数据点,从而确认高分辨率指标处于活动状态。

第 2 部分:验证扩缩策略是否使用高分辨率指标

  1. 在服务详细信息页面上,选择服务自动扩缩选项卡。

  2. 查看您现有的扩缩策略并确认该指标已设置为高分辨率变体(ECSServiceAverageCPUUtilizationHighResolutionECSServiceAverageMemoryUtilizationHighResolution)。

  3. 或者,使用 CLI 进行验证:

    aws application-autoscaling describe-scaling-policies \ --service-namespace ecs \ --resource-id service/my-cluster/my-service \ --scalable-dimension ecs:service:DesiredCount \ --region us-east-1

    确认响应中的 PredefinedMetricType 设置为高分辨率指标。

注意事项

  • 监控配置更改会创建新的服务修订版并需要部署服务。在部署完成并且所有任务都以 20 秒的分辨率发出之后,高分辨率扩缩指标才可用。

  • 对于使用应用程序负载均衡器和网络负载均衡器的服务,支持高分辨率指标。不支持使用不带目标组的经典负载均衡器的服务。

  • 对于使用 CODE_DEPLOYEXTERNAL 部署控制器类型的服务,不支持高分辨率指标。

  • 您可以使用 DescribeServiceRevisions 查看服务的监控配置。监控配置不在 CreateServiceUpdateService 响应中返回。