在 InfluxQL/InfluxDB 中获取 30 天前的差异

Jac*_*son 4 influxdb grafana

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

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

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

我如何在 InfluxQL 中做到这一点?

Pla*_*nta 8

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

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))
Run Code Online (Sandbox Code Playgroud)

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

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

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


Mic*_*esa 4

它不会是完美的,但会产生以下效果

SELECT last("used") - first("used") FROM "disk" WHERE ... AND time > now() - 30d
Run Code Online (Sandbox Code Playgroud)

应该足够了。