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

现有Express微服务添加ServiceMonitor后未被Prometheus注册问题求助

Prometheus 无法发现自定义服务排查方案

问题根因

kube-prometheus-stack 默认会限制可识别的 ServiceMonitor 范围,绝大多数情况下是你的 ServiceMonitor 没有匹配到 Prometheus 配置的标签/命名空间选择规则。

排查步骤

  • 第一步:确认 Prometheus 的 ServiceMonitor 匹配规则
    执行以下命令获取当前 Prometheus CRD 配置:
kubectl get prometheus -o yaml

重点查看两个配置字段:

  1. serviceMonitorNamespaceSelector:该配置限制了 Prometheus 只会拉取对应命名空间下的 ServiceMonitor,如果你配置了例如matchLabels: {kubernetes.io/metadata.name: monitoring},说明默认只识别 monitoring 命名空间的 ServiceMonitor,你可以选择将自己的 ServiceMonitor 部署到 monitoring 命名空间,或者修改该规则添加 default 命名空间的匹配。
  2. serviceMonitorSelector:该配置限制了 Prometheus 只会拉取带指定标签的 ServiceMonitor,kube-prometheus-stack 默认会配置matchLabels: {release: prometheus},你当前的 ServiceMonitor 没有携带对应标签,需要补充配置:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: prometheus-kube-prometheus-pinger-service
  # 新增和serviceMonitorSelector匹配的标签
  labels:
    release: prometheus
spec:
  selector:
    matchLabels:
      app: pinger-svc
  endpoints:
    - port: web
      path: /metrics
      interval: "10s"
  • 第二步:验证服务指标端点正常
    执行以下命令确认你的服务可以正常返回指标:
# 通过NodePort访问测试
curl http://<你的集群节点IP>:32333/metrics
# 或者通过Service ClusterIP访问测试
curl http://$(kubectl get svc pinger-svc -o jsonpath='{.spec.clusterIP}')/metrics

如果返回404或连接超时,检查你的应用是否真的将 metrics 端点暴露在根路径下,以及容器3000端口是否正常监听。

  • 第三步:验证 ServiceMonitor 匹配正确
    执行以下命令查看 ServiceMonitor 的匹配状态:
kubectl describe servicemonitor prometheus-kube-prometheus-pinger-service

查看输出的关联资源部分,确认是否成功匹配到pinger-svc这个服务,如果没有匹配,检查 Service 的标签是否为app: pinger-svc、端口名是否为web。

  • 第四步:确认 Prometheus 配置更新
    上述配置修改完成后等待1-2分钟,进入 Prometheus UI 的 Config 页面搜索pinger,确认对应抓取 job 已经被写入配置,之后 targets 列表就会出现你的服务节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:15:04