从30天前开始在InfluxQL / InfluxDB中获得差异

时间:2016-12-28 12:02:15

标签: influxdb grafana

我的grafana仪表板中有一个统计信息,显示磁盘的当前使用情况。要获取该信息,我使用以下查询:

SELECT last("used") FROM "disk" WHERE "host" = 'server.mycompany.com' 
AND "path" = '/dev/sda1' AND $timeFilter

我想添加另一个显示过去30天内使用量增加/减少的数据。我假设为此我想从30天前获得最后一次测量和测量并减去它们。

如何在InfluxQL中执行此操作?

2 个答案:

答案 0 :(得分:4)

对于未来可能偶然发现这个答案的人。

按时间分组使用的last("used") - first("used")方法不会产生正确的结果,因为差异将在单个时间间隔内的值之间计算(例如10秒),而不是整个指定的值周期。

前面提到的https://github.com/influxdata/influxdb/issues/7076问题的最后一条评论中描述了正确的解决方案,特别适用于OP案例:

SELECT cumulative_sum(difference) 
  FROM (SELECT difference(last("used")) 
    FROM "disk") WHERE "host" = 'server.mycompany.com'
                 AND "path" = '/dev/sda1' AND time >= now() - 30d GROUP BY time(5m))

这将做的是以5分钟为间隔(存储桶)选择"used"的最后一个值,然后计算这些"last"值之间的差异。

这将导致数字的时间序列表示HDD空间使用量的增加/减少。

然后通过cumulative_sum将这些值汇总为一个运行总计,它会为每个时间间隔返回一系列值,如(1GB,1 + 5GB,1 + 5-3GB等)。

答案 1 :(得分:3)

它不会是完美的,但是会产生影响

SELECT last("used") - first("used") FROM "disk" WHERE ... AND time > now() - 30d

应该足够了。