2013-04-09 1 views
3

Мне не удается создать архив с правильным типом. Что мне не хватает? Мой пример очень похож на официальный, например, на https://code.google.com/p/rrd4j/wiki/Tutorial созданияrrd4j тип архива

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 

Я хотел бы видеть максимальное значение здесь. Пробовал и тотал, и я получил ТАКОЙ результат.

Что мне нужно изменить, чтобы получить наибольшее значение, отправленное за один шаг, или получить сумму значений, отправленных за один шаг.

Благодаря

ответ

0

МАХ не является максимальной входным значением, но максимальной консолидированной точкой данных. То, что вы говорите RRD данного ваш пример

  1. В какой-то момент времени я собираюсь 1MPH
  2. Через секунду я собираюсь 2MPH
  3. Две секунды спустя я собираюсь 4mph

rrd теперь имеет 3 точки данных, покрывающие 3 секунды интервала в 300 секунд. Что должно хранить rrd? 1, 2 или 3? Ничего из вышеперечисленного он не должен нормализовать данные, чтобы сказать между X и X + STEP, что скорость равна Y.

Чтобы усложнить ситуацию, не обязательно, что ваши 3 точки данных высаживаются в те же 300 секунд интервал. Ваши первые 2 точки данных могут быть за один интервал, а 4MPH - в следующем. Это связано с тем, что сохраненная начальная точка данных не точно начинается + шаг. то есть, если вы начинаете с 14090812456, это может быть что-то вроде 14090812700, хотя ваш шаг 300

Единственный способ хранения точных входных значений с помощью GAUGE - это толкать обновления с точным временем шага rrd хранить точки данных. Я собираюсь 1MPH в x, 2MPH при x + 300, 4MPH при x + 300, где 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 
Смежные вопросы