指标数学-SUM动态指标影响自动缩放

时间:2019-12-16 04:19:08

标签: amazon-web-services amazon-cloudwatch amazon-cloudwatch-metrics

我有一个自动伸缩组,通常在其中有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能够支持这种逻辑吗?

1 个答案:

答案 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的固有功能来扩展此指标,以将指标与部署联系起来。更加模块化和强大,可满足您的需求。

AWS CFN文档: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-autoscaling-scalingpolicy-targettrackingconfiguration