3

我无法创建具有正确类型的存档。我错过了什么?我的示例与https://code.google.com/p/rrd4j/wiki/Tutorial上的官方示例非常相似

RRD 创建:

rrdDef.setStartTime(L - 300);
rrdDef.addDatasource("speed", DsType.GAUGE, 600, Double.NaN, Double.NaN);
rrdDef.addArchive(ConsolFun.MAX, 0.5, 1, 24);
rrdDef.addArchive(ConsolFun.MAX, 0.5, 6, 10);

我添加了一些值:(每一步 1,2,3)

long x = L;
while (x <= L + 4200) {
   Sample sample = rrdDb.createSample();
   sample.setAndUpdate((x + 11) + ":1");
   sample.setAndUpdate((x + 12) + ":2");
   sample.setAndUpdate((x + 14) + ":3");
   x += 300;
}

然后我拿它:

FetchRequest fetchRequest = rrdDb.createFetchRequest(ConsolFun.MAX, (L - 600), L + 4500);
FetchData fetchData = fetchRequest.fetchData();
String s = fetchData.dump();

我得到结果:(希望找到最大值)

920804100:  NaN  
920804400:  NaN  
920804700:  +1.0000000000E00  
920805000:  +1.0166666667E00  
920805300:  +1.0166666667E00  
...
920808600:  +1.0166666667E00  
920808900:  +1.0166666667E00  
920809200:  NaN

我想在这里看到最大值。也尝试了total,我得到了相同的结果。

我必须改变什么,所以我得到了一步发送的最大值,或者得到了一步发送的值的总和。

谢谢

4

1 回答 1

0

MAX 不是最大值输入,而是最大合并数据点。鉴于你的例子,你对 rrd 说的是

  1. 在某个时间点,我将以 1 英里/小时的速度行驶
  2. 一秒钟后,我将以 2 英里/小时的速度行驶
  3. 两秒钟后,我将以 4 英里/小时的速度行驶

rrd 现在有 3 个数据点,覆盖 300 秒间隔中的 3 秒。rrd 应该存储什么?1、2 还是 3?以上都不需要以某种方式对数据进行归一化,即在 X 和 X+STEP 之间,速率为 Y。

使事情复杂化的是,您的 3 个数据点并不能确定在同一个 300 秒的时间间隔内。您的前 2 个数据点可能在一个间隔中,而 4MPH 可能在下一个间隔中。这是因为存储的起始数据点并不完全是 start+step。即,如果您从 14090812456 开始,即使您的步长为 300,它也可能类似于 14090812700

使用 GAUGE 存储准确输入值的唯一方法是在准确的步骤时间推送更新 rrd 存储数据点。我将在 x 处 1MPH,在 x+300 处 2MPH,在 x+300 处 4MPH,其中 x 从第一个数据点开始。

这是一个 bash 示例,显示了使用您的 rrd 设置进行这项工作,我使用的是恒定的开始时间,并且 x 从我知道的 rrd 的第一个数据点开始。

L=1409080000
rrdtool create max.rrd --start=$L DS:speed:GAUGE:600:U:U RRA:MAX:0.5:1:24 RRA:MAX:0.5:6:10
x=$(($L+200))
while [ $x -lt $(($L+3000)) ]; do
        rrdtool update max.rrd "$(($x)):1"
        rrdtool update max.rrd "$(($x+300)):2"
        rrdtool update max.rrd "$(($x+600)):3"
        x=$(($x+900))
done

rrdtool fetch max.rrd MAX -r 600 -s 1409080000
                          speed

1409080200: 1.0000000000e+00
1409080500: 2.0000000000e+00
1409080800: 3.0000000000e+00
1409081100: 1.0000000000e+00
1409081400: 2.0000000000e+00
1409081700: 3.0000000000e+00
1409082000: 1.0000000000e+00

不是那么有用,但是如果您将分辨率提高到 1200 秒,您将开始在更大的时间间隔内获得最大值

rrdtool fetch max.rrd MAX -r 1200 -s 1409080000
                          speed

1409081400: 3.0000000000e+00
1409083200: 3.0000000000e+00
1409085000: nan
1409086800: nan
1409088600: nan
于 2014-08-26T21:37:38.817 回答