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

时间:2016-07-13 09:44:10

标签: rrdtool

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

1 个答案:

答案 0 :(得分:2)

这当然是数据规范化。它也是由您在两个单独的调用中更新两个数据源引起的。

如果您改为使用: rrdtool update test.rrd -t c1:c2 N:10:10 rrdtool update test.rrd -t c1:c2 N:20:20 那么你将同时更新两个DS。您可以看到,当您在单独的更新中执行此操作时,您实际执行的操作是隐式更新其他DS,其中包含未知的'然后依靠自动插值来填充内容.RRDTool不是关系数据库,你不能独立更新时间窗中的值而不影响其他值。

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

所以,有两件事:

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