在 InfluxQL/InfluxDB 中获得自 30 天前以来的差异

Posted

技术标签:

【中文标题】在 InfluxQL/InfluxDB 中获得自 30 天前以来的差异【英文标题】:Get difference since 30 days ago in InfluxQL/InfluxDB 【发布时间】:2017-05-12 17:14:11 【问题描述】:

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

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

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

如何在 InfluxQL 中做到这一点?

【问题讨论】:

adding an increase function 有一个未解决的问题。 【参考方案1】:

它不会是完美的,但有一些效果

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

应该足够了。

【讨论】:

这符合我的要求。谢谢!【参考方案2】:

对于将来可能会偶然发现此答案的人。

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

在https://github.com/influxdata/influxdb/issues/7076 之前提到的问题的最后一个 cmets 中描述了正确的解决方案,特别适用于 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" 值之间的差异。

这将产生一个时间序列的数字,表示硬盘空间使用量的增加/减少。

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

【讨论】:

'FROM "disk")' 后面的右括号太多了。

以上是关于在 InfluxQL/InfluxDB 中获得自 30 天前以来的差异的主要内容,如果未能解决你的问题,请参考以下文章

无法在 iOS8 自定义键盘中获得约束

自定义注解,通过反射获得注解中的值(详细自定义注解解释)

如何获得自定义日期?

如何在 Android + GCM 中获得带有声音 + 自定义应用程序图标的推送通知

使用自定义输入表单时如何获得正确的表单状态?

Facebook无需登录即可获得自定义对象的喜欢数