如何在Grafana中展示K8s Pod运行时长及指定Deployment相关数据
Kubernetes Pod运行时长获取与结束时间指标说明
有没有直接获取Pod结束时间的指标?
原生kube-state-metrics里没有专门的Pod结束时间指标,但可以通过以下方式间接获取终止时间:
- 对于进入
Failed或Succeeded状态的Pod,kube_pod_status_phase指标的时间戳就是Pod进入终止状态的时刻; - 容器层面,
kube_pod_container_status_terminated_start_time指标的时间戳代表容器终止的时间,可作为Pod结束时间的参考(单容器Pod可直接用这个)。
如何获取指定Deployment下各Pod的运行时长?
分两种场景处理:
1. 运行中Pod的实时运行时长
用PromQL计算当前时间与Pod启动时间的差值,同时关联到所属Deployment:
sum by (pod) ( time() - kube_pod_start_time{namespace="default"} ) * on(pod) group_left(deployment) ( label_replace(kube_pod_metadata_labels{namespace="default", deployment!=""}, "deployment", "$1", "label_deployment", "(.*)") )
如果要指定Deployment,在查询里加deployment="consumer-deployment"即可。计算结果是秒数,在Grafana中可以直接设置面板单位为分钟/小时,自动转换显示。
2. 已终止Pod的运行时长
结合容器终止时间与Pod启动时间计算:
sum by (pod) ( kube_pod_container_status_terminated_start_time{} - kube_pod_start_time{} ) * on(pod) group_left(deployment) ( label_replace(kube_pod_metadata_labels{namespace="default", deployment!=""}, "deployment", "$1", "label_deployment", "(.*)") )
这个查询只会返回已终止Pod的运行时长,结果同样以秒为单位。
输出你要的格式(如pod1,duration:15)
如果用Prometheus API结合命令行工具处理,示例命令如下(替换你的Prometheus地址):
curl -G 'http://your-prometheus-ip:9090/api/v1/query' \ --data-urlencode 'query=sum by (pod) (time() - kube_pod_start_time{namespace="default", deployment="consumer-deployment"})' \ | jq -r '.data.result[] | "\(.metric.pod),duration:\(.value[1] | tonumber / 60 | floor)"'
该命令会把秒数转换为分钟并取整,输出你需要的格式。
内容的提问来源于stack exchange,提问作者trey
相关产品推荐
相关产品推荐

