prometheus-adapter请求Prometheus成功但返回items为空问题排查
问题原因
你在prometheus-adapter的规则中配置了resources.overrides,将Prometheus指标的job标签映射为K8s的namespace资源。prometheus-adapter处理指标时会强制校验:*标签值必须和集群中实际存在的对应K8s资源名完全匹配:
- 你从Prometheus拿到的
go_routines_total指标job标签值为rt-scrape,该值不是K8s集群中实际存在的Namespace名称,因此适配器直接过滤掉了这条指标,导致最终返回的items列表为空。
修复方案
方案1:调整标签映射规则(推荐)
优先调整Prometheus采集规则,给go_routines_total指标注入K8s原生标签(如namespace、service等),再修改prometheus-adapter的values.yaml配置:
rules: default: false custom: - seriesQuery: '{__name__=~"go_routines_total"}' resources: overrides: # 替换为指标中实际存在的、值为真实K8s Namespace名称的标签名 namespace: {resource: "namespace"} # 替换为指标中实际存在的、值为真实K8s Service名称的标签名 service: {resource: "service"} name: matches: ^(.*) as: "go_routines_total" metricsQuery: go_routines_total{job=~"rt-scrape"}
方案2:临时验证(不推荐生产使用)
如果仅用于临时验证,可直接在K8s集群中创建名为rt-scrape的Namespace,重启prometheus-adapter后即可看到指标返回。
验证步骤
修改配置并重启prometheus-adapter后,执行以下命令验证:kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/*/metrics/go_routines_total" | jq .
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

