Prometheus 查询 Kubernetes pod 正常运行时间

Posted

技术标签:

【中文标题】Prometheus 查询 Kubernetes pod 正常运行时间【英文标题】:Prometheus query for Kubernetes pod uptime 【发布时间】:2021-12-23 20:54:02 【问题描述】:

我有一个安装了 kube-prometheus-stack 的 Kubernetes 集群(Prometheus 2.27.1,kube-state-metrics v2.0.0)

我想查询每个 pod 在过去 24 小时内运行了多少时间

如果 Pod 仍在运行,从创建到现在的时间 如果帖子已终止,则从创建到完成的时间

重要的是,我需要 pod 存在的确切时间,而不是 CPU 使用率。

我可以这样做:

kube_pod_completion_time - kube_pod_created

但对于仍在运行的 pod,它不会返回任何内容。而且,由于 Prometheus 不会返回超过 5 分钟的指标,因此它不会报告任何已终止和删除的 pod。

如果没有这些问题,我如何查询 Prometheus?

【问题讨论】:

用的是哪个prometheus版本?它是如何部署的? (只是为了清楚地了解确切的设置和可用指标) 你好@VladimirPrus。有更新吗? 我已经添加了设置细节,谢谢。 @VladimirPrus 感谢您的回复。还有两个问题:使用哪个 kubernetes 版本/它是如何设置的(云或本地)?如果您只查询kube_pod_completion_time,您会看到响应/结果吗?我安装了一个新的 prometheus 并没有返回任何东西给我。 我通过 AWS EKS 使用 Kubernetes 1.19。是的,kube_pod_completion_time 返回结果。无论如何,一位同事已经提供了一个解决方案,所以我会用它来更新问题。 【参考方案1】:

一个可行的解决方案是这样的:

sum by(namespace, pod) (

   (last_over_time(kube_pod_completion_time[1d]) 
   - last_over_time(kube_pod_created[1d])) 

  or 

    (time() - kube_pod_created)

)

sum 中的第一部分处理 pod 已终止的情况。我们选择kube_pod_completion_timekube_pod_stared 的最后一个值并计算差值。

第二部分处理仍在运行的 pod。在这种情况下,kube_pod_created 指标有一个新值,我们可以从当前时间中减去它。

【讨论】:

以上是关于Prometheus 查询 Kubernetes pod 正常运行时间的主要内容,如果未能解决你的问题,请参考以下文章

通过Prometheus查询计算Kubernetes集群中Pod 的CPU、内存使用率等指标

多值 Prometheus 查询 Grafana

如何在 Prometheus 中一次调用执行多个查询

Prometheus在kubernetes集群的搭建教程

Kubernetes第七篇:使用kubernetes部署prometheus+grafana监控系统(Kubernetes工作实践类)

Kubernetes第七篇:使用kubernetes部署prometheus+grafana监控系统(Kubernetes工作实践类)