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

Prometheus指标返回错误时间及Pod终止时间获取问题排查

Pod运行时长、创建时间查询异常及kube_pod_completion失效问题排查

一、Pod运行时长查询结果与实际不符

问题原因

你使用的sum by(namespace, pod)是错误的聚合方式。kube_pod_created每个时间序列对应一个Pod实例(包括已终止的旧实例),sum会将同一namespace+pod下的所有实例的运行时长(time()-创建时间)相加,导致结果被旧实例的时长拉高(比如旧Pod运行了5天,新Pod运行55分钟,求和后就显示5天+55分钟)。

修正后的查询

去掉sum by,直接获取每个Pod实例的运行时长:

time() - last_over_time(kube_pod_created{pod=~"consumer-deployment.*"}[1d])

如果需要按namespace和pod标签展示结果,改用by(namespace, pod)聚合(而非求和):

time() - last_over_time(kube_pod_created{pod=~"consumer-deployment.*"}[1d])
by(namespace, pod)

二、Pod创建时间部分结果错误

问题原因

同样是sum by的问题:min_over_time返回每个Pod实例1天内的最早创建时间,sum会将同一namespace+pod下的新旧实例创建时间戳相加,导致结果完全错误;而正确的结果仅对应那些没有重启过、只有单个实例的Pod。

修正后的查询

如果要获取当前运行Pod的最新创建时间,改用last_over_time并去掉sum by:

last_over_time(kube_pod_created{pod=~"consumer-deployment.*"}[1d])

如果要获取Pod实例的最早创建时间(包括已终止的旧实例),直接保留min_over_time去掉sum by:

min_over_time(kube_pod_created{pod=~"consumer-deployment.*"}[1d])

三、kube_pod_completion指标无法获取终止时间

问题原因

kube_pod_completion是仅针对Job类型Pod的指标,普通Deployment管理的Pod终止时不会生成该指标。

替代方案

对于普通Deployment的Pod,使用kube_pod_container_status_terminated_finished_at指标获取容器终止时间(对应Pod的终止时间):

last_over_time(kube_pod_container_status_terminated_finished_at{pod=~"consumer-deployment.*"}[1d])

同时需确保:

  • kube-state-metrics已启用Pod终止状态相关指标(默认是开启的);
  • Prometheus保留了足够的历史数据,能覆盖已终止Pod的指标生命周期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:45:06