我正在尝试使用RRD4J,但它会检索奇怪的数据。也许我在做些奇怪的事情。

我创建了具有以下功能的数据库:

// MAIN DATA SOURCES
rrdDef.addDatasource("create", DsType.COUNTER, 600, Double.NaN, Double.NaN);
rrdDef.addDatasource("copy", DsType.COUNTER, 600, Double.NaN, Double.NaN);
rrdDef.addDatasource("check", DsType.COUNTER, 600, Double.NaN, Double.NaN);
rrdDef.addDatasource("delete", DsType.COUNTER, 600, Double.NaN, Double.NaN);
// AVERAGE ARCHIVES
rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 1, 576);
rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 6, 336);
rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 24, 720);
rrdDef.addArchive(ConsolFun.AVERAGE, 0.5, 288, 540);
// MAX ARCHIVES
rrdDef.addArchive(ConsolFun.MAX, 0.5, 1, 576);
rrdDef.addArchive(ConsolFun.MAX, 0.5, 6, 336);
rrdDef.addArchive(ConsolFun.MAX, 0.5, 24, 720);
rrdDef.addArchive(ConsolFun.MAX, 0.5, 288, 540);


我更新如下:

Sample sample = rrdDb.createSample();
sample.setTime(now);
sample.setValue("create", (double)create);
sample.setValue("copy", (double)copy);
sample.setValue("check", (double)check);
sample.setValue("delete", (double)del);
sample.update();


并检索数据:

long endTime = Util.getTime();
long startTime = endTime - (12*60*60L);
FetchRequest fetchRequest = rrdDb.createFetchRequest(ConsolFun.MAX, startTime, endTime);
FetchData fetchData = fetchRequest.fetchData();
System.out.println(fetchData.dump());


但是我检索了最奇怪的数据。我输入了95、48、78和15之类的数字,并收到了+ 1.8046081071E07,+ 1.8046079370E07,+ 0.0000000000E00和+ 1.8046081013E07之类的数据

我想找回值。难道我做错了什么?

最佳答案

我找到了解决方案。

我应该使用DsType.GAUGE时使用了DsType.COUNTER。

因此,使用以下代码创建数据库解决了该问题:

rrdDef.addDatasource("create", DsType.GAUGE, 600, Double.NaN, Double.NaN);
rrdDef.addDatasource("copy", DsType.GAUGE, 600, Double.NaN, Double.NaN);
rrdDef.addDatasource("check", DsType.GAUGE, 600, Double.NaN, Double.NaN);
rrdDef.addDatasource("delete", DsType.GAUGE, 600, Double.NaN, Double.NaN);

10-08 20:18