rrd4j存档类型

时间:2013-04-09 17:56:43

标签: rrdtool rrd

我无法创建具有正确类型的存档。 我错过了什么? 我的例子与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

我想在这里看到最大值。用总计也试过,我得到了相同的结果。

我需要更改什么,因此我获得了一步发送的最大值,或者获得一步发送的值的总和。

由于

1 个答案:

答案 0 :(得分:0)

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

  1. 在某个时间点,我要去1MPH
  2. 一秒钟后,我要去2MPH
  3. 两秒钟后,我要去4MPH
  4. rrd现在有3个数据点,覆盖300秒间隔的3秒。 rrd应该存储什么? 1,2或3?以上都没有必要以某种方式对数据进行标准化,以说在X和X + STEP之间,速率为Y.

    使问题复杂化并不确定您的3个数据点是否以相同的300秒间隔着陆。您的前2个数据点可以在一个区间内,4MPH可以在下一个区间内。这是因为存储的起始数据点不完全是start + step。即如果你从14090812456开始,它可能就像14090812700,即使你的步数为300

    使用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