如何通过多层group_left关联获取Prometheus告警中的Deployment名称
扩展Prometheus查询获取Deployment归属信息
你需要在现有查询基础上,再关联kube_replicaset_owner指标,把ReplicaSet对应的Deployment名称拉取出来。具体修改思路如下:
- 保留原有Pod与ReplicaSet的关联逻辑,先拿到每个异常Pod对应的ReplicaSet信息
- 通过
namespace和ReplicaSet名称匹配kube_replicaset_owner指标,提取对应的Deployment名称 - 将Deployment名称作为新标签加入最终结果,确保告警时能直接看到归属的Deployment
修改后的完整查询如下:
sum by(namespace, pod, owner_kind, deployment) ( max by(namespace, pod) ( kube_pod_status_phase{job="kube-state-metrics",namespace="itops",phase=~"Pending|Unknown|Failed"} ) * on(namespace, pod) group_left(owner_kind, replicaset) topk by(namespace, pod) (1, max by(namespace, pod, owner_kind, replicaset) ( // 将kube_pod_owner的owner_name映射为replicaset标签,方便后续关联 label_replace(kube_pod_owner{owner_kind='ReplicaSet'}, "replicaset", "$1", "owner_name", "(.*)") ) ) * on(namespace, replicaset) group_left(deployment) max by(namespace, replicaset, deployment) ( // 从kube_replicaset_owner中提取Deployment名称,映射为deployment标签 label_replace(kube_replicaset_owner{owner_kind="Deployment"}, "deployment", "$1", "owner_name", "(.*)") ) )
关键部分说明:
- label_replace处理kube_pod_owner:把
kube_pod_owner里的owner_name(即ReplicaSet名称)转成replicaset标签,和kube_replicaset_owner的replicaset标签对齐,方便关联 - 关联kube_replicaset_owner:通过
namespace和replicaset两个标签匹配,把对应的Deployment名称作为deployment标签引入结果 - sum by添加deployment:确保最终聚合结果里包含Deployment名称,告警触发时能直接看到Pod所属的Deployment
如果你的kube-state-metrics版本中,kube_replicaset_owner已经自带和ReplicaSet名称匹配的标签,可以省略第一步的label_replace,直接关联即可。
内容的提问来源于stack exchange,提问作者Cisco Osterman
相关产品推荐
相关产品推荐

