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

PromQL查询异常:仅当B超阈值时累加A指标值却返回0

问题分析与解决方法

原查询的错误点

  1. 运算符逻辑误用:你用的and是PromQL的逻辑与运算符,它要求左右两边的时间序列在同一时刻同时满足条件才会返回结果。sum_over_time(homeassistant_sensor_power_w{entity="sensor.sonoff_1001691285_power"}[24h])是计算A指标过去24小时的总求和(一个瞬时值),而homeassistant_sensor_power_w{entity="sensor.sunsynk_grid_power"} > 20是判断当前时刻B指标是否超过20,两者结合后只会在当前B满足条件时返回A的总求和,否则返回0——这完全不符合你“仅当B超过20的时间段内对A求和”的需求。
  2. 实体标识错误:你提供的A指标实体是sensor.sonoff_power,但查询里写的是sensor.sonoff_1001691285_power,这会导致查询不到正确的A指标数据,也是返回0的可能原因之一。

正确的PromQL查询

要实现“24小时内,仅当B超过20时对A的数值求和”,需要先过滤出A中对应时刻B满足条件的样本,再对这些样本求和:

sum_over_time(
  homeassistant_sensor_power_w{entity="sensor.sonoff_power"}
  * on(instance, job) group_left()
  (homeassistant_sensor_power_w{entity="sensor.sunsynk_grid_power"} > bool 20)
[24h]
)

逻辑说明

  • homeassistant_sensor_power_w{entity="sensor.sunsynk_grid_power"} > bool 20:将B指标转换为布尔时间序列——当B>20时,序列值为1;否则为0(bool关键字显式返回布尔值)。
  • * on(instance, job) group_left():将A指标和上述布尔序列按instance和job标签关联相乘,这样A中只有对应时刻B>20的样本会保留原数值,其余时刻的数值被置为0。
  • sum_over_time(...[24h]):对相乘后的序列做24小时的时间范围求和,最终结果就是A在B超过20的时间段内的总数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:58:09