Prometheus查询无法通过worker节点标签过滤无数据问题排查求助
1. 确认聚合指标是否包含目标标签
先执行以下PromQL,验证namespace_cpu:kube_pod_container_resource_requests:sum指标是否真的带有kubernetes_node_role标签:
count by (namespace, kubernetes_node_role) (namespace_cpu:kube_pod_container_resource_requests:sum)
如果返回结果里没有kubernetes_node_role字段,说明这个聚合指标本身就没携带节点角色标签,自然无法通过该标签过滤数据。
2. 检查记录规则的定义
namespace_cpu:kube_pod_container_resource_requests:sum属于Prometheus记录规则生成的聚合指标,需查看规则详情:
- 确认规则在聚合时是否保留了
kubernetes_node_role标签,比如是否用sum by (namespace, kubernetes_node_role)而非仅sum by (namespace)进行聚合 - 溯源原始指标
kube_pod_container_resource_requests,检查它本身是否带有节点角色标签——如果原始指标没有,聚合后的指标也不会继承该标签
3. 验证节点角色标签的实际存在性
通过kubectl直接检查集群节点的标签配置:
kubectl get nodes --show-labels
确认worker节点是否带有预期的角色标签,常见键名包括node-role.kubernetes.io/worker、kubernetes.io/role=worker等,不同集群的标签键可能存在差异。同时检查Prometheus的采集组件(如kube-state-metrics)是否正确抓取并传递了该标签。
4. 调整查询逻辑(若聚合指标无目标标签)
如果namespace_cpu:kube_pod_container_resource_requests:sum确实无法携带节点角色标签,可直接基于原始指标重新构造查询:
sum by (namespace) (kube_pod_container_resource_requests{node=~".*worker.*"})
或者通过节点元数据指标关联过滤:
sum by (namespace) (kube_pod_container_resource_requests * on (node) group_left(kubernetes_node_role) node_meta{kubernetes_node_role=~"worker"})
(注:node_meta需为携带节点角色标签的指标,通常来自node-exporter或kube-state-metrics)
5. 排查采集配置的标签处理规则
查看Prometheus的scrape配置,确认是否存在relabel规则意外丢弃了kubernetes_node_role标签。比如检查scrape_configs下的relabel_configs,是否有action: labeldrop或类似规则删除了该标签。
内容的提问来源于stack exchange,提问作者Adrián Blázquez

