Loading
close

监控集群联邦

time 更新时间:2026-08-21 14:27:48

监控集群联邦可以通过整合多个集群中的 Prometheus 或 Thanos 实例,实现跨集群统一监控、长期数据存储、查询性能优化、和异地灾备等能力。

Prometheus 集群联邦

对于第三方 Prometheus Server 而言,可以同采集 Exporter 实例一样从云平台 Prometheus Server 实例获取指标数据。其核心在于每个集群都包含一个用于获取当前实例中监控样本的接口,可观测服务支持 /federate 接口来配置 Prometheus 集群联邦。

此种联邦方案支持对监控数据进行长期存储。

PrometheusFederateProm.png

前提条件

  • 本地已经成功安装 Prometheus;
  • 签名机制使用 Basic Auth 认证,请向云管或者技术支持人员获取所需的账号和密码,替换示例中使用的账号 your_username 和密码 your_password
  • 集群对接的地址格式为 ecms-web-100-100-4-10,其中 100-100-4-10 是集群部署的公网 IP 的地址;

    kubernetes 默认使用 ClusterFirst 的 dnspolicy,如您的集群无法解析 ecms-web-100-100-4-10 等域名,则需要在 prometheus 启动时添加别名参数 hostAliases,以支持 Pod 可以访问在配置中的域名。

集群联邦

联邦配置通过 Prometheus 的 scrape_configs 完成。可根据云平台集群的部署模式,选择对应方案:

场景一:标准配置集群

适用于云平台 Prometheus 标准配置部署的集群。在 scrape_configs 中新增如下 job 即可:

- job_name: 'federate-prometheus-1'
  scrape_interval: 30s
  basic_auth:
    username: 'your_username' # 替换正确的用户名
    password: 'your_password' # 替换正确的密码
  params:
    'match[]':
      - '{job="node-exporter"}' # 按需调整:指定要拉取的指标范围
  static_configs:
    - targets:
        - 'ecms-web-100-100-4-10' # 替换正确的集群地址
      labels:
        __path__: "/shard/0/federate"
  relabel_configs:
    - source_labels: [__path__]
      target_label: __metrics_path__
  metric_relabel_configs:
    - action: labeldrop
      regex: prometheus_replica

关键参数说明:

  • match[]:PromQL 标签选择器,用于过滤需要拉取的指标。示例中仅拉取 job=”node-exporter” 的指标,可按实际需求修改或追加。
  • __path__:联邦接口路径。标准配置集群固定使用 /shard/0/federate。

场景二:分片配置集群

适用于云平台 Prometheus 已开启分片的集群。每个分片对应独立的联邦路径,需为每个分片分别配置 target:

- job_name: 'federate-prometheus-2'
  scrape_interval: 30s
  basic_auth:
    username: 'your_username' # 替换正确的用户名
    password: 'your_password' # 替换正确的密码
  params:
    'match[]':
      - '{job="node-exporter"}'
  static_configs:
    - targets:
        - 'ecms-web-100-100-4-11' # 替换正确的集群地址
      labels:
        __path__: "/shard/0/federate" # 分片 0 路由
    - targets:
        - 'ecms-web-100-100-4-11' # 替换正确的集群地址
      labels:
        __path__: "/shard/1/federate" # 分片 1 路由
  relabel_configs:
    - source_labels: [__path__]
      target_label: __metrics_path__
  metric_relabel_configs:
    - action: labeldrop
      regex: prometheus_replica

分片数量以云平台实际配置为准,按 /shard/{N}/federate 规则依次添加 targets。

场景三:大规模集群性能优化

当单个集群节点规模较大(例如超过 500 个节点)时,一次性拉取全部指标可能导致联邦接口响应超时。建议将指标按节点或业务维度拆分,配置多个 scrape job 分批拉取。
以下示例将 kubelet 指标按节点名称前缀拆分为两个 job(适用于分片配置集群):

scrape_configs:
  - job_name: 'federate-prometheus-1-kubelet-0'
    scrape_interval: 30s
    basic_auth:
      username: 'your_username' # 替换正确的用户名
      password: 'your_password' # 替换正确的密码
    params:
      'match[]':
        - '{job="kubelet",node=~"node-1[0-9]"}' # 匹配 node-10 ~ node-19 等节点
    static_configs:
      - targets:
          - 'ecms-web-100-100-4-10' # 替换正确的集群地址
        labels:
          __path__: "/shard/0/federate" # 分片 0 路由
      - targets:
          - 'ecms-web-100-100-4-10' # 替换正确的集群地址
        labels:
          __path__: "/shard/1/federate" # 分片 1 路由
    relabel_configs:
      - source_labels: [__path__]
        target_label: __metrics_path__
    metric_relabel_configs:
      - action: labeldrop
        regex: prometheus_replica
  - job_name: 'federate-prometheus-1-kubelet-1'
    scrape_interval: 30s
    basic_auth:
      username: 'your_username' # 替换正确的用户名
      password: 'your_password' # 替换正确的密码
    params:
      'match[]':
        - '{job="kubelet",node=~"node-2[0-9]"}' # 匹配 node-20 ~ node-29 等节点
    static_configs:
      - targets:
          - 'ecms-web-100-100-4-10' # 替换正确的集群地址
        labels:
          __path__: "/shard/0/federate" # 分片 0 路由
      - targets:
          - 'ecms-web-100-100-4-10' # 替换正确的集群地址
        labels:
          __path__: "/shard/1/federate" # 分片 1 路由
    relabel_configs:
      - source_labels: [__path__]
        target_label: __metrics_path__
    metric_relabel_configs:
      - action: labeldrop
        regex: prometheus_replica

优化建议:拆分粒度需结合实际节点规模和指标体量调整。若仍出现超时,可进一步细化 match[] 过滤条件,或适当增大 scrape_interval 以降低拉取频率。

分片数量以云平台实际配置为准,按 /shard/{N}/federate 规则依次添加 targets。

Thanos 集群联邦

对于 Thanos 而言,支持通过服务发现的方式在第三方 Thanos Query 服务的启动参数中配置云平台 Thanos Query 地址来完成对接。

ThanosFederate.png

前提条件

  • 本地已经成功安装 Thanos;
  • 签名机制使用证书认证,请向云管或者技术支持人员获取所需的证书,替换示例中使用的证书;
  • 集群对接使用grpc协议,地址格式为 ecms-100-100-4-10,其中 100-100-4-10 是集群部署的公网 IP 的地址;

    kubernetes 默认使用 ClusterFirst 的 dnspolicy,如您的集群无法解析 ecms-100-100-4-10 等域名,则需要在 thanos 启动时添加别名参数 hostAliases,以支持 Pod 可以访问在配置中的域名。

集群联邦

第三方 Thanos Query 启动参数配置示例如下:

tip

请注意的是下面 endpoint 后配置的域名和上面 prometheus 对接的地址不一样。

args:
  - query
  - --endpoint=ecms-100-100-4-10:443 # 替换正确的集群地址(第一套)
  - --endpoint=ecms-100-100-4-11:443 # 替换正确的集群地址(第二套)
  - --query.replica-label=prometheus_replica
  - --query.replica-label=thanos_ruler_replica
  - --log.level=info
  - --grpc-client-tls-secure
  - --grpc-client-tls-skip-verify
  # 证书内容请向云管或者技术支持人员获取
  - --grpc-client-tls-cert=/certs/tls.crt
  - --grpc-client-tls-key=/certs/tls.key
  - --grpc-client-tls-ca=/certs/ca.crt
此篇文章对你是否有帮助?
没帮助
locked-file

您暂无权限访问该产品