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

kube-prometheus-stack服务发现正常但无法抓取应用指标问题排查

问题根因

核心故障点是业务Service的标签不满足ServiceMonitor的匹配规则,导致Prometheus Operator无法通过ServiceMonitor关联到目标Service,因此不会生成对应的抓取任务配置。

配置不匹配的细节:

  • 你定义的ServiceMonitor通过标签选择器选中目标Service,要求目标Service必须同时携带两个标签:
    spec:
      selector:
        matchLabels:
          app: code-detector
          release: prometheus-stack
    
  • 但实际创建的Service仅配置了release: prometheus-stack标签,缺失了app: code-detector标签:
    metadata:
      labels:
        release: prometheus-stack
    

ServiceMonitor的标签选择器为严格全量匹配逻辑,只要有一个标签不满足就无法选中目标Service。这种情况下哪怕K8s服务发现层面能识别到Service、Pod资源,Prometheus也不会生成对应的抓取任务,自然不会在Targets面板展示。

另外你在Service上添加的prometheus.io/scrape: "true"注解是供Prometheus原生Kubernetes服务发现规则使用的,kube-prometheus-stack默认通过ServiceMonitor/PodMonitor自定义资源生成抓取规则,该注解不会被ServiceMonitor逻辑识别,不能作为配置正确的判断依据。

修复方案

修改Service的元数据配置,补上缺失的app: code-detector标签,修改后的Service完整配置如下:

apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: "true"
  labels:
    app: code-detector
    release: prometheus-stack
  name: code-detector-service
  namespace: code-detector-demo
spec:
  selector:
    app: code-detector
    release: prometheus-stack
  ports:
    - name: code-detector-port
      port: 8000
      targetPort: 8000

应用更新后的配置,等待10-30秒后刷新Prometheus Targets面板即可看到对应的抓取任务。

校验方式

如果更新配置后仍未看到抓取任务,可通过以下命令排查:

  1. 检查ServiceMonitor的关联状态
    kubectl -n monitoring describe servicemonitor code-detector-servicemonitor
    
    查看输出中的Endpoints字段,如果能列出对应Service后端的Pod IP+端口,说明ServiceMonitor已成功关联目标Service;如果字段为空,说明标签匹配仍有问题。
  2. 检查Prometheus生效配置
    打开Prometheus UI的Configuration页面,搜索code-detector关键词,如果存在对应的job_name配置,说明Operator已正确生成抓取规则,等待目标抓取周期结束后即可在Targets页面看到条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:54:17