Rrd4j归档类型



我无法创建具有正确类型的存档。我错过了什么?我的示例与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试了一下,得到了同样的结果。

我需要改变什么,这样我才能得到在一步中发送的最大值,或者得到在一步中发送的值的总和。

谢谢

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

  1. 在某个时间点,我的速度是每小时1英里
  2. 一秒钟后我的速度达到每小时2英里
  3. 两秒钟后我的速度达到了每小时4英里

rrd现在有3个数据点,覆盖300秒间隔中的3秒。rrd应该储存什么?1、2还是3?以上都不是它必须以某种方式将数据规范化以说明在X和X+STEP之间的速率是y

更复杂的是,不能确定你的3个数据点在相同的300秒间隔内着陆。你的前2个数据点可以在一个区间内,4英里每小时可以在下一个区间内。这是因为存储的起始数据点并不完全是start+step。例如,如果你的起始值是14090812456那么它可能会变成14090812700即使你的步长是300

使用GAUGE存储精确输入值的唯一方法是在存储数据点的精确步长时间推送更新。我在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

相关内容

  • 没有找到相关文章

最新更新