我有一个自动伸缩组,通常在其中有2个实例,但是我希望根据自定义指标( item_count )进行扩展。我希望使用的放大公式为instance count * threshold > total item count
,即如果项目数分别为35和30,实例数为2,阈值为30,则项目总数超过阈值,并且应该发出CloudWatch警报,触发自动缩放操作。
我相信使用CloudWatch中的自定义指标可以做到这一点。我已如下修改我的amazon-cloudwatch-agent.json
文件:
"metrics":{
"namespace": "Custom",
"metrics_collected":{
"statsd":{
"service_address":":8125",
"metrics_collection_interval":5,
"metrics_aggregation_interval":10
}
}
}
为了测试,我一直在每台机器上运行一个简单的本地回显测试:
服务器1:
echo "item-count:35|c" | nc -u -w0 127.0.0.1 8125
服务器2:
echo "item-count:30|c" | nc -u -w0 127.0.0.1 8125
我的指标正在向CloudWatch报告,并且我已经能够编写“指标数学”以将这些值加在一起。但是,我无法编写一个“度量数学”表达式,可以通过名称空间,度量名称等动态获取这些表达式。
一旦有了该值,我还需要为instance count * threshold
创建一个指标,并将其用于实际警报。我是否为此使用了错误的工具,CloudWatch能够支持这种逻辑吗?
答案 0 :(得分:0)
因此,这还没有经过战斗测试,但是是的,我相信您可以完成。而且,我认为这可能比您当前的期望更简单。
从本质上讲,您将让您的实例将自定义指标(看起来像您正在执行的)推送到CloudWatch。您实际上可以使用CloudFormation在ScalingPolicy中编写TargetTrackingConfiguration来跟踪指标的SUM,而不是触发CloudWatch警报以进行缩放事件。
例如:
ItemCountScalingPolicy:
Type: 'AWS::AutoScaling::ScalingPolicy'
Properties:
TargetTrackingConfiguration:
TargetValue: 30 #Or lower if you want runway for scaling events
CustomizedMetricSpecification:
Namespace: Custom
Statistic: SUM #Takes care of the logic based on number of EC2 in ASG
MetricName: EC2ItemCount
Dimensions: #optional value that requires you to push data with the dimension
我相信这会为您创建名称空间/指标(但我可能已关闭)。现在,扩展策略将处理扩展和扩展,以保持与该目标接近。也可以使用CloudFormation的固有功能来扩展此指标,以将指标与部署联系起来。更加模块化和强大,可满足您的需求。