使用SQL在Grafana中基于流量计算累计产品量(Singlestat面板)
嘿,这个需求我熟!用Grafana的Singlestat面板计算时间段内的产品总量其实不难,核心是把流量(单位lbs/hour)和时间间隔结合起来累加,我给你一步步拆解:
用Grafana Singlestat计算时间段产品总量
核心逻辑
流量是每小时的磅数,所以每个数据点的实际产量是当前流量 × 该数据点到下一个数据点的时间间隔(转成小时),把所有这些小段的产量加起来,就是整个时间段的总量。如果你的数据采集间隔是固定的(比如示例里的10秒一次),还能简化计算,不过先讲通用的稳妥方法。
具体操作步骤
1. 编写数据源查询语句
这里分两种常见数据源举例:
如果你用InfluxDB
直接用这个查询,它会自动计算时间间隔并累加:
SELECT SUM("val" * (time - lag(time))/3600000000000) FROM "你的数据表名" WHERE $timeFilter
给你解释下每个部分:
lag(time):获取上一个数据点的时间戳time - lag(time):得到两个数据点的时间差(单位是纳秒)- 除以
3600000000000:把纳秒转换成小时(1小时=3600秒=3.6e12纳秒) - 乘以
val:算出这段时间的产量 SUM():把所有时间段的产量加起来得到总量
如果你的数据有缺失,可以加fill(previous)来补全,避免误差:
SELECT SUM("val" * (time - lag(time))/3600000000000) FROM (SELECT "val" FROM "你的数据表名" WHERE $timeFilter fill(previous))
如果你用Prometheus
用这个PromQL查询:
sum_over_time( (your_metric_name) * on() group_left() (time() - last_over_time(time()[$__interval])) )[$__range:]
要是你的采集间隔固定(比如10秒),可以更简单:
sum(your_metric_name) * 10/3600
直接用总流量乘以时间间隔(转成小时)就行。
2. 配置Singlestat面板
- 新建面板,选择
Singlestat类型 - 到
Metrics标签页,把上面的查询语句填进去 - 切换到
Options标签页:- 在
Value区域,Stat选Current就行(因为我们已经用SUM算出了总量,直接取结果) - 可以在
Suffix里填lbs,让结果显示更直观 - 按需调整字体大小、颜色这些样式,符合你的看板风格
- 在
3. 验证结果
可以手动算几个点测试,比如示例里前两个数据点:
第一个点产量:38.13187 × 10/3600 ≈ 0.1059 lbs
第二个点产量:38.14498 ×10/3600≈0.10596 lbs
把这些加起来,和Grafana显示的结果对比,确保计算正确。
内容的提问来源于stack exchange,提问作者agustaf
相关产品推荐
相关产品推荐

