Prometheus原生不支持AWS或阿里云ASG自动发现,需依赖外部服务发现:阿里云ARMS Prometheus通过资源中心自动发现ECS并打标asg_name;AWS需用ec2_sd_configs+relabel_configs实现,配合cloudwatch-exporter采集ASG指标,并验证target状态与标签。

Prometheus 本身不直接支持通过 AWS 或阿里云 API 自动发现弹性伸缩组(ASG)中的节点及其监控路径,它需要借助外部服务发现机制或适配器来实现。阿里云可观测监控 Prometheus 版(ARMS Prometheus)已内置对云资源的服务发现能力,但需配合资源中心与 Exporter 配置;而原生开源 Prometheus 则需手动集成 CloudWatch、EC2 API 或使用第三方 exporter(如 cloudwatch-exporter、aws-exporter)并配置动态标签映射。
确认云平台服务发现前提
阿里云场景下,ECS 主机自动发现依赖阿里云资源中心已开通。资源中心提供统一的 VPC、ECS 实例元数据,Prometheus Agent 通过该中心拉取当前账号下所有 ECS 实例列表,并为每台实例自动部署 node_exporter 和 process_exporter,默认监听端口 9100,指标路径为 /metrics。
AWS 场景下,原生 Prometheus 无内置 ASG 发现能力,需自行实现:
- 使用
ec2_sd_configs按标签(如asg:my-app)筛选 EC2 实例,再结合relabel_configs动态注入 ASG 名称、可用区等标签 - 若需采集 ASG 级别指标(如期望实例数、实际运行数),需搭配
cloudwatch_exporter并配置对应命名空间AWS/AutoScaling - 确保 IAM Role 具备
CloudWatch:GetMetricStatistics和EC2:DescribeInstances权限
阿里云 ARMS Prometheus 中配置 ECS ASG 节点发现
阿里云托管 Prometheus 不需要手动写 job,而是通过“接入主机监控”自动完成服务发现:
- 在 ARMS 控制台 > 接入中心 > 主机监控,选择目标 VPC,勾选“自动发现本 VPC 下所有 ECS 实例”
- 接入后,系统自动识别属于同一伸缩组的 ECS 实例,并打上
__meta_arms_asg_name标签(内部使用,可在 Grafana 查询中通过label_values(node_cpu_seconds_total, asg_name)验证) - 若需自定义监控路径或端口(例如某些业务 Exporter 运行在
8080/metrics),可在“组件管理”中编辑对应 Exporter 配置,修改metrics_path和port字段
自建 Prometheus 对接 AWS ASG 的典型 scrape job 示例
以下 YAML 片段适用于开源 Prometheus,实现基于标签的 ASG 节点自动发现与路径重写:
scrape_configs:
- job_name: 'aws-asg-nodes'
ec2_sd_configs:
- region: us-east-1
access_key: xxx
secret_key: xxx
port: 9100
relabel_configs:
- source_labels: [__meta_ec2_tag_AutoScalingGroupName]
target_label: asg_name
action: replace
- source_labels: [__meta_ec2_private_ip]
target_label: instance
action: replace
- source_labels: [__meta_ec2_tag_Name]
target_label: instance_name
action: replace
- source_labels: [__meta_ec2_instance_state]
regex: running
action: keep
metrics_path: /metrics
scheme: http注意:ec2_sd_configs 只发现实例,不感知 ASG 生命周期变更;若节点被 ASG 终止,Prometheus 会在下次抓取时自动剔除(因 target 不可达)。
关键验证步骤
无论哪种方式,都应检查以下三点是否生效:
- 在 Prometheus UI 的 Status > Targets 页面,确认 ASG 相关 target 状态为 UP,且标签中含
asg_name或__meta_arms_asg_name - 执行查询如
count by(asg_name) (up{job="aws-asg-nodes"})或count by(asg_name) (node_cpu_seconds_total),观察各 ASG 下活跃节点数是否符合预期 - 若使用 Grafana,可在变量中添加
label_values(node_cpu_seconds_total, asg_name)创建 ASG 下拉筛选器,验证标签可被查询引擎识别

















