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

如何配置Prometheus仅抓取Kubernetes Pod的指定指标端口?

当然可以!你完全可以配置Prometheus只抓取Pod的3093和9113端口,避开不提供指标的80端口。下面给你几种实用的方案,根据你的场景选就行:

方案一:通过Pod注解指定多个目标端口

如果你的Prometheus配置支持解析多端口注解(比如主流的kube-prometheus-stack默认支持),直接在Pod的metadata里添加以下注解即可:

metadata:
  annotations:
    prometheus.io/scrape: "true"
    prometheus.io/ports: "3093,9113"  # 用逗号分隔需要抓取的端口

这个注解会告诉Prometheus只针对这两个端口创建抓取目标,自动忽略80端口。

方案二:为指标端口创建独立Service

如果你的Prometheus是通过Service发现来抓取指标的(默认配置通常如此),可以给3093和9113端口分别创建单独的Service,每个Service只暴露一个指标端口,并添加抓取注解:
比如针对3093端口的Service:

apiVersion: v1
kind: Service
metadata:
  name: my-app-metrics-3093
  annotations:
    prometheus.io/scrape: "true"
    prometheus.io/port: "3093"
spec:
  selector:
    app: my-app  # 匹配你的Pod标签
  ports:
  - name: metrics-3093
    port: 3093
    targetPort: 3093

同理再创建一个针对9113端口的Service。这样Prometheus会发现两个独立的抓取目标,完全不会涉及80端口。这种方式结构清晰,也方便后续单独调整某个端口的抓取配置。

方案三:修改Prometheus抓取配置的Relabel规则

如果需要全局统一控制,或者你的Prometheus不支持多端口注解,可以直接修改Pod抓取job的relabel规则,过滤掉80端口:

job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
  # 保留开启了抓取注解的Pod
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true
  # 只保留3093和9113端口的目标
  - source_labels: [__meta_kubernetes_pod_container_port_number]
    action: keep
    regex: ^(3093|9113)$
  # 其他默认的relabel规则(比如路径、scheme等)继续保留
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
    action: replace
    target_label: __metrics_path__
    regex: (.+)
  # ... 其他规则

这个规则会在服务发现阶段就过滤掉80端口的目标,只保留你需要的两个端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:17:14