如何在Prometheus/PromQL中获取多时间序列的最新值
解决方案
要从多个instance的序列中取出所有样本里时间戳最新的那个值,需要分两步处理:
先获取每个
instance序列在时间窗口内的最后一个样本(保留原始时间戳),用last_over_time实现:last_over_time(my_metric{type="user"}[5m])这一步会返回每个
instance的最新值,但仍会保留多个时间序列。对这些序列按时间戳降序排序,然后取第一个元素(即时间戳最新的那个值),用
sort_desc结合切片语法实现:sort_desc(last_over_time(my_metric{type="user"}[5m]))[0:1]
原理说明
last_over_time仅对单个时间序列生效,返回该序列窗口内最后一个样本,因此会保留所有instance对应的序列。sort_desc会将所有序列按样本的原始时间戳从新到旧排序(注意:排序依据是样本自身的时间戳,而非当前查询时间)。[0:1]是PromQL的切片语法,取排序后的第一个元素,也就是所有样本里时间戳最新的那个值。
内容的提问来源于stack exchange,提问作者brenobarreto
相关产品推荐
相关产品推荐

