AWS ECS基于CloudWatch告警的自动扩缩容未按预期工作
解决方案
让我们一步步排查并修复这个自动扩缩容的问题,核心是你混淆了CloudWatch指标的类型,以及统计方式的错误选择:
1. 替换为正确的CloudWatch指标
你当前使用的ActivitiesScheduled是增量指标,统计的是指定周期内新调度的活动数量,而非你在Step Functions控制台看到的「当前待处理的计划活动存量」(也就是那1000+的积压数量)。
你需要把MetricName改为ActivitiesPending——这个指标才是代表当前处于待处理状态的活动数量,完全匹配你想要基于积压量触发扩容的需求。
2. 调整统计方式(Statistic)
ActivitiesPending属于gauge类型指标(反映某个时刻的状态值),你之前用的SampleCount完全不适用:
- 推荐使用
Maximum:捕获统计周期内的最大待处理活动数量,确保不会错过峰值需求 - 也可以用
Average:统计周期内的平均积压量,适合平稳扩容的场景
把配置中的Statistic字段从SampleCount改为Maximum即可。
3. 优化阈值与周期配置
- Threshold:当前设为0会导致只要有活动就触发扩容,建议根据你的ECS实例处理能力设置合理值,比如当积压量超过500时触发扩容
- Period:当前300秒(5分钟)的周期太长,若积压增长快会导致响应滞后,可以缩短到60秒,让告警更及时
修正后的告警配置示例
{ "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmName": "thumbnails-generator-scaling-alarm", "ActionsEnabled": true, "OKActions": [], "AlarmActions": [ "arn:aws:autoscaling:us-west-2:111111111111:scalingPolicy:8694a867-85ee-4740-ba70-7b439c3e5fb3:resource/ecs/service/prod/thumbnails-generator:policyName/thumbnails-generator-scaling-policy" ], "InsufficientDataActions": [], "MetricName": "ActivitiesPending", "Namespace": "AWS/States", "Statistic": "Maximum", "Dimensions": [ { "Name": "ActivityArn", "Value": "arn:aws:states:us-west-2:111111111111:activity:thumbnails-generator-activity-prod" } ], "Period": 60, "EvaluationPeriods": 1, "DatapointsToAlarm": 1, "Threshold": 500, "ComparisonOperator": "GreaterThanOrEqualToThreshold", "TreatMissingData": "missing" } }
4. 验证配置有效性
- 登录CloudWatch控制台,进入
AWS/States命名空间,选择你的ActivityArn维度,查看ActivitiesPending指标的Maximum统计值,确认是否和Step Functions控制台的积压数量一致 - 手动生成足够的待处理活动,观察告警是否触发,以及ECS服务是否按预期扩容
额外建议
- 调整ECS扩容策略的步长:根据单实例能处理的活动数量设置每次扩容的实例数,避免扩容不足或过度扩容
- 若
TreatMissingData设为missing,无数据时告警会处于「数据不足」状态,可改为notBreaching(无数据时视为正常状态)
内容的提问来源于stack exchange,提问作者David Faizulaev
相关产品推荐
相关产品推荐

