Prometheus未采集自定义K8s应用指标问题排查求助
排查Prometheus无法发现自定义应用指标的问题
核心配置不匹配问题
从你提供的配置看,存在两个直接导致Prometheus无法发现目标的匹配错误:
ServiceMonitor标签选择器与Service标签不匹配
ServiceMonitor的spec.selector.matchLabels指定了app: producer-app,但你的Service标签里并没有这个键值对,只有app.kubernetes.io/name: app、app.kubernetes.io/instance: producer这类标准标签。Prometheus依赖ServiceMonitor的selector定位目标Service,标签不匹配就无法建立关联。ServiceMonitor端点端口配置错误
ServiceMonitor的endpoints[0].port填的是端口号"5000",但Service定义的端口名称是http。Prometheus要求此处填写端口名称(而非端口号),因为端口号可能变动,而名称是固定的标识。
修复配置方案
修改后的ServiceMonitor配置
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: producer-app-monitor namespace: default spec: selector: matchLabels: app.kubernetes.io/name: app # 匹配Service的对应标签 app.kubernetes.io/instance: producer # 可选,进一步精准匹配 endpoints: - port: "http" # 使用Service定义的端口名称 path: /metrics interval: 15s
额外排查点(若修改后仍未解决)
- Prometheus的命名空间扫描权限:kube-prometheus-stack默认的Prometheus可能仅监控特定命名空间,检查Prometheus资源的
spec.serviceMonitorNamespaceSelector是否允许扫描default命名空间,或spec.serviceMonitorSelector是否匹配你的ServiceMonitor标签(若有额外标签)。 - Service端点可达性:在Prometheus所在Pod内执行
curl producer-app.default.svc.cluster.local:5000/metrics,确认能正常获取指标,排除网络或应用本身的问题。 - ServiceMonitor状态:执行
kubectl describe servicemonitor producer-app-monitor -n default,查看Events和Status字段,确认无报错信息。
内容的提问来源于stack exchange,提问作者sneedster
相关产品推荐
相关产品推荐

