首先。我创建了一个rrd数据库
$ rrdtool create test.rrd --start 1200000000 --step 300 DS:test_1:GAUGE:600:0:100 RRA:AVERAGE:0.5:1:12
二。做一些更新
$ rrdtool update test.rrd 1200000100:1
$ rrdtool update test.rrd 1200000400:3
$ rrdtool update test.rrd 1200000700:4
$ rrdtool update test.rrd 1200001000:5
第三。从test.rrd获取数据
$ rrdtool fetch test.rrd -r 300 -s 1200000000 -e 1200001000 AVERAGE
为什么1200000300是2.333?
答案 0 :(得分:2)
这是由数据规范化引起的。 RRDTool将自动调整数据,使其完全适合定义的Interval的时间边界。
尽管您的数据间隔时间间隔为300秒,但与您定义的间隔(步骤)相同,不幸的是它们不在实际边界上。
边界是time modulo step
等于零的边界。在您的情况下,那将是1200000000
而不是1200000100
。因此,需要调整样本(其中三分之一分配给较早的区间,三分之二分配给较晚的区间)。这是更复杂的,因为您在Gauge模式下操作而RRDTool工作插值假定速率的线性变化率。
如果您在时间1200000300
或1200000000
开始采样,那么您会看到它们完全按照给定的方式存储,因为标准化步骤将变为空操作。由于您提供了1200000100和1200000400的Gauge样本,1200000300的存储值将是连接两个样本的线的三分之二:1 + ( 3 - 1 ) x 0.666 = 2.333
这就是您所获得的。
Alex van den Bogeardt here的教程将向您解释一切。