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_time
和kube_pod_stared
的最后一个值并计算差值。
第二部分处理仍在运行的 pod。在这种情况下,kube_pod_created
指标有一个新值,我们可以从当前时间中减去它。
【讨论】:
以上是关于Prometheus 查询 Kubernetes pod 正常运行时间的主要内容,如果未能解决你的问题,请参考以下文章
通过Prometheus查询计算Kubernetes集群中Pod 的CPU、内存使用率等指标
Kubernetes第七篇:使用kubernetes部署prometheus+grafana监控系统(Kubernetes工作实践类)
Kubernetes第七篇:使用kubernetes部署prometheus+grafana监控系统(Kubernetes工作实践类)