使用高分辨率指标创建目标跟踪服务自动扩缩
默认情况下,Amazon ECS 以 60 秒的分辨率发布 CPUUtilization 和 MemoryUtilization 指标。您可以配置 20 秒的分辨率以加快服务自动扩缩速度。
以下高分辨率预定义指标可用于目标跟踪扩缩策略:
| PredefinedMetricType | 说明 |
|---|---|
ECSServiceAverageCPUUtilizationHighResolution |
20 秒分辨率的平均 CPU 利用率 |
ECSServiceAverageMemoryUtilizationHighResolution |
20 秒分辨率的平均内存利用率 |
使用高分辨率指标创建新服务以加快自动扩缩速度
-
在集群页面上,选择要在其中创建服务的集群。
-
在服务部分中,选择创建。
-
在“创建服务”窗体的监控配置部分中,选择添加指标配置。
-
在指标名称中,选择要以高分辨率收集的指标。选择
CPUUtilization或MemoryUtilization。 -
对于分辨率(秒),选择 20。
-
(可选)要以高分辨率添加两个指标,请再次选择添加指标配置,然后对另一个指标重复前两个步骤。
-
在服务自动扩缩部分中,选择使用服务自动扩缩。
-
对于最小任务数,输入供服务自动扩缩使用的任务数的下限。所需计数不会低于此计数。
-
对于最大任务数,输入供服务自动扩缩使用的任务数的上限。所需计数不会高于此计数。
-
对于扩展策略类型,选择目标跟踪。
-
对于指标类型,选择相应的高分辨率指标。例如,配置
CPUUtilization为 20 秒分辨率时选择ECSServiceAverageCPUUtilizationHighResolution,配置MemoryUtilization为 20 秒分辨率时选择ECSServiceAverageMemoryUtilizationHighResolution。 -
在目标值中,输入目标利用率百分比。服务自动扩缩可横向扩展您的容量直到平均利用率达到目标值,或直到达到您指定的最大任务数。
-
在其他设置下面,请配置以下内容。
-
对于横向扩展冷却时间,请输入等待先前的横向扩展活动生效的时长(以秒为单位)。
-
对于横向缩减冷却时间,请输入在一个横向缩减活动完成之后、另一个横向缩减活动开始之前的时长(以秒为单位)。
-
-
选择创建以创建服务。
-
使用 create-service 命令创建带有监控配置的服务。
aws ecs create-service --regionus-east-1\ --clustermy-cluster\ --service-namemy-service\ --task-definitionmy-app:1\ --desired-count 2 \ --monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]" -
使用 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-capacity1\ --max-capacity10\ --regionus-east-1 -
使用 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-namemy-highres-cpu-policy\ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue":50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution" } }' \ --regionus-east-1 -
验证该策略是使用 describe-scaling-policies 命令创建的。
aws application-autoscaling describe-scaling-policies \ --service-namespace ecs \ --resource-id service/my-cluster/my-service\ --scalable-dimension ecs:service:DesiredCount \ --regionus-east-1
更新现有服务以使用高分辨率指标,从而加快自动扩缩速度。
更新现有服务以使用高分辨率指标,从而加快自动扩缩速度,此过程分为两个步骤。您必须先更新监控分辨率,这将触发服务部署。部署成功完成并且所有任务都以 20 秒的分辨率发出指标后,您可以配置高分辨率扩缩策略。
重要
如果您的服务之前使用的是 60 秒的指标分辨率,则只有在您将服务更新为使用 20 秒的指标分辨率并且服务部署完成后,Amazon ECS 控制台才会显示用于扩缩策略的高分辨率指标。
步骤 1:更新监控分辨率
-
在集群页面上,选择包含要更新的服务的集群。
-
在服务部分中,选择服务并选择更新。
-
在“更新服务”窗体的监控配置部分中,选择添加指标配置。
-
在指标名称中,选择要以高分辨率收集的指标。选择
CPUUtilization或MemoryUtilization。 -
对于分辨率(秒),选择 20。
-
(可选)要以高分辨率添加两个指标,请再次选择添加指标配置,然后对另一个指标重复前两个步骤。
-
选择更新以提交更改。这会触发服务部署。
-
等待部署完成。您可以在部署选项卡的服务详细信息页面上监控进度。
注意
在部署成功并且所有任务都以 20 秒的分辨率发出之前,高分辨率扩缩指标选项在服务自动扩缩部分中呈灰色显示。
步骤 2:配置高分辨率扩缩策略
部署完成后,使用以下方法之一配置扩缩策略。
- 选项 A:服务详细信息页面
-
-
在服务详细信息页面上,选择服务自动扩缩选项卡。
-
选择创建扩缩策略(或编辑现有策略)。
-
对于扩展策略类型,选择目标跟踪。
-
对于指标类型,选择高分辨率指标。例如,
ECSServiceAverageCPUUtilizationHighResolution或ECSServiceAverageMemoryUtilizationHighResolution。 -
在目标值中,输入目标利用率百分比。
-
在其他设置下面,请配置以下内容。
-
对于横向扩展冷却时间,请输入等待先前的横向扩展活动生效的时长(以秒为单位)。
-
对于横向缩减冷却时间,请输入在一个横向缩减活动完成之后、另一个横向缩减活动开始之前的时长(以秒为单位)。
-
-
选择创建扩缩策略。
-
- 选项 B:更新服务窗体
-
-
在服务详细信息页面上,选择更新。
-
在服务自动扩缩部分中,选择使用服务自动扩缩(如果尚未启用)。
-
在最小任务数中,输入下限。
-
在最大任务数中,输入上限。
-
对于扩展策略类型,选择目标跟踪。
-
对于指标类型,选择高分辨率指标(现在于部署完成后启用)。
-
在目标值中,输入目标利用率百分比。
-
在 其他设置下面,设置横向扩展冷却时间和横向缩减冷却时间。
-
选择更新以提交更改。
-
步骤 1:更新监控分辨率
-
使用 update-service 命令更新带有监控配置的服务。
aws ecs update-service --regionus-east-1\ --clustermy-cluster\ --servicemy-service\ --monitoring "metricConfigurations=[{metricNames=[CPUUtilization,MemoryUtilization],resolutionSeconds=20}]" -
等待部署完成。您可以使用 describe-services 命令并检查部署状态来监控进度。
aws ecs describe-services --regionus-east-1\ --clustermy-cluster\ --servicesmy-service -
部署完成后,通过描述服务修订版来验证监控配置是否处于活动状态。从
describe-services输出中获取有效的服务修订版 ARN,然后运行:aws ecs describe-service-revisions --regionus-east-1\ --service-revision-arnsarn:aws:ecs:us-east-1:012345678910:service-revision/my-cluster/my-service/1234567890123456789确认监控配置出现在响应中:
{ "serviceRevisions": [ { ... "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-capacity1\ --max-capacity10\ --regionus-east-1 -
使用 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-namemy-highres-cpu-policy\ --policy-type TargetTrackingScaling \ --target-tracking-scaling-policy-configuration '{ "TargetValue":50.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ECSServiceAverageCPUUtilizationHighResolution" } }' \ --regionus-east-1 -
验证策略是否已创建:
aws application-autoscaling describe-scaling-policies \ --service-namespace ecs \ --resource-id service/my-cluster/my-service\ --scalable-dimension ecs:service:DesiredCount \ --regionus-east-1
验证更快的服务自动扩缩速度
第 1 部分:验证高分辨率指标正在发布
-
导航到 CloudWatch 控制台。
-
在导航窗格中,选择指标,然后选择所有指标。
-
选择 AWS/ECS 命名空间。
-
选择 ClusterName、ServiceName。
-
找到您的服务的
CPUUtilization和MemoryUtilization指标。 -
将时间段设置为 20 秒。您应该以 20 秒为间隔看到数据点,从而确认高分辨率指标处于活动状态。
第 2 部分:验证扩缩策略是否使用高分辨率指标
-
在服务详细信息页面上,选择服务自动扩缩选项卡。
-
查看您现有的扩缩策略并确认该指标已设置为高分辨率变体(
ECSServiceAverageCPUUtilizationHighResolution或ECSServiceAverageMemoryUtilizationHighResolution)。 -
或者,使用 CLI 进行验证:
aws application-autoscaling describe-scaling-policies \ --service-namespace ecs \ --resource-id service/my-cluster/my-service\ --scalable-dimension ecs:service:DesiredCount \ --regionus-east-1确认响应中的
PredefinedMetricType设置为高分辨率指标。
注意事项
-
监控配置更改会创建新的服务修订版并需要部署服务。在部署完成并且所有任务都以 20 秒的分辨率发出之后,高分辨率扩缩指标才可用。
-
对于使用应用程序负载均衡器和网络负载均衡器的服务,支持高分辨率指标。不支持使用不带目标组的经典负载均衡器的服务。
-
对于使用
CODE_DEPLOY或EXTERNAL部署控制器类型的服务,不支持高分辨率指标。 -
您可以使用
DescribeServiceRevisions查看服务的监控配置。监控配置不在CreateService或UpdateService响应中返回。