ec2_sd_configs 是什么
在 AWS 上用 ec2_sd_configs 自动发现实例:指定区域与过滤条件后,Prometheus 通过 AWS API 拉取实例列表并生成抓取目标,再经 relabel 生成 instance 与业务标签,免去维护静态目标清单。实例扩容、替换 IP 后监控目标会自动刷新,适合弹性伸缩频繁的环境。
基本信息
| 主要配置 | region(必需)、port、filters、role_arn、refresh_interval |
|---|---|
| 权限要求 | 需具备 ec2:DescribeInstances,建议用实例角色或环境凭据 |
| 刷新方式 | 按刷新间隔调用 AWS API 拉取实例列表并更新目标 |
| 标签来源 | __meta_ec2_* 系列元标签,含实例属性与实例标签 |
常用元标签
| 标签 | 含义 | 用途 |
|---|---|---|
| __meta_ec2_instance_id | 实例 ID | 跳转控制台、关联账单与变更单 |
| __meta_ec2_private_ip | 私有 IP | 常见做法是改写成 instance 标签 |
| __meta_ec2_public_ip | 公网 IP | 跨网络访问时使用,口径要与私有 IP 统一 |
| __meta_ec2_tag_Name | 实例 Name 标签 | 作为实例可读名,便于看图定位 |
| __meta_ec2_tag_Env | 实例自定义标签 | 把环境、团队等业务标签带进监控 |
配置示例
配置示例
- job_name: node
ec2_sd_configs:
- region: us-east-1
port: 9100
refresh_interval: 60s
filters:
- name: tag:Monitoring
values: [enabled]
- name: instance-state-name
values: [running]
relabel_configs:
- source_labels: [__meta_ec2_private_ip]
target_label: instance
- source_labels: [__meta_ec2_tag_Name]
target_label: instance_name
- source_labels: [__meta_ec2_tag_Env]
target_label: env典型使用场景
- EC2 实例频繁扩缩容,静态目标清单维护成本过高
- 按实例标签筛选需要监控的机器,例如只抓 Monitoring=enabled 的实例
- 跨多个区域部署时每个区域一个 job 分别发现
- 配合自动伸缩组,实例替换后监控目标自动跟随更新
filters 的名称分两类:以 tag: 开头的是实例标签过滤,其它是实例属性过滤(如 instance-state-name、vpc-id);写错不会报错,只是匹配不到目标。
私有 IP 与公网 IP 混用会让 instance 标签在不同网络环境间跳变,上线前统一口径并写进文档,避免图表出现成倍的重复序列。
上线检查项
- 确认执行抓取的实例具备 DescribeInstances 权限,且不依赖长期密钥
- 用小范围 filters 验证目标数量与预期一致,再放开监控范围
- 核对抓取端点到被监控实例的网络连通性,安全组与子网路由都要通
- 确认标签命名约定(Env、Team、Monitoring)已在实例上统一打标