联邦

联邦允许一个 Prometheus 服务器从另一个 Prometheus 服务器抓取选定的时间序列。

关于原生直方图的说明(实验性功能):要通过联邦抓取原生直方图,抓取的 Prometheus 服务器需要启用原生直方图(通过命令行标志 --enable-feature=native-histograms),这意味着抓取时使用 protobuf 格式。如果联合指标包含同一指标名称的不同采样类型(float64、计数器直方图、计量器直方图)的混合,联邦负载将包含多个同名(但类型不同)的指标族。技术上讲,这违反了 protobuf 暴露格式的规则,但 Prometheus 仍然能够正确地摄取所有指标。

用例

联邦有不同的用例。通常,它用于实现可伸缩的 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_configssource-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'

本文档是开源的。请通过提交问题或拉取请求来帮助改进它。