如何让两台独立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
相关产品推荐
相关产品推荐

