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

基于Kubelet与Prometheus,如何查询Pod是否处于CrashloopBackOff状态?

检测AKS集群中Pod CrashLoopBackOff状态的Prometheus查询

基于Kubelet原生指标的精准查询(优先尝试)

如果你的Kubelet暴露了kubelet_container_status_waiting指标,直接用以下查询可以精准匹配处于CrashLoopBackOff状态的容器:

sum by (namespace, pod, container) (
  kubelet_container_status_waiting{reason="CrashLoopBackOff"} == 1
)

这个查询会返回所有处于CrashLoopBackOff等待状态的容器,按命名空间、Pod、容器维度聚合,不会产生误报。


基于Cadvisor指标的替代方案(当Kubelet状态指标不可用时)

如果上述指标不可用,结合Cadvisor的重启次数和启动时间指标,可以间接检测CrashLoopBackOff:

sum by (namespace, pod, container) (
  rate(container_restarts_total{image!=""}[3m]) >= 2
  and
  (time() - container_start_time_seconds{image!=""}) < 60
)

参数说明:

  • rate(container_restarts_total[3m]) >=2:设置3分钟内容器重启≥2次的阈值,可根据业务场景调整(比如改为>=1提升灵敏度,或>=3降低误报)
  • time() - container_start_time_seconds <60:过滤出最近60秒内刚重启的容器,避免把正常发布、配置更新导致的单次重启误判为CrashLoopBackOff
  • sum by (namespace, pod, container):按维度聚合结果,方便定位具体故障对象

告警规则示例

将上述查询整合到Prometheus告警规则中:

groups:
- name: aks-pod-crashloop-alerts
  rules:
  - alert: PodCrashLoopBackOff
    expr: |
      sum by (namespace, pod, container) (
        rate(container_restarts_total{image!=""}[3m]) >= 2
        and
        (time() - container_start_time_seconds{image!=""}) < 60
      )
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "Pod {{ $labels.pod }} ({{ $labels.namespace }}) 触发CrashLoopBackOff告警"
      description: "容器 {{ $labels.container }} 在3分钟内已重启 {{ $value }} 次,且最近一次重启在60秒内,疑似进入崩溃循环状态。"
  • for:2m:要求告警条件持续满足2分钟再触发,过滤瞬时波动导致的误报

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:25:33