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

自定义Prometheus ServiceMonitor配置后未注册Targets问题求助

问题根因

1. ServiceMonitor选择器匹配对象错误

ServiceMonitor的spec.selector是用于匹配Service资源的metadata标签,而非Pod的标签。你当前的Service api-bootstrap-grape-service 未配置app: api-bootstrap-grape-app标签,导致ServiceMonitor无法匹配到对应的Service,自然不会生成监控Targets。

2. 跨Namespace监控权限配置缺失(可选,仅跨Namespace场景需要)

如果Prometheus和监控目标不在同一Namespace,需要确认Prometheus实例有跨Namespace访问Service、Pod、Endpoints等资源的RBAC权限,同时Prometheus CRD配置允许抓取其他Namespace的ServiceMonitor。

修复步骤

步骤1:给Service添加匹配标签

修改你的Service配置,新增metadata标签供ServiceMonitor匹配:

apiVersion: v1
kind: Service
metadata:
  name: api-bootstrap-grape-service
  namespace: api-bootstrap-grape
  # 新增以下标签
  labels:
    app: api-bootstrap-grape-app
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
spec:
  selector:
    app: api-bootstrap-grape-app
  ports:
    - name: api-bootstrap-grape-http
      port: 3000
      targetPort: 3000
  type: LoadBalancer

步骤2:配置Prometheus跨Namespace监控权限(仅跨Namespace场景需要)

如果你使用Helm安装Prometheus Operator,修改Helm values.yaml配置:

  • 将prometheus.prometheusSpec.serviceMonitorNamespaceSelector设置为{},表示允许抓取所有Namespace的ServiceMonitor
  • 确认prometheus.prometheusSpec.serviceMonitorSelector配置匹配你ServiceMonitor的标签,示例:
    serviceMonitorSelector:
      matchLabels:
        release: prometheus
    
  • 确认Prometheus对应的ClusterRole已配置以下权限:
    - apiGroups: [""]
      resources:
      - nodes
      - services
      - endpoints
      - pods
      verbs: ["get", "list", "watch"]
    

步骤3:验证配置生效

配置更新后等待2分钟左右,在Prometheus UI的Status > Service Discovery页面搜索你的ServiceMonitor名称,即可看到对应的监控Targets。如果仍有异常,可以在Status > Configuration页面确认抓取规则是否已经同步到Prometheus配置中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:48:01