联邦是什么
联邦(federation)让上级 Prometheus 通过下级实例的 /federate 端点拉取部分序列,适合分层架构:各集群各自采集全量数据,上级只拉取记录规则产出的聚合指标,形成跨集群的全局视图。它解决的是多个 Prometheus 之间如何汇总的问题,代价是汇总完整度取决于下级规则产出什么。全量数据汇聚应该用 remote write,而不是靠联邦硬拉原始序列。
基本信息
| 机制 | 上级通过 metrics_path: /federate 拉取下级数据 |
|---|---|
| 关键参数 | params 中的 match[]、honor_labels、scrape_interval |
| 典型用法 | 只拉取记录规则产出的聚合指标 |
| 适用版本 | Prometheus 2.x |
| 权限要求 | 下级实例的接口需对上级网络可达 |
典型使用场景
- 分层汇总:各集群保留全量数据,全局只汇总关键服务指标
- 跨机房视图:上级看各机房的可用性与错误率对比
- 容量观察:汇总各集群的资源使用率,用于统一规划
- 数据隔离:下级保留原始数据,上级只拿聚合结果
- 迁移过渡:多实例并存期间用联邦做过渡汇总
使用要点
- 只拉聚合指标,避免把原始序列拉上来把上级实例拖垮
- honor_labels 决定标签冲突的处理方式,要防止实例标签互相覆盖
- 聚合口径由下级记录规则保证,规则变更要同步通知上级使用者
- 拉取间隔匹配下级规则的评估间隔,过密没有额外收益
- 配置前先评估下级联邦端点的负载与查询范围
上级抓取下级汇总指标
上级抓取下级汇总指标
- job_name: 'federate'
scrape_interval: 30s
honor_labels: true
metrics_path: /federate
params:
'match[]':
- '{__name__=~"job:.*"}' # 只取记录规则产出的聚合指标
static_configs:
- targets: ['prometheus-dc1:9090', 'prometheus-dc2:9090']关键参数
| 参数 | 作用 | 注意 |
|---|---|---|
| metrics_path | 固定为 /federate | 写错会拉不到任何数据 |
| match[] | 筛选要拉取的序列 | 写宽会把原始序列全拉上来 |
| honor_labels | 标签冲突处理方式 | 跨集群汇总时尤其重要 |
| scrape_interval | 拉取间隔 | 匹配下级规则的评估间隔 |
| targets | 下级实例地址 | 需保证网络可达 |
联邦适合汇总少量聚合指标;全量数据汇聚应使用远程写入,否则上级实例很容易被下级分片规模拖垮。