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

VictoriaMetrics查询求助:获取Top100节点温值及5m窗口导数

问题:获取温度最高的前100组(node_id, system_id)及其5分钟窗口内的每秒导数

temperature是gauge类型指标,每个node_id+system_id的标签组合对应唯一温度值(比如{"1","1"}对应10、{"2","1"}对应23等)。需求是:

  • 筛选出温度最高的前100组标签组合
  • 同时获取这些组合在5分钟回溯窗口内的每秒温度导数

尝试过的查询语句

第一次尝试

topk(100, temperature)[5m] , on(node_id, system_id) group_left() deriv(temperature[5m])

第二次尝试

with (
  top_nodes = topk(100, temperature[5m]) by (node_id)
)
(
  label_set(label_del(top_nodes,"__name__"),"metric","top-100")
)
  or
(
  label_set(deriv(temperature[5m]),"metric", "deriv") and on(node_id) top_nodes
)

可行查询方案

方案1:直接关联topk结果与导数

topk(100, temperature)
  | on(node_id, system_id) group_left()
  deriv(temperature[5m])

这个查询先获取当前时刻温度最高的100组标签组合,再通过on(node_id, system_id) group_left()关联这些组合对应的5分钟窗口内每秒导数。

方案2:带标签区分的写法(方便可视化)

如果需要在结果中明确区分原始温度和导数指标,可以用with子句加标签标记:

with (
  top_temp = topk(100, temperature)
)
label_set(top_temp, "metric", "temperature")
  or
label_set(deriv(temperature[5m]) * on(node_id, system_id) group_left() top_temp, "metric", "rate_of_change")

特殊场景调整:基于5分钟窗口内的最高温度筛选

如果需求是筛选5分钟窗口内曾达到最高温度的前100组,而非当前时刻的温度,可将topk的输入替换为窗口内的最大值:

topk(100, max_over_time(temperature[5m]))
  | on(node_id, system_id) group_left()
  deriv(temperature[5m])

注意事项

  • deriv仅支持gauge类型指标,且要求5分钟窗口内至少有2个样本点才能计算有效导数
  • 确保node_id和system_id是所有目标时间序列都包含的标签,避免关联失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:16:01