如何获得influxdb中当前值和上一个值之间的差?

时间:2019-07-05 06:01:50

标签: linux influxdb collectd

am使用收集来监视系统指标...。对于网络指标,我需要知道每分钟的传入和传出流量...但是Rx(发送的数据包总数)和Tx(总数)收到的数据包数量)数据包提供了自上次重新启动计算机以来的数据...

因此,我需要查询influxdb以获取当前值和先前值之间的差异。如何查询以获取差异....

我正在使用类似查询

select difference(last("value")) from interface_rx WHERE  "type" = 'if_octets' > now() - 1h group by time(10s)

请帮助我..没有得到我需要的确切输出结果

enter image description here

我使用查询时遇到以下错误

Select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m)

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

应该是这样的

select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m)

此查询应返回约60个值;在过去一小时中,每分钟有1个差异。 last在这种情况下意味着每1分钟使用一次最后一个值(如果有多个)

与查询的差异: and time > now() - 1h丢失-这可能是编辑错误,但似乎无效。 如果需要每分钟的统计信息,则需要group by time(1m)。您正在按10秒分组,因此结果应该是每10秒的差异。

您可能还想做的是用先前的可用值填充缺失的值(并且在该期间您将分别得到零) select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m) fill(previous) 编辑:fill(previous)可能不是您想要的,因为如果未记录最新值,但它们将被较旧的值替代,并且您将获得差值= 0作为最新值。

如果只想要最后一个值,则可以执行以下操作 select difference(last("value")) from interface_rx WHERE "type" = 'if_octets' and time > now() - 1h group by time(1m) fill(previous) order by time DESC limit 1