联邦化
联邦化(federation)允许 Prometheus 服务器从另一个 Prometheus 服务器收集选定的时间序列。
关于原生 Histogram(实验特性)的注释:为了通过联邦化收集原生 Histogram,进行收集的 Prometheus 服务器需要在命令行标志--enable-feature=native-histograms
中启用原生 Histogram,这意味着使用 protobuf 格式进行收集。如果联邦化的指标包含相同名称但具有不同样本类型(float64、Counter Histogram, Gauge Histogram)的数据,则联邦化数据包将包含多个具有相同名称但不同类型的指标族。技术上,这违反了 protobuf 展示格式的规则,但 Prometheus 仍然能够正确地消费所有指标。
使用场景
联邦化有多种应用场景。通常情况下,它用于实现可伸缩的 Prometheus 监控环境或从一个服务的 Prometheus 中拉取相关指标到另一个实例。
层级联邦化
层级联邦化(hierarchical federation)允许 Prometheus 在具有数十个数据中心和数百万节点的环境中实现可伸缩性。在这种应用场景下,联邦架构类似于树形结构,高层的 Prometheus 服务器从大量子级服务器收集聚合时间序列数据。
例如,现在有一组来自许多数据中心的 Prometheus 服务器,它们以更细的粒度(实例级别的采集)收集数据;以及一组收集并存储来自这些本地服务器的聚合数据(job 级别的采集)的全球性 Prometheus 服务器。这种用例能够给我们提供全局汇总视图和详细的局部视图。
跨服务联邦化
在跨服务联邦化(cross-service federation)中,一个服务的 Prometheus 服务器被配置为从另一个服务的 Prometheus 服务器收集选择的数据,以便在单个服务器内对两个数据集进行告警和查询。
例如,运行多个服务的集群调度器可能会暴露集群中服务实例的资源使用信息(如内存和 CPU 使用情况)。另一方面,运行在该集群上的服务仅暴露特定于服务的应用程序指标。通常,这些两组指标由单独的 Prometheus 服务器收集。使用联邦化,包含服务级别指标的 Prometheus 服务器可以从集群 Prometheus 中拉入其特定服务的集群资源使用指标,这样两个数据集就可以在同一个服务器内使用。
配置联邦化
在任何给定的 Prometheus 服务器上,/federate
端点允许检索服务器中选定的一组时间序列的当前值。至少需要指定一个match[]
URL 参数来选择要暴露的系列。每个match[]
参数都需要指定一个瞬时向量选择器,如up
或{job="api-server"}
。如果提供了多个match[]
参数,则选择所有匹配的系列的并集。
为了从一个服务器到另一个服务器联邦指标,配置目标 Prometheus 服务器从源服务器的/federate
端点进行收集,并同时启用honor_labels
收集选项(不覆盖源服务器提供的任何标签)以及传递所需的match[]
参数。例如,以下scrape_configs
从 Prometheus 服务器source-prometheus-{1,2,3}:9090
中的任何带有标签job="prometheus"
或指标名称以job:
开头的时间序列,将这些指标汇聚到收集的 Prometheus:
该文档基于 Prometheus 官方文档翻译而成。