在 Grafana 中显示普罗米修斯最后抓取的 Kubernetes Pod 中的指标

Show metrics in Grafana from the Kubernetes Pod that was scraped last by Prometheus

上下文

我们有一个 Spring 启动应用程序,部署到 K8s 集群(有 2 个实例)中,配置了用于 Prometheus 的 Micrometer 导出器和 Grafana 中的可视化。

我的自定义指标

我已经实施了几个额外的 Micrometer 指标,它们报告了一些关于数据库 (PostgreSQL) 中业务数据的信息,我可以在 Grafana 中看到这些指标,但是对于每个 pod 都是单独的。

问题:

对于我们在 Grafana 中的 2 pods - 我可以看到一组单独的相同指标,并且可以通过选择(按标签)pods 之一找到最新值。

但是无法判断哪个 pod 报告了最新值。

有没有办法始终显示最后抓取的 pod 的指标值(即它将包含最新的指标数据)?

现在为了查看最新的指标数据 - 我必须切换 pods 并猜测哪个具有最新值。

(所讨论的指标与数据库相关,因此无论从哪个 pod 请求它们都会产生相同的值。)

在Prometheus中,您可以使用topk()timestamp()函数获取最新抓取的标签:

topk(1,timestamp(up{job="micrometer"}))

然后可以在 Grafana 中使用它来填充包含实例名称的(隐藏)变量:

Name: instance
Type: Query
Query: topk(1,timestamp(up{job="micrometer"}))
Regex: /.*instance="([^"]*)".*/

我建议在 time range change 激活刷新以获取您时间范围内的最后一次抓取。

然后您可以在所有信息中心的查询中使用该变量:

micrometer_metric{instance="${instance}"}

编辑:请求者希望在每次数据刷新时更新它

如果您想在每次数据刷新时更新它,则需要在使用 AND logical operator:

的仪表板的每个查询中使用它
micrometer_other_metric AND ON(instance) topk(1,timestamp(up{job="micrometer"}))

vector1 AND vector2 results in a vector consisting of the elements of vector1 for which there are elements in vector2 with exactly matching label sets. Other elements are dropped.