You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询Prometheus最后更新的时间序列及筛选最新有效Gauge值

问题解答

1. 如何查询Prometheus中最后更新的时间序列?

要定位某指标下最后更新的时间序列,可通过timestamp()函数获取每个序列的最新采样时间戳,结合topk筛选出时间戳最大的条目,再关联原指标得到对应数值:

# 替换your_metric为实际指标名,比如node_cpu_seconds_total
your_metric and on(instance, job) topk(1, timestamp(your_metric))

若仅需查看最后更新的时间戳,直接执行:

topk(1, timestamp(your_metric))

2. 筛选选举实例导出的有效Gauge值

针对100个实例选举导出数据库表行数的场景,推荐以下几个可靠方案,规避你提到的哨兵值、指标删除等方案的缺陷:

方案一:新增活跃状态标记指标

每个实例额外导出一个Gauge(如db_monitor_active),当选为执行实例时设为1,未当选时设为0。查询时通过该标记过滤有效数据:

db_table_rows * on(instance, job) group_left() db_monitor_active == 1

只要选举机制保证同一时间仅一个实例的db_monitor_active为1,就能稳定获取有效数据,无需处理指标删除或哨兵值,可靠性高。

方案二:纯PromQL基于时间戳筛选

无需修改实例指标导出逻辑,通过PromQL识别最新时间戳对应的实例:

db_table_rows and on(instance, job) (
  max by (instance, job) (timestamp(db_table_rows)) 
  == on() group_left(instance, job) max(timestamp(db_table_rows))
)

原理:先获取每个实例的最新采样时间戳,找出全局最大时间戳对应的实例,再匹配原指标的数值。这里max by (instance, job)会保留实例标签,解决了你之前提到的聚合抹除标签无法关联的问题。

方案三:通过标签区分有效指标

当选实例导出db_table_rows时添加标签active="true",未当选实例设为active="false"或不添加该标签。查询时直接过滤:

db_table_rows{active="true"}

该方案查询语句极简,性能最优,仅需在选举逻辑中控制指标标签即可。


内容的提问来源于stack exchange,提问作者Vasiliy Faronov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:40:10