如何通过Prometheus获取Pod从调度到运行的启动耗时
用PromQL计算Pod从调度到启动的耗时
要获取Pod从Scheduled状态到Running状态的启动耗时,你可以利用kube-state-metrics暴露的核心指标,通过PromQL计算时间差实现:
核心指标说明
kube_pod_scheduled_time:记录Pod被成功调度到节点的Unix时间戳(秒级)kube_pod_container_status_started_time:记录Pod内容器进入Running状态的Unix时间戳(秒级)
基础查询(秒级耗时)
一个Pod可能包含多个容器,通常取最早启动的容器时间作为Pod进入Running状态的标记,用以下查询:
min by (pod, namespace) (kube_pod_container_status_started_time{kube_pod_status_phase="Running"}) - kube_pod_scheduled_time{kube_pod_status_phase="Running"}
min by (pod, namespace):按Pod和命名空间聚合,取Pod内最早启动的容器时间- 时间戳差值直接为秒级耗时,结果大于0的数值即为有效耗时
转换为分钟级耗时
如果需要更直观的分钟数,可将结果除以60:
(min by (pod, namespace) (kube_pod_container_status_started_time{kube_pod_status_phase="Running"}) - kube_pod_scheduled_time{kube_pod_status_phase="Running"}) / 60
筛选最近启动的Pod
如果只想查看最近1小时内调度完成的Pod耗时,可添加时间范围过滤:
(min by (pod, namespace) (kube_pod_container_status_started_time{kube_pod_status_phase="Running"}) - kube_pod_scheduled_time{kube_pod_status_phase="Running"}) * on(pod, namespace) group_left() (kube_pod_scheduled_time{kube_pod_status_phase="Running"} > time() - 3600)
time() - 3600代表当前时间往前推1小时,可根据需求调整数值(比如7200代表2小时)
注意事项
- 确保集群已部署kube-state-metrics,并且Prometheus已配置抓取该组件的指标
- 若Pod未进入Running状态(比如Pending、Failed),对应的指标会缺失或不满足过滤条件,不会出现在结果中
内容的提问来源于stack exchange,提问作者Krishna Kumar
相关产品推荐
相关产品推荐

