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
相关产品推荐
相关产品推荐

