使用influxdb / grafana在正确的时间绘制导数

时间:2019-05-31 20:48:34

标签: grafana influxdb

我正在跟踪能源使用情况,其中包括一个热量表,用于测量焦耳的使用情况。我想计算加热功率(以瓦特为单位),该功率与DERIVATIVE()函数配合得很好。

问题在于,导数是在描述数据的两个时间戳中的后一个返回的,当与Grafana的阶梯图结合使用时,将显示下一个时间增量的导数而不是当前时间。

我如何:

  1. 让Influxdb在数据的第一个时间戳上显示导数吗? (或者:转移查询的时间戳?)
  2. 使Grafana图阶梯图的值向左扩展而不是向右扩展吗?

图形示例

Heat meter power calculated using Influxdb derivative() and shown with Grafana staircase line plot, where power is shown on wrong range

文字示例

以下influxdb中的热量表读数

08:00,    0 Joule
09:00, 3600 Joule
19:00, 7200 Joule

会给予

09:00, 1.0 Watt (which refers to 08:00-09:00)
18:00, 0.1 Watt (which refers to 09:00-18:00)

哪个Grafana(作为楼梯)将绘制为

08:00-09:00, Null (should be 1.0)
09:00-18:00, 1.0  (should be 0.1)
18:00-,      0.1  (should be Null)

1 个答案:

答案 0 :(得分:0)

我通过在计算导数之前使用GROUP BY()fill(linear)对数据进行插值来解决自己的问题。

创建样本数据

insert testenergy val=0     1565503200
insert testenergy val=3600  1565506800
insert testenergy val=7200  1565510400
insert testenergy val=10800 1565514000
insert testenergy val=14400 1565550000
insert testenergy val=18000 1565557200

收益

SELECT last("val") as energy FROM "testenergy" WHERE $timeFilter GROUP BY time($__interval) fill(null)

time                 energy
----                 ------
2019-08-11T06:00:00Z 0
2019-08-11T07:00:00Z 3600
2019-08-11T08:00:00Z 7200
2019-08-11T09:00:00Z 10800
2019-08-11T19:00:00Z 14400
2019-08-11T21:00:00Z 18000

DERIVATIVE()查询不起作用:

SELECT derivative(last("val"), 1s) as power_wrong FROM "testenergy" WHERE $timeFilter GROUP BY time($__interval) fill(null)

问题在于InfluxDB在时间t n + 1 上计算(t n ,t n + 1 )的导数,然后使用楼梯图显示Grafana(t n + 1 ,t n + 2 ):

time                 power_wrong
----                 -----------
2019-08-11T07:00:00Z 1
2019-08-11T08:00:00Z 1
2019-08-11T09:00:00Z 1
2019-08-11T19:00:00Z 0.1
2019-08-11T21:00:00Z 0.5

一种解决方案是在计算导数之前对InfluxDB中的数据进行插值:

SELECT derivative(mean("val"), 1s) as power_fix FROM "testenergy" WHERE $timeFilter GROUP BY time($__interval) fill(linear)

收益

time                 power_fix
----                 ---------
2019-08-11T07:00:00Z 1
2019-08-11T08:00:00Z 1
2019-08-11T09:00:00Z 1
2019-08-11T10:00:00Z 0.1
2019-08-11T11:00:00Z 0.1
2019-08-11T12:00:00Z 0.1
2019-08-11T13:00:00Z 0.1
2019-08-11T14:00:00Z 0.1
2019-08-11T15:00:00Z 0.1
2019-08-11T16:00:00Z 0.1
2019-08-11T17:00:00Z 0.1
2019-08-11T18:00:00Z 0.1
2019-08-11T19:00:00Z 0.1
2019-08-11T20:00:00Z 0.5
2019-08-11T21:00:00Z 0.5

Calculating derivative at any time point for irregularly spaced data points in influxdb and grafana