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

如何用PromQL计算储罐液位下降速率并忽略填充上升阶段

解决储罐液位下降速率计算问题(忽略填充阶段)

核心思路

要精准计算液位下降速率并排除填充时的正向干扰,核心是先过滤掉液位上升的时间段,仅保留下降阶段的样本数据,再针对不同时间窗口计算速率。

具体PromQL实现

1. 过滤液位上升的样本

利用delta()函数识别液位上升的区间,再通过unless操作符排除这些区间的样本,只保留下降阶段的数据(假设你的液位指标名为tank_level_percent):

tank_level_percent unless delta(tank_level_percent[1m]) > 0
  • 说明:delta(tank_level_percent[1m]) > 0会标记出液位上升的时间段,unless会剔除这些时段的样本,仅保留液位下降或平稳的区间。

2. 计算不同时间窗口的下降速率

基于过滤后的数据集,使用deriv()函数计算线性回归斜率(即下降速率),针对不同时间窗口配置如下:

  • 3天窗口的下降速率:
deriv((tank_level_percent unless delta(tank_level_percent[1m]) > 0)[3d:1h])
  • 10天窗口的下降速率:
deriv((tank_level_percent unless delta(tank_level_percent[1m]) > 0)[10d:1h])
  • 30天窗口的下降速率:
deriv((tank_level_percent unless delta(tank_level_percent[1m]) > 0)[30d:1h])
  • 60天窗口的下降速率:
deriv((tank_level_percent unless delta(tank_level_percent[1m]) > 0)[60d:1h])
  • 说明:[3d:1h]表示取过去3天的数据,步长设为1小时(可根据你的指标采集频率调整步长);deriv()会计算这段时间内的线性下降速率,数值为负代表液位下降。

3. 可选:排除填充后的平稳期

如果填充后有一段液位稳定的时期,不想将这段的“0速率”纳入统计,可以再加一层过滤,只保留负向速率:

deriv((tank_level_percent unless delta(tank_level_percent[1m]) > 0)[3d:1h]) < 0

Grafana配置建议

  • 面板配置:选择Prometheus数据源,直接填入上述PromQL查询,可创建多个面板分别展示不同时间窗口的速率,或通过Grafana变量(比如设置window变量,可选值为3d、10d等)实现窗口切换。
  • 告警配置:基于计算出的速率设置阈值,比如当3天窗口的下降速率突然超过正常范围时触发告警,提前预警系统异常。

注意事项

  • delta()的时间窗口(如[1m])需与你的指标采集频率匹配,若填充是瞬间完成的,可缩小窗口至[30s],避免漏过填充事件。
  • 若液位下降是非线性的,可替换deriv()为rate()结合反向计算,但deriv()在大多数储罐排空场景下已足够准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:05:03