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
答案 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不是关系数据库,你不能独立更新时间窗中的值而不影响其他值。
另一个问题是数据标准化,其中值在时间上被调整以适应精确的时间边界,并且这样做时,值被调整为线性等效...使用网络流量(大数字)时的实际结果是几乎相同,总体总数和平均值是一致的,但较小的时间点值最终会像这样小数点。
所以,有两件事: