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
第一个 datacurce 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。 你看,当你在单独的更新中这样做时,你实际上所做的是用"未知"隐式更新另一个 DS,然后依靠自动插值来填充内容。 RRDTool 不是关系数据库,您无法在不影响其他值的情况下单独更新时间窗口中的值。
另一个问题是数据规范化,其中值在时间上进行调整以适应确切的时间边界,在此过程中,值被调整为线性等效......使用网络流量(大数字)时的实际结果几乎相同,总体总数和平均值是一致的,但较小的时间点值最终会像这样成为小数。
所以,有两件事:
- 一起更新您的 DS,而不是单独调用
- 尝试在时间边界上准确更新。(不使用"N",请使用精确的时间,四舍五入到最接近的分钟)