Prometheus Federation 安装配置

如上图所示,在每个数据中心部署单独的 Prometheus Server,用于采集当前数据中心监控数据。并由一个中心的 Prometheus Server 负责聚合多个数据中心的监控数据。这一特性在 Promthues 中称为 Federation (联邦集群)。

Prometheus Federation (联邦集群)的核心在于每一个 Prometheus Server 都包含一个用于获取当前实例中监控样本的接口 /federate。对于中心 Prometheus Server 而言,无论是从其他的 Prometheus 实例还是 Exporter 实例中获取数据实际上并没有任何差异。

以下配置示例在中心 Prometheus Server 配置其抓取其他 Prometheus Server 的指标,必须至少有一个 match 配置,以指定要抓取的目标 Prometheus Server 的 Job 名称,可以使用正则表达式匹配抓取任务

scrape_configs:
- job_name: 'federate'
scrape_interval: 15s
honor_labels: true # 保留 Leaf 上抓取的指标的标签
honor_timestamps: false # 强制使用 Master 的当前时间,防止时间差导致无法抓取指标
metrics_path: '/federate'
params:
'match[]':
- '{__name__=~".+"}' # 抓取所有指标
static_configs:
- targets:
- '192.168.77.11:9090'
- '192.168.77.12:9090'

__name__ 是 Prometheus 特殊的预定义标签,表示指标的名称
使用以下配置采集目标 Prometheus Server 的所有指标

params:
'match[]':
- '{job=~".+"}'

Master Prometheus 的 Explorer(Web)中不会出现 Leaf 抓取的 Target,可以使用具体的指标如 up 等检查是否抓取到了数据

Master prometheus 上面测试 match 是否能抓取指标:

# curl -G 'http://43.13.23.59:9090/federate' --data-urlencode 'match[]={__name__=~".+"}' | tail

scrape_series_added{Project="CDN",instance="110.120.64.15:9100",job="cdn_node_exporter"} 0 1770621129341
scrape_series_added{Project="CDN",instance="110.120.0.7:9100",job="cdn_node_exporter"} 0 1770621132594
# TYPE up untyped
up{Project="CDN",instance="110.120.64.6:9100",job="cdn_node_exporter"} 1 1770621137089
up{Project="CDN",instance="localhost:9100",job="cdn_node_exporter"} 0 1770621124836
up{Project="CDN",instance="110.120.64.17:9100",job="cdn_node_exporter"} 1 1770621132241