Prometheus 查询 Kubernetes Pod 正常运行时间

Vla*_*rus 2 monitoring kubernetes prometheus

我有一个安装了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
Run Code Online (Sandbox Code Playgroud)

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

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

Vla*_*rus 6

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

sum by(namespace, pod) (

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

  or 

    (time() - kube_pod_created)

)
Run Code Online (Sandbox Code Playgroud)

里面的第一部分sum处理 Pod 已终止的情况。kube_pod_completion_time我们选择和的最后一个值kube_pod_stared并计算差值。

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