我的grafana仪表板中有一个统计信息,显示磁盘的当前使用情况。要获取该信息,我使用以下查询:
SELECT last("used") FROM "disk" WHERE "host" = 'server.mycompany.com'
AND "path" = '/dev/sda1' AND $timeFilter
我想添加另一个显示过去30天内使用量增加/减少的数据。我假设为此我想从30天前获得最后一次测量和测量并减去它们。
如何在InfluxQL中执行此操作?
答案 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
应该足够了。