联邦
联邦允许 Prometheus 服务器从另一个 Prometheus 服务器抓取选定的时间序列。
关于原生直方图(实验性功能)的说明:要通过联邦抓取原生直方图,抓取数据的 Prometheus 服务器需要启用原生直方图(通过命令行标志 --enable-feature=native-histograms
),这意味着抓取时使用 protobuf 格式。如果联邦指标包含相同指标名称的不同样本类型(float64、计数器直方图、仪表直方图)的混合,联邦负载将包含多个同名(但类型不同)的指标族。从技术上讲,这违反了 protobuf 暴露格式的规则,但 Prometheus 仍然能够正确地摄取所有指标。
用例
联邦有多种用例。通常,它用于实现可扩展的 Prometheus 监控设置,或者将一个服务的 Prometheus 中的相关指标拉取到另一个服务中。
分层联邦
分层联邦使得 Prometheus 能够扩展到拥有数十个数据中心和数百万个节点的环境。在这种用例中,联邦拓扑结构类似于一棵树,更高级别的 Prometheus 服务器从大量下属服务器收集聚合的时间序列数据。
例如,一个设置可能由多个按数据中心划分的 Prometheus 服务器组成,它们收集高详细度的数据(实例级向下钻取),以及一组全局 Prometheus 服务器,它们仅从这些本地服务器收集和存储聚合数据(作业级向下钻取)。这提供了一个聚合的全局视图和详细的本地视图。
跨服务联邦
在跨服务联邦中,一个服务的 Prometheus 服务器被配置为从另一个服务的 Prometheus 服务器抓取选定的数据,以在单个服务器内对这两个数据集进行告警和查询。
例如,一个运行多个服务的集群调度器可能会公开集群上运行的服务实例的资源使用信息(如内存和 CPU 使用率)。另一方面,在该集群上运行的服务将仅公开应用程序特定的服务指标。通常,这两组指标由独立的 Prometheus 服务器抓取。通过联邦,包含服务级别指标的 Prometheus 服务器可以从集群 Prometheus 中拉取其特定服务的集群资源使用指标,以便这两组指标都可以在该服务器内使用。
配置联邦
在任何给定的 Prometheus 服务器上,/federate
端点允许检索该服务器中选定时间序列的当前值。必须至少指定一个 match[]
URL 参数来选择要暴露的序列。每个 match[]
参数需要指定一个 即时向量选择器,例如 up
或 {job="api-server"}
。如果提供了多个 match[]
参数,则选择所有匹配序列的并集。
要将指标从一个服务器联邦到另一个服务器,请配置您的目标 Prometheus 服务器从源服务器的 /federate
端点抓取数据,同时启用 honor_labels
抓取选项(以避免覆盖源服务器暴露的任何标签)并传入所需的 match[]
参数。例如,以下 scrape_configs
将从 source-prometheus-{1,2,3}:9090
处的 Prometheus 服务器中,所有带有标签 job="prometheus"
或指标名称以 job:
开头的序列联邦到抓取数据的 Prometheus 中。
scrape_configs:
- job_name: 'federate'
scrape_interval: 15s
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="prometheus"}'
- '{__name__=~"job:.*"}'
static_configs:
- targets:
- 'source-prometheus-1:9090'
- 'source-prometheus-2:9090'
- 'source-prometheus-3:9090'