View a markdown version of this page

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

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

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

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

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

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

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

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

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

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

  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. 在指标名称中,选择要以高分辨率收集的指标。选择 CPUUtilization 或 MemoryUtilization。

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

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

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

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

    注意

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

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

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

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

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

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

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

  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. 找到您的服务的 CPUUtilization 和 MemoryUtilization 指标。

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

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

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

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

  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_DEPLOY 或 EXTERNAL 部署控制器类型的服务,不支持高分辨率指标。

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