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

如何通过Prometheus获取Kubernetes Pod的运行时长?

Kubernetes Pod运行时长追踪的PromQL修正方案

问题根源

你现在的查询跑不通,主要是两个问题:

  • or 运算符在PromQL里是逻辑或,不是“兜底”逻辑——只要第一个表达式有数据,第二个就不会生效,导致运行中的Pod时长算不出来;
  • sum by 完全没必要,单个Pod的启动、结束时间都是单条指标,求和不会有任何变化,反而可能打乱逻辑。

修正后的查询语句

单个Pod的时长查询

max by (namespace, pod) (
  (last_over_time(kube_pod_completion_time{pod="<pod_name>", namespace="<namespace>"}[1d]) - last_over_time(kube_pod_created{pod="<pod_name>", namespace="<namespace>"}[1d]))
  or ignoring()
  (time() - kube_pod_created{pod="<pod_name>", namespace="<namespace>"})
) / 60

批量查询(指定Namespace或全集群)

如果不用指定单个Pod,删掉pod="<pod_name>"就行:

max by (namespace, pod) (
  (last_over_time(kube_pod_completion_time{namespace="<namespace>"}[1d]) - last_over_time(kube_pod_created{namespace="<namespace>"}[1d]))
  or ignoring()
  (time() - kube_pod_created{namespace="<namespace>"})
) / 60

关键调整点

  • 把or改成or ignoring():忽略指标标签的细微差异,确保Pod终止时用「结束时间-启动时间」,运行中用「当前时间-启动时间」,真正实现兜底逻辑;
  • 加max by:保证每个Pod只返回一条结果,避免重复采集导致的多条数据干扰;
  • 最后除以60:把秒数转成分钟,正好得到你要的duration=60这种结果。

注意事项

得确保你的Prometheus已经采集了kube-state-metrics的指标——kube_pod_created和kube_pod_completion_time都是这个组件提供的,没装的话先部署它。

内容的提问来源于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 23:32:47