在 InfluxQL/InfluxDB 中获取自 30 天前以来的差异
Get difference since 30 days ago in InfluxQL/InfluxDB
我的 grafana 仪表板中有一个统计信息显示磁盘的当前使用情况。要获取该信息,我使用以下查询:
SELECT last("used") FROM "disk" WHERE "host" = 'server.mycompany.com'
AND "path" = '/dev/sda1' AND $timeFilter
我想添加另一个统计数据,显示过去 30 天的 increase/decrease 使用情况。我假设为此我想获得上次测量值和 30 天前的测量值并减去它们。
如何在 InfluxQL 中执行此操作?
它不会是完美的,但可以达到
的效果
SELECT last("used") - first("used") FROM "disk" WHERE ... AND time > now() - 30d
应该足够了。
供未来可能偶然发现此答案的人使用。
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 space 使用量的增加/减少。
然后通过 cumulative_sum
将这些值汇总为 运行 总数,其中 returns 一系列值,例如(1GB、1+5GB、1+5-3GB、等)每个时间间隔。
我的 grafana 仪表板中有一个统计信息显示磁盘的当前使用情况。要获取该信息,我使用以下查询:
SELECT last("used") FROM "disk" WHERE "host" = 'server.mycompany.com'
AND "path" = '/dev/sda1' AND $timeFilter
我想添加另一个统计数据,显示过去 30 天的 increase/decrease 使用情况。我假设为此我想获得上次测量值和 30 天前的测量值并减去它们。
如何在 InfluxQL 中执行此操作?
它不会是完美的,但可以达到
的效果SELECT last("used") - first("used") FROM "disk" WHERE ... AND time > now() - 30d
应该足够了。
供未来可能偶然发现此答案的人使用。
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 space 使用量的增加/减少。
然后通过 cumulative_sum
将这些值汇总为 运行 总数,其中 returns 一系列值,例如(1GB、1+5GB、1+5-3GB、等)每个时间间隔。