如何关联两个Prometheus指标以获取自定义Pod标签的CPU使用率?
解决PromQL关联Pod CPU使用率与标签的问题
正确的关联查询
调整查询逻辑,通过聚合操作保留CPU使用率并移除pod标签,最终得到label_name, cpu_usage格式的结果:
sum by (label_name) ( (sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod)) * on(pod) group_left(label_name) kube_pod_labels{label_role=~'role1|role2',label_app='identifier1'} )
如果需要按label_name计算平均CPU使用率,将外层的sum替换为avg即可:
avg by (label_name) ( (sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod)) * on(pod) group_left(label_name) kube_pod_labels{label_role=~'role1|role2',label_app='identifier1'} )
调整说明
- 保留CPU使用率:
kube_pod_labels的指标值默认是1,与CPU使用率查询结果相乘后,最终指标值就是对应Pod的CPU使用率。之前的查询结果其实已经包含了该值,只是因保留pod标签导致展示混乱。 - 关联与标签保留:
on(pod) group_left(label_name)指定按pod标签关联两个查询,并将右侧kube_pod_labels中的label_name标签保留到结果中。 - 移除Pod标签并聚合:外层的
sum by (label_name)(或avg by (label_name))会将同一label_name下的所有Pod CPU使用率做聚合,同时自动剔除pod标签,得到符合需求的简洁结果。
结果验证
最终返回的指标仅包含label_name标签,指标值为对应标签分组下的Pod CPU使用率总和(或平均值),完全适配记录规则创建与Grafana可视化场景。
内容的提问来源于stack exchange,提问作者Lou Falkes
相关产品推荐
相关产品推荐

