配置Prometheus联邦集群实现跨机房监控,核心是分层采集、有选择拉取和标签对齐;各机房叶节点仅暴露聚合或关键指标,中心联邦节点按需拉取,避免高基数指标,并通过external_labels与relabel_configs统一标签与告警。

配置 Prometheus 联邦集群实现跨机房监控,核心是分层采集 + 有选择拉取 + 标签对齐。不是把所有原始指标都拉到中心,而是让各机房的 Prometheus(叶节点)只暴露聚合后或关键任务级指标,中心集群按需汇聚,兼顾性能、可维护性和语义清晰性。
明确联邦角色与数据流向
每个机房部署一个叶节点 Prometheus,负责采集本地细粒度指标(如容器 CPU、Pod 状态、节点磁盘);中心集群部署一个联邦 Prometheus(下游),定期从各叶节点的 /federate 端点拉取预聚合指标。
- 叶节点 → 暴露
{job="node-exporter"}或up{job="kube-state-metrics"}这类轻量、高价值指标 - 联邦层 → 拉取
{__name__=~"job:.*"}(如job:node_cpu_seconds_total:rate5m)、node_memory_MemFree_bytes等聚合指标 - 避免拉取原始直方图桶(如
http_request_duration_seconds_bucket)或带高基数标签(如pod_name)的指标
叶节点(源端)配置要点
在各机房 Prometheus 的 prometheus.yml 中添加专用 job,目标指向自身,通过 params.match[] 精确控制可被联邦拉取的指标范围:
- 设置
job_name: 'federate',metrics_path: '/federate' -
params.match[]推荐只写具体模式,例如:'{__name__=~"job:.*"}''{__name__=~"node_disk_io_time_seconds_total"}''up{job="alertmanager"}' - 切勿使用
{__name__=~".*"},否则会暴露全部原始样本,造成带宽和存储浪费
联邦层(中心端)拉取配置
在中心 Prometheus 的 scrape_configs 中为每个机房定义独立 job:
- 必须设
honor_labels: true,保留上游的cluster、datacenter、job等标识标签 -
metrics_path固定为/federate,不可省略 -
params.match[]必须与叶节点暴露的指标模式严格一致,多个 match 是“并集”关系 - 建议用
file_sd-configs动态管理机房列表(如clusters.json),便于增删节点
标签治理与告警统一化
联邦后指标天然携带来源标识,但需主动治理防止冲突:
- 在叶节点配置
external_labels明确标注所属机房,例如:datacenter: "shanghai"、region: "cn-east-2" - 中心层可借助
relabel_configs统一重命名或补全缺失标签(如加env="prod") - 告警规则应基于联邦后的聚合指标编写(如
job:up:sum),避免依赖原始实例级指标,确保跨机房语义一致


















