解决 InfluxDB 中的导数(sum(value))限制

Working around derivative(sum(value)) limitations in InfluxDB

我已经从进入 InfluxDB 0.8.8 的对象存储中读取和写入字节计数器(很高兴为 0.9 提供一个有效的答案。在升级之前等待不同的存储引擎)

数据由服务器和设备收集,因此例如一个数据点可能有:

timestamp: ...
server: abc1-oss1
disk: disk_id1
read_bytes: a counter

abc\d+ 和 -oss\d+ 中有一系列 ID,例如 abc14-oss5、abc1-oss1、abc8-oss12 都是有效的主机名。

我想做的是提供所有不同 abc\d+-* 组的概览。查看者会 select,说 'abc2' 并获得与 abc2-*.

匹配的所有主机上所有磁盘总和的导数(因为它是一个不断增加的计数器)

虽然我可以将特定主机的总和放入初始数据插入中,但我不能对 abc2-oss*

中的十几个主机执行此操作

在 grafana 中,我可以用正则表达式做一个模板变量,将可能的 abc\d+ 值提取到一个名为 $Area 的变量中,然后:

select sum(value) from "read_bytes" where $timeFilter and hostname =~ /$Area.*/ group by time($interval) order asc

这给了我每个区域的读取总和,但我不能调用 derivative() ,因为 derivative(sum(value)) 在 InfluxDB 中无效:

select derivative(sum(value)) from ... 

"Value cannot be evaluated for type &{sum 10 [oxc21648f220] false}"

我假设这意味着我需要在 InfluxDB 中进行连续查询以计算总和,然后对结果测量调用 derivative() 。我将如何为部分列值执行此操作,以便我对 hostname =~ /abc1-.*/hostname =~ /abc2-.*/ 等的所有值求和?

DERIVATIVE(SUM(value)) 在 InfluxDB 0.9 中有效,它仍然支持 FROM 子句中的正则表达式匹配。

不过,我建议您阅读 differences between 0.8 and 0.9 before migrating。它们很重要,迁移也很重要。等待0.9.5官方发布,体验最佳。

如果您准备好投入使用,新的存储引擎在最新的每晚构建中。