rrdtool 在两个命令中更新多个数据源

rrdtool update multiple datasources in two commands

RRD没有正确更新第二个数据源,见:

首先,我使用两个数据源(c1 和 c2)创建 RRD 文件:

rdtool create test.rrd  --start N  --step 60 DS:c1:GAUGE:120:0:100 DS:c2:GAUGE:120:0:100 RRA:AVERAGE:0.5:1:1440

然后我用两个命令更新两个数据源:

rrdtool update test.rrd -t c1 N:10 && rrdtool update test.rrd -t c2 N:10

等待 60 秒.... 再次更新:

rdtool update test.rrd -t c1 N:20 && rrdtool update test.rrd -t c2 N:20

然后让我们看看我们有什么:

rrdtool fetch test.rrd AVERAGE | tail -5
1468409580: -nan -nan
1468409640: -nan -nan
1468409700: -nan -nan
1468409760: 1,5988575517e+01 1,9266620475e-01
1468409820: -nan -nan

第一个数据源 c1 按预期工作,但第二个 c2 显示的值低于 1,我预计该值也接近 15。

是的,我知道我也可以在一个更新命令中更新两个数据源,但在我的例子中,一个 rrd 文件中有很多数据源,读取和跟踪大量值会更好。

使用的 rrd 版本:1.6.0

这当然是数据规范化。这也是由于您在两个单独的调用中更新了两个数据源造成的。

如果您改为使用: rrdtool update test.rrd -t c1:c2 N:10:10 rrdtool update test.rrd -t c1:c2 N:20:20 那么您将同时更新两个 DS。你看,当你在单独的更新中这样做时,你实际上在做的是用 'unknown' 隐式更新另一个 DS,然后依靠自动插值来填充东西。RRDTool 不是关系数据库,你无法在不影响其他值的情况下独立更新时间窗口中的值。

另一个问题是数据规范化,其中值被临时调整以适应确切的时间边界,并且在这样做时,值被调整为线性等效......使用网络流量时的实际结果(大数字) 几乎相同,总和和平均值是一致的,但较小的时间点值最终会像这样小数。

所以,有两件事:

  1. 一起更新您的 DS,而不是单独调用
  2. 尝试准确更新时间边界。(而不是使用 'N' 使用准确的时间,四舍五入到最接近的分钟)