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

kube-state-metrics通过ServiceMonitor向Prometheus上报指标失败

kube-state-metrics 指标采集失败排查

以下是配置中存在的明确问题及修复方案:

1. 命名空间选择器配置不匹配

Prometheus 自定义资源(CR)中配置的serviceMonitorNamespaceSelector规则为:仅匹配带有prometheus-scrape: "true"标签的命名空间下的ServiceMonitor资源。
当前你将ServiceMonitor部署在kube-system命名空间,默认该命名空间没有上述标签,直接导致Prometheus无法发现这个ServiceMonitor。
修复方式二选一:

  • 给kube-system命名空间打对应标签,执行命令:kubectl label ns kube-system prometheus-scrape=true
  • 若需要Prometheus识别所有命名空间下的ServiceMonitor,将serviceMonitorNamespaceSelector字段值设为{}即可,与现有serviceMonitorSelector: {}配置逻辑保持一致。

2. ServiceMonitor采集端点配置错误

当前endpoints配置存在3处和默认kube-state-metrics部署不匹配的问题:

  • 协议配置错误:默认部署的kube-state-metrics metrics端口使用HTTP协议,你配置的scheme: https及对应的tlsConfig规则会导致连接失败,除非你手动为kube-state-metrics开启了TLS,否则删除这部分配置即可。
  • 端口配置错误:port字段需要匹配对应Service中定义的端口名称,默认kube-state-metrics暴露metrics的端口名称为http-metrics,不是你填写的metrics;同时不需要额外指定targetPort,port字段匹配Service端口名后会自动关联后端targetPort。
  • 关联标签校验:ServiceMonitor的selector.matchLabels规则用于匹配同命名空间下的Service资源,你需要确认kube-state-metrics对应的Service本身带有prometheus-scrape: "true"标签,否则ServiceMonitor无法关联到对应的后端服务。
    修正后的endpoints配置参考(适配默认kube-state-metrics部署):
endpoints:
  - port: http-metrics
    path: /metrics
    honorLabels: true
    scheme: http

3. 生效校验步骤

修改配置后按以下顺序验证:

  • 执行kubectl get ns kube-system --show-labels,确认命名空间带有匹配的选择器标签
  • 执行kubectl get svc -n kube-system -l app.kubernetes.io/name=kube-state-metrics -o yaml,确认Service带有prometheus-scrape: "true"标签,且存在名为http-metrics、对应8080端口的配置
  • 打开Prometheus Web UI,进入Configuration页面搜索kube-state-metrics关键字,确认已生成对应的采集任务;再进入Targets页面查看对应采集目标的状态,若有报错会直接展示具体失败原因
  • 若上述配置都正确仍无法采集,检查Prometheus绑定的ServiceAccount是否拥有集群范围内(或kube-system命名空间内)Service、Endpoints、Pod资源的list、watch权限,RBAC权限不足会导致目标发现失败。

内容的提问来源于stack exchange,提问作者Dasari Sai Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:51:23