You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让两台独立Prometheus Server仅抓取自身关联监控目标

解决两台独立Prometheus监控数据隔离的方法

你现在的问题是两台Prometheus都抓取了对方的关联组件,导致/targets页面显示合并的任务。要让每台只抓自己的组件,核心思路是给每个集群的组件打专属标签,然后在Prometheus配置里只过滤抓取对应标签的目标。

1. 给集群组件打专属标识标签

部署两台Prometheus及其配套组件(Alertmanager、Pushgateway、NodeExporter、kube-state-metrics)时,分别给每个集群的所有组件加上唯一标签:

  • 给prometheus-server-1集群的所有组件加标签:prometheus_cluster: server-1
  • 给prometheus-server-2集群的所有组件加标签:prometheus_cluster: server-2

不管是用Helm部署还是手动部署,确保Pod、Node(如果是NodeExporter)都带上这个标签。

2. 修改Prometheus的抓取配置,过滤目标

针对每台Prometheus的values.yaml,调整每个scrape job的配置,只保留带有自身集群标签的目标。以下是prometheus-server-1的配置示例,server-2只需要把标签值替换成server-2就行:

prometheus:
  serverFiles:
    prometheus.yml:
      rule_files:
        - /etc/config/recording_rules.yml
        - /etc/hcp/config/alerting_rules.yml
      scrape_configs:
        # 抓取自身Prometheus实例(这个本来就是localhost,不用改)
        - job_name: prometheus
          static_configs:
            - targets:
                - localhost:9090 #exposing metrics

        # 抓取同集群的Pushgateway
        - job_name: prometheus-pushgateway
          kubernetes_sd_configs:
            - role: pod
          relabel_configs:
            # 只保留带有server-1标签的Pod
            - source_labels: [__meta_kubernetes_pod_label_prometheus_cluster]
              action: keep
              regex: server-1
            # 过滤出Pushgateway的Pod
            - source_labels: [__meta_kubernetes_pod_label_app]
              action: keep
              regex: pushgateway

        # 抓取同集群的NodeExporter
        - job_name: kubernetes-nodes
          kubernetes_sd_configs:
            - role: node
          relabel_configs:
            - source_labels: [__meta_kubernetes_node_label_prometheus_cluster]
              action: keep
              regex: server-1
            # 保留原有其他relabel配置(比如node exporter的端口映射等)

        # cadvisor任务添加标签过滤
        - job_name: kubernetes-nodes-cadvisor
          kubernetes_sd_configs:
            - role: node
          relabel_configs:
            - source_labels: [__meta_kubernetes_node_label_prometheus_cluster]
              action: keep
              regex: server-1
            # 保留原有cadvisor的relabel规则

        # 抓取同集群的kube-state-metrics
        - job_name: kube-state-metrics
          kubernetes_sd_configs:
            - role: pod
          relabel_configs:
            - source_labels: [__meta_kubernetes_pod_label_prometheus_cluster]
              action: keep
              regex: server-1
            - source_labels: [__meta_kubernetes_pod_label_app]
              action: keep
              regex: kube-state-metrics

        # Kubernetes服务端点过滤
        - job_name: kubernetes-service-endpoints
          kubernetes_sd_configs:
            - role: endpoints
          relabel_configs:
            - source_labels: [__meta_kubernetes_endpoint_pod_label_prometheus_cluster]
              action: keep
              regex: server-1
            # 保留原有服务端点的过滤规则

3. 验证效果

重新部署两台Prometheus后,端口转发访问各自的/targets页面:

  • prometheus任务还是1/1 up(只抓自己)
  • prometheus-pushgateway会变成1/1 up(只抓自己集群的)
  • 其他任务比如kubernetes-nodes的up数量会对应自身集群的节点数,不会再显示合并后的数量

核心逻辑

通过给每个集群的组件打专属标签,再用Prometheus的relabel_configs做过滤,只保留符合自身集群标签的目标,就能彻底隔离两台Prometheus的抓取范围,实现各自只监控自己的组件。

内容的提问来源于stack exchange,提问作者NIKITA RATH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:21:33