联合

联合允许 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 服务器联合到抓取的 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'

本页内容