You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Prometheus查询近5分钟ns1、ns2中Error/Completed状态的Pod?

你的Prometheus查询存在以下几个核心问题:
  • 命名空间匹配逻辑不准确
    原查询的namespace=~".*ns1|.*ns2"会匹配所有包含ns1或ns2的命名空间(比如testns1、ns2-dev这类非目标命名空间),但你实际需要的是精确匹配ns1和ns2。正确写法应为:

    namespace=~"ns1|ns2"
    

    或者更直观的精确匹配语法:

    namespace in ("ns1", "ns2")
    
  • Pod状态匹配逻辑完全错误
    Kubernetes中Pod的phase状态取值为Pending、Running、Succeeded、Failed、Unknown:你提到的「Completed」对应Succeeded,「Error」对应Failed。而原查询用phase!~"Succeeded|Pending|Running|Unknown",相当于只保留Failed状态的Pod,完全漏掉了你需要的Succeeded(Completed)状态,逻辑正好相反。正确的状态匹配应该直接指定目标状态:

    phase=~"Succeeded|Failed"
    
  • 范围向量未结合状态变化判断
    原查询直接加[5m]会返回近5分钟内这些Pod状态的所有历史数据点,但如果你想获取近5分钟内进入Error/Failed或Completed/Succeeded状态的Pod,需要结合状态变化判断。比如用changes()函数识别状态更新:

    changes(kube_pod_status_phase{namespace in ("ns1", "ns2"), phase=~"Succeeded|Failed"}[5m]) > 0
    
修正后的完整查询示例

如果要获取当前处于Error/Failed或Completed/Succeeded状态,且是近5分钟内进入该状态的Pod,可使用:

kube_pod_status_phase{namespace in ("ns1", "ns2"), phase=~"Succeeded|Failed"} 
  unless 
kube_pod_status_phase{namespace in ("ns1", "ns2"), phase=~"Succeeded|Failed"} offset 5m

或者更简洁的changes函数写法:

changes(kube_pod_status_phase{namespace in ("ns1", "ns2"), phase=~"Succeeded|Failed"}[5m]) > 0

内容的提问来源于stack exchange,提问作者Haris Farooqui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:15:38