Select Prometheus 查询中的最大标签值

Select largest label value in Prometheus query

我设置了一个 Prometheus 和 Grafana 实例,我想在其中查询一个名为“upsAdvBatteryRecommendedReplaceDate”的特定 属性。

Prometheus 在查询此 属性 时成功 returns 响应,如下所示:

但是,结果由两个时间序列组成(一个具有 upsAdvBatteryRecommendedReplaceDate="12/11/2021",另一个具有 upsAdvBatteryRecommendedReplaceDate="12/10/2021")。

一旦我在 Grafana 中设置了一个显示 upsAdvBatteryRecommendedReplaceDate 查询的 upsAdvBatteryRecommendedReplaceDate 标签的 singlestat,这就会成为一个问题。这将导致“多系列错误”,如下所示:

如果我改变 Grafana 时间范围,例如“最后 15 分钟”,如下所示:

所以我的问题是:有没有办法 select/extract 只有“upsAdvBatteryRecommendedReplaceDate”标签值最多 recent/latest 的时间序列,这样,在这种情况下,只有时间序列upsAdvBatteryRecommendedReplaceDate="12/11/2021" 出现了吗?

谢谢!

Prometheus 是一个处理数字的系统,“12/10/2021”是一个字符串而不是数字。如果您可以将数据公开为 unix 时间戳,那么您可以使用 max 聚合器来获取最高值。

也许这也会帮助其他人:我通过简单地选中 grafana 仪表板中单一统计的 "Instant" 复选框来解决它。

Prometheus 不提供按标签对时间序列进行排序以及 select 之后的第一个时间序列的功能。但这可以通过 limit_offset and sort_by_label MetricsQL 函数来完成。例如,以下查询将 return 单个 metricName 时间序列,标签 upsAdvBatteryRecommendedReplaceDate 的最大值:

limit_offset(1, 0, sort_by_label(metricName, "upsAdvBatteryRecommendedReplaceDate"))