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

ここで最大値を見たいと思います。合計でも試してみましたが、同じ結果が得られました。

1 つのステップで送信される最大の値を取得したり、1 つのステップで送信された値の合計を取得したりするには、何を変更する必要がありますか。

ありがとう

4

1 に答える 1

0

MAX は最大値入力ではなく、最大連結データ ポイントです。あなたの例を考えると、あなたがrrdに言っていることは

  1. ある時点で、私は時速 1 マイルになります
  2. 1 秒後、私は時速 2 マイルになります
  3. 2 秒後、私は時速 4 マイルになります

rrd には、300 秒間隔の 3 秒をカバーする 3 つのデータ ポイントがあります。rrd には何を保存する必要がありますか? 1、2、または3?上記のいずれも、X と X+STEP の間でレートが Y であると言うために何らかの方法でデータを正規化する必要はありません。

問題を複雑にするために、3 つのデータ ポイントが同じ 300 秒間隔で到達することは確実ではありません。最初の 2 つのデータ ポイントが 1 つの間隔にあり、4MPH が次の間隔にある可能性があります。これは、格納された開始データ ポイントが正確に開始 + ステップではないためです。つまり、14090812456 から開始すると、ステップが 300 であっても、14090812700 のようになる可能性があります。

GAUGE で正確な入力値を保存する唯一の方法は、データ ポイントを保存する正確なステップ時間で更新をプッシュすることです。x で 1MPH、x+300 で 2MPH、x+300 で 4MPH に進みます。ここで、x は最初のデータ ポイントから始まります。

これは、rrd 設定を使用したこの動作を示す bash の例です。一定の開始時刻と 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 に答える