联邦 (Federation)
联邦允许一个 Prometheus 服务器从另一个 Prometheus 服务器抓取选定的时间序列。
关于原生直方图的说明:要通过联邦抓取原生直方图,抓取的 Prometheus 服务器需要在其抓取配置中设置 scrape_native_histograms: true,这意味着抓取过程将使用 protobuf 格式。如果联邦指标包含同一指标名称的不同样本类型(任何种类的浮点数、计数器直方图或仪表盘直方图),则联邦载荷将包含多个同名但类型不同的指标系列(出于技术原因,浮点样本始终以 untyped 类型联合,而直方图样本则包含完整的类型信息)。从技术上讲,这违反了 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 服务器联邦到抓取服务器中。
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'