有没有谁了解cacti或者rrdtool计算平均值的算法?要精确的算法我现在碰到个问题,使用cacti查看的流量平均值和我自己读取rrd文件计算的平均值不匹配。
我的cacti5分钟值设置了能保持近90天,通过选择日期查看流量平均值,例如前面1天的值,这是和我自己读取rrd文件中数据计算的结果是一致的,实际上小于41天50分钟时,计算结果都是一致的,但大于这个时间时,cacti和我自己读取rrd文件计算的结果就不一致了,有人知道cacti到底怎么计算平均值的吗?

解决方案 »

  1.   

    是不是这个原因,导致的
    http://hi.baidu.com/zcc_zhu/blog/item/35f454cbe0c76691c8176877.html
      

  2.   

    好像是超过多少M之后就可能会有不准确的,以前看到过有这个BUG。。
      

  3.   

    cacti默认安装是有个上限显示值,我现在处理的数据和上限没有关系,主要是cacti自己的算法和我取得rra文件原始数据在超过一定时间范围后,算得结果不一致了
      

  4.   

    这个不是bug,rrd的特性如此对于历史数据,rrd会自动的合并旧数据并计算平均值,所以很多时候你看的历史数据,峰值已经被“磨平”了。如果想要尽可能的精确,就要付出磁盘空间的代价。另外读取出来的数值,精确程度与step和ds的设置有关...我记得以前有个台湾人写的文章,很全面,可以好好看看。 
    或者看看官方文档 
    http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html
      

  5.   

    还是解决不了问题,我现在主要是搞不清cacti是如何计算平均值的
      

  6.   

    我程序计算方法很简单,各个时间点的值的和/时间点数,在计算41个小时50分钟以内的数据,是和cacti的平均值结果是一样,当大于这个时间时,结果就不一样了,不存在step不一样问题,我的5分钟值能保持近90天的.
    一下是我取2012-05-04 18:15到2012-05-06 12:00的数据,cacti去平均值会向后延迟一下,所以rra文件读取的是2012-05-04 18:20到2012-05-06 12:05的数据,数据太多,不能完整提供
    =========traffic_in===============
    index: <Fri May 04 18:20:00 CST 2012>, value <2941644.006119749>
    index: <Fri May 04 18:25:00 CST 2012>, value <3028057.120941418>
    index: <Fri May 04 18:30:00 CST 2012>, value <2979704.486046401>
    index: <Fri May 04 18:35:00 CST 2012>, value <3107399.364020489>
    index: <Fri May 04 18:40:00 CST 2012>, value <3003575.8756830543>
    index: <Fri May 04 18:45:00 CST 2012>, value <2901054.3736888887>
    index: <Fri May 04 18:50:00 CST 2012>, value <2976863.552376128>
    index: <Fri May 04 18:55:00 CST 2012>, value <2976908.5053607104>
    index: <Fri May 04 19:00:00 CST 2012>, value <3176536.6396582196>
    index: <Fri May 04 19:05:00 CST 2012>, value <3181141.339755146>
    index: <Fri May 04 19:10:00 CST 2012>, value <3182329.8599720187>
    index: <Fri May 04 19:15:00 CST 2012>, value <3313934.3282444444>
    index: <Fri May 04 19:20:00 CST 2012>, value <3371990.2901777774>
    ...
    index: <Sun May 06 11:25:00 CST 2012>, value <2437211.4553657607>
    index: <Sun May 06 11:30:00 CST 2012>, value <2486652.3038360793>
    index: <Sun May 06 11:35:00 CST 2012>, value <2492365.523271687>
    index: <Sun May 06 11:40:00 CST 2012>, value <2444567.7428810853>
    index: <Sun May 06 11:45:00 CST 2012>, value <2611386.6049989443>
    index: <Sun May 06 11:50:00 CST 2012>, value <2744872.385636507>
    index: <Sun May 06 11:55:00 CST 2012>, value <2781943.9785052426>
    index: <Sun May 06 12:00:00 CST 2012>, value <2886486.1765672206>
    index: <Sun May 06 12:05:00 CST 2012>, value <3011064.773033222>
    =========traffic_out===============
    index: <Fri May 04 18:20:00 CST 2012>, value <1194647.9021172388>
    index: <Fri May 04 18:25:00 CST 2012>, value <1335442.6195863658>
    index: <Fri May 04 18:30:00 CST 2012>, value <1427392.0561943653>
    index: <Fri May 04 18:35:00 CST 2012>, value <1250506.5980419782>
    index: <Fri May 04 18:40:00 CST 2012>, value <1466262.0094267188>
    index: <Fri May 04 18:45:00 CST 2012>, value <1446339.9722000002>
    index: <Fri May 04 18:50:00 CST 2012>, value <1257722.5898102312>
    index: <Fri May 04 18:55:00 CST 2012>, value <1245598.7106055035>
    index: <Fri May 04 19:00:00 CST 2012>, value <1298020.870176053>
    index: <Fri May 04 19:05:00 CST 2012>, value <1381585.2653652078>
    index: <Fri May 04 19:10:00 CST 2012>, value <1294441.8926318935>
    index: <Fri May 04 19:15:00 CST 2012>, value <1399341.6470666667>
    index: <Fri May 04 19:20:00 CST 2012>, value <1349306.5309111113>
    ...
    index: <Sun May 06 11:25:00 CST 2012>, value <1368637.3151909797>
    index: <Sun May 06 11:30:00 CST 2012>, value <1361569.812548695>
    index: <Sun May 06 11:35:00 CST 2012>, value <1407043.210607678>
    index: <Sun May 06 11:40:00 CST 2012>, value <1410423.0248926792>
    index: <Sun May 06 11:45:00 CST 2012>, value <1432474.1069470402>
    index: <Sun May 06 11:50:00 CST 2012>, value <1493195.925382949>
    index: <Sun May 06 11:55:00 CST 2012>, value <1511673.844650274>
    index: <Sun May 06 12:00:00 CST 2012>, value <1519292.45461394>
    index: <Sun May 06 12:05:00 CST 2012>, value <1574064.0935797845>我代码计算的结果:
    ==================traffic in =========================
    avarate = 18.475196913919422
    ==================traffic out =========================
    avarate = 9.427647297481014cacti的结果:
    ==================traffic in =========================
    avarate = 18.48
    ==================traffic out =========================
    avarate = 9.43
    很吻合,
    但再多5分钟结果就不一样了,时间段2012-05-04 18:10到2012-05-06 12:00
    程序计算结果:
    ==================traffic in =========================
    avarate = 18.4834252935767
    ==================traffic out =========================
    avarate = 9.430123330740397cacti的结果:
    ==================traffic in =========================
    avarate = 18.87
    ==================traffic out =========================
    avarate = 9.81数据开始不匹配
      

  7.   

    我的算法是,各个时间点的值和/时间的点数,不在乘以时间了,因为都是5分钟(300秒),所以按个数计算就可以了。例如取2012-05-04 18:15到2012-05-04 18:30的平均值,我读取rra文件中2012-05-04 18:20到2012-05-04 18:35的数据,共4条数据
    =========traffic_in===============
    index: <Fri May 04 18:20:00 CST 2012>, value <2941644.006119749>
    index: <Fri May 04 18:25:00 CST 2012>, value <3028057.120941418>
    index: <Fri May 04 18:30:00 CST 2012>, value <2979704.486046401>
    index: <Fri May 04 18:35:00 CST 2012>, value <3107399.364020489>average = (2941644.006119749 + 3028057.120941418 + 2979704.486046401 + 3107399.364020489) / 4时间间隔小于41小时50分钟的用这个算法都是准确的
      

  8.   

    那你考虑到数据溢出的情况了吗?像你示例的连续加法是会溢出的average = 2941644.006119749/4 + 3028057.120941418/4 + 2979704.486046401/4 + 3107399.364020489/4
    这样就不会溢出了
      

  9.   

    不会溢出,我用的是jav double类型的
      

  10.   

    你总是间隔固定的点出问题,还是要先考虑下数据溢出的情况
    由于没有数据,不好验证算法的正确性建议你逐点计算固定间隔的值,与cacti的结果对比一下
      

  11.   

    我这边抽取了很多时间间隔的数据对比过了,时间间隔小于41小时50分钟的用这个算法的结果和cacti都是匹配的,再大就开始不一样了
      

  12.   

    又发现一个规律,cacti的图的width是500,如果计算的时间跨度rra文件的row超过502行时,就开始不准确了
      

  13.   

    http://www.cnyunwei.com/thread-10985-1-1.html  这个链接绝对可以解决 。  我现在遇到此问题 。查看当天的每分钟的数据OK,查看之前的每分钟的数据,就被平均了 。   这个链接可以设置保存时间 。   有问题可以Q。 105 1181 048