首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rrd4j存档类型

rrd4j存档类型
EN

Stack Overflow用户
提问于 2013-04-10 01:56:43
回答 1查看 505关注 0票数 3

我无法创建一个具有正确类型的存档。我遗漏了什么?我的示例与https://code.google.com/p/rrd4j/wiki/Tutorial上的官方示例非常相似

RRD创建:

代码语言:javascript
复制
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)

代码语言:javascript
复制
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;
}

然后我把它取过来:

代码语言:javascript
复制
FetchRequest fetchRequest = rrdDb.createFetchRequest(ConsolFun.MAX, (L - 600), L + 4500);
FetchData fetchData = fetchRequest.fetchData();
String s = fetchData.dump();

我得到的结果是:(希望找到最大值)

代码语言:javascript
复制
920804100:  NaN  
920804400:  NaN  
920804700:  +1.0000000000E00  
920805000:  +1.0166666667E00  
920805300:  +1.0166666667E00  
...
920808600:  +1.0166666667E00  
920808900:  +1.0166666667E00  
920809200:  NaN

我想在这里看到最大值。我也尝试了total,我得到了同样的结果。

我必须更改什么,才能在一步中获得最大值,或者在一步中获得值的总和。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-08-27 05:37:39

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

在某个时间点,时速为1英里/小时,一秒后,时速为2英里/小时,两秒后,时速为4英里/小时,

,,I,,

  • ,两秒后,我时速为4英里,

,。

rrd现在有3个数据点,覆盖300秒间隔的3秒。rrd应该存储什么? 1、2还是3?以上都没有,它必须以某种方式对数据进行归一化,也就是说,在X和X+STEP之间,速率是Y。

更复杂的是,不能确定你的3个数据点是否在相同的300秒间隔内着陆。你的前两个数据点可能在一个区间内,4英里/小时可能在下一个区间内。这是因为存储的起始数据点并不完全是start+step。也就是说,如果你从14090812456开始,那么即使你的步数是300,它也可能是14090812700左右

使用GAUGE存储精确输入值的唯一方法是在精确的步长时间推送更新rrd存储数据点。我在x时速是1英里,在x+300时速是2英里,在x+300时速是4英里,这里x从第一个数据点开始。

这是一个使用rrd设置的bash示例,我使用一个常量开始时间和x,从我知道的rrd的第一个数据点开始。

代码语言:javascript
复制
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秒,你就会在更长的时间间隔内得到最大值

代码语言:javascript
复制
rrdtool fetch max.rrd MAX -r 1200 -s 1409080000
                          speed

1409081400: 3.0000000000e+00
1409083200: 3.0000000000e+00
1409085000: nan
1409086800: nan
1409088600: nan
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15909125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档