如何配置Prometheus仅抓取指定Kubernetes命名空间的指标
配置不生效的核心原因
- 服务发现角色配置错误。你当前
kubernetes-pods抓取job的kubernetes_sd_configs配置的role是node,该角色用于发现Kubernetes集群节点类资源,而节点属于集群级资源本身没有命名空间属性,不会携带__meta_kubernetes_namespace元标签,所以不管你用keep还是drop动作基于该标签做筛选,都不会生效。 - 重标记规则逻辑错误。
keep动作需要搭配regex参数使用,只有当source_labels提取到的值匹配regex规则时,才会保留该抓取目标;你配置的target_label参数仅用于标签重写/新增场景,对keep动作没有意义。
正确配置示例
如果你需要仅保留accounts命名空间下的Pod指标,丢弃其他命名空间的Pod指标,正确的job配置如下:
- job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod # 服务发现角色改为pod,才能拿到Pod对应的命名空间元标签 relabel_configs: - action: keep source_labels: [__meta_kubernetes_namespace] regex: accounts # 只有命名空间匹配accounts的抓取目标才会被保留
如果需要同时保留多个命名空间,比如要保留accounts和monitoring两个命名空间,regex按如下写法即可:
regex: (accounts|monitoring)
Helm部署的修改方式
如果你使用的是社区Prometheus Helm chart,不需要直接修改Prometheus的ConfigMap,直接在values.yaml中对应配置块修改即可:
- 针对默认的kubernetes-pods抓取job,可以在
prometheus.prometheusSpec.additionalScrapeConfigs中加入上述正确配置。 - 如果你希望所有抓取任务全局只抓取特定命名空间的指标,可以直接在
prometheus.prometheusSpec.namespaceSelector中配置要筛选的命名空间列表。
内容的提问来源于stack exchange,提问作者Von
相关产品推荐
相关产品推荐

