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 不是关系数据库,你无法在不影响其他值的情况下独立更新时间窗口中的值。
另一个问题是数据规范化,其中值被临时调整以适应确切的时间边界,并且在这样做时,值被调整为线性等效......使用网络流量时的实际结果(大数字) 几乎相同,总和和平均值是一致的,但较小的时间点值最终会像这样小数。
所以,有两件事:
- 一起更新您的 DS,而不是单独调用
- 尝试准确更新时间边界。(而不是使用 'N' 使用准确的时间,四舍五入到最接近的分钟)
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 不是关系数据库,你无法在不影响其他值的情况下独立更新时间窗口中的值。
另一个问题是数据规范化,其中值被临时调整以适应确切的时间边界,并且在这样做时,值被调整为线性等效......使用网络流量时的实际结果(大数字) 几乎相同,总和和平均值是一致的,但较小的时间点值最终会像这样小数。
所以,有两件事:
- 一起更新您的 DS,而不是单独调用
- 尝试准确更新时间边界。(而不是使用 'N' 使用准确的时间,四舍五入到最接近的分钟)