Logstash CloudWatch插件采集Auto Scaling组CPUUtilization指标报错
问题产生原因
报错的核心原因是配置中使用的过滤维度和命名空间不匹配:
- 你当前指定的
AWS/EC2命名空间下,CPUUtilization指标的原生合法过滤维度只有InstanceId,不支持直接传入AutoScalingGroupName作为API请求的过滤参数 AutoScalingGroupName是CloudWatch基于EC2实例与ASG的绑定关系自动关联的附加维度,不属于EC2服务上报CPU指标时自带的原生维度,直接作为过滤参数传给CloudWatch API时,就会返回过滤器非法的错误。
配置调整方案
根据实际采集需求,二选一调整配置即可:
方案1:采集Auto Scaling组维度聚合的CPUUtilization
如果需要的是整个ASG维度聚合后的CPU平均指标,直接把命名空间改成Auto Scaling服务专属的AWS/AutoScaling即可,这个命名空间下的指标原生支持AutoScalingGroupName作为过滤维度,调整后的输入配置如下:
cloudwatch { access_key_id => "${PROD_KEY_ENV}" secret_access_key => "${PROD_SECRET_KEY_ENV}" type => "prod" tags => ["CWMetrics"] namespace => "AWS/AutoScaling" metrics => ["CPUUtilization"] filters => {"AutoScalingGroupName" => "name_of_asg"} period => 60 statistics => ["Average"] region => "eu-central-1" }
注意:该配置采集到的是整个ASG的聚合CPU数据,不是组内单台EC2实例的单独CPU指标。
方案2:采集ASG下每台EC2实例的CPUUtilization
如果需要拿到组内每台EC2实例的单独CPU数据,不能在CloudWatch输入阶段直接按ASG名过滤,分两步调整:
- 修改输入配置,移除
filters中针对AutoScalingGroupName的过滤规则,先拉取对应区域下EC2实例的CPU指标(只要实例绑定了ASG,返回的事件中会自动携带AutoScalingGroupName字段) - 在Logstash中新增过滤段,筛选出属于目标ASG的指标事件,丢弃其他无关数据,参考配置如下:
filter { if [AutoScalingGroupName] != "name_of_asg" { drop {} } }
内容的提问来源于stack exchange,提问作者LucaFerraro
相关产品推荐
相关产品推荐

