联邦
联邦功能允许一个 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
将标签为 job="prometheus"
或指标名称以 job:
开头的任何序列从位于 source-prometheus-{1,2,3}:9090
的 Prometheus 服务器联邦到抓取的 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'