You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudWatch Exporter指标异常:30台服务器仅部分正常采集

问题:CloudWatch Exporter指标采集异常排查

30台配置完全一致的服务器(仅标签名称有调整),使用Docker部署cloudwatch_exporter采集AWS指标时出现以下异常:

  • 10台服务器指标采集正常,20台无法采集指定指标,但其他指标在所有服务器上均能正常显示
  • Grafana仅展示8台服务器的相关指标,Prometheus指标列表中甚至找不到正常采集服务器的目标指标
  • exporter、Prometheus、Grafana日志均无报错,调整采集时间参数后问题仍未解决

现有配置

CloudWatch Exporter配置

---
region: eu-west-1

# Request data that spans this range:
range_seconds: 60
# Request data that is already this old:
delay_seconds: 60
# How often do we query AWS?
#period_seconds: 60


##cpucredit
metrics:

  - aws_namespace: AWS/EC2
    aws_metric_name: CPUCreditBalance
    period_seconds: 3600
    aws_dimensions: [InstanceId]
    aws_statistics: [Average]
    aws_tag_select:
      tag_selections:
        Name: ["NAME prod env"]
      resource_type_selection: "ec2:instance"
      resource_id_dimension: InstanceId

  - aws_namespace: AWS/RDS
    aws_metric_name: BufferCacheHitRatio
    period_seconds: 360
    aws_dimensions: [DBInstanceIdentifier]
    aws_statistics: [Average]
    aws_dimension_select_regex:
      DBInstanceIdentifier: [databasename]

  - aws_namespace: AWS/RDS
    aws_metric_name: FreeableMemory
    period_seconds: 60
    aws_dimensions: [DBInstanceIdentifier]
    aws_statistics: [Average]
    aws_dimension_select_regex:
      DBInstanceIdentifier: [databasename]

  - aws_namespace: AWS/RDS
    aws_metric_name: CPUUtilization
    period_seconds: 60
    aws_dimensions: [DBInstanceIdentifier]
    aws_statistics: [Average]
    aws_dimension_select_regex:
      DBInstanceIdentifier: [databasename]

  - aws_namespace: AWS/RDS
    aws_metric_name: DatabaseConnections
    period_seconds: 3600
    aws_dimensions: [DBInstanceIdentifier]
    aws_statistics: [Average]
    aws_dimension_select_regex:
      DBInstanceIdentifier: [databasename]

  - aws_namespace: AWS/ApplicationELB
    aws_metric_name: RequestCount
    period_seconds: 86400
    delay_seconds: 60
    range_seconds: 86400
    aws_dimensions: [LoadBalancer, TargetGroup]
    aws_dimension_select_regex:
      TargetGroup: ["(.*)group1(.*)"]
    aws_statistics: [Sum]

Prometheus配置

##This is my endpoint in prometheus config
  - job_name: 'cloudwatch_insnace'
    scrape_interval: 300s
    static_configs:
         - targets: ['instancedns.com:9106']

排查与解决方案

1. 验证Exporter自身采集结果

直接访问每台服务器的http://<server-ip>:9106/metrics端点,检查目标指标(如aws_ec2_cpucreditbalance_average)是否存在:

  • 若部分服务器端点无该指标,问题出在exporter与AWS CloudWatch的交互环节
  • 若所有服务器端点均有指标但Prometheus未采集到,问题在Prometheus配置或网络连通性

2. 核对AWS权限与标签/正则匹配

  • 确认exporter使用的IAM角色/密钥拥有cloudwatch:GetMetricData和tag:GetResources权限,且权限覆盖所有30台服务器的资源范围
  • 检查EC2实例的Name标签是否完全匹配配置中的["NAME prod env"],注意大小写、空格等细节,部分实例可能存在标签拼写错误
  • 验证RDS、ELB的正则匹配规则:使用AWS CLI测试正则是否覆盖目标资源,例如:
    aws cloudwatch list-metrics --namespace AWS/RDS --metric-name CPUUtilization | grep databasename
    

3. 修正采集时间参数的合理性

  • 确保range_seconds是period_seconds的整数倍,否则CloudWatch会返回数据异常。例如EC2的CPUCreditBalance配置period_seconds:3600,但全局range_seconds:60不匹配,需将全局range_seconds调整为3600或其整数倍,或为该指标单独设置range_seconds
  • ELB的RequestCount使用period_seconds:86400(1天),需将delay_seconds调整为3600(1小时),确保CloudWatch已生成完整的日度数据

4. 修复Prometheus配置问题

  • 检查targets是否包含所有30台服务器的DNS/IP,当前配置仅列出instancedns.com:9106,需确认该域名是否覆盖所有服务器,或添加多个目标条目
  • 查看Prometheus的Status -> Targets页面,确认所有服务器的采集状态为UP,若为DOWN则检查9106端口是否开放、防火墙规则是否允许Prometheus访问
  • 调整scrape_interval与exporter的period_seconds匹配,确保采集间隔大于delay_seconds + period_seconds,避免频繁采集触发CloudWatch限流

5. 确认CloudWatch数据可用性

  • 登录AWS CloudWatch控制台,手动查询异常服务器的目标指标,确认该指标是否有数据生成。例如EC2的CPUCreditBalance仅T系列实例有该指标,需确认异常服务器是否为T系列实例;部分闲置实例可能未生成指标数据

内容的提问来源于stack exchange,提问作者Skiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:55:42