随着时间的推移合并多个RRD

时间:2012-03-22 03:42:01

标签: rrdtool rrd

我有一个旧的RRD文件,该文件仅设置为跟踪1年的历史记录。我决定更多历史会很好。我做了rrdtool调整大小,RRD现在变大了。我有这个RRD文件的旧备份,我想合并旧数据,以便最新的RRD也有历史数据。

我已经尝试了rrd contrib“merged-rrd.py”,但它给出了:

    $ python merged-rrd.py ../temperature-2010-12-06.rrd ../temperature-2011-05-24.rrd merged1.rrd
    merging old:../temperature-2010-12-06.rrd to new:../temperature-2011-05-24.rrd. creating merged rrd: merged1.rrd
    Traceback (most recent call last):
        File "merged-rrd.py", line 149, in <module>
            mergeRRD(old_path, new_path, mer_path)
        File "merged-rrd.py", line 77, in mergeRRD
            odict = getXmlDict(oxml)
        File "merged-rrd.py", line 52, in getXmlDict
            cf = line.split()[1]
    IndexError: list index out of range

还试过“rrd_merger.pl”:

    $ perl rrd_merger.pl --oldrrd=../temperature-2010-12-06.rrd --newrrd=../temperature-2011-05-24.rrd --mergedrrd=merged1.rrd
    Dumping ../temperature-2010-12-06.rrd to XML: /tmp/temperature-2010-12-06.rrd_old_8615.xml
    Dumping ../temperature-2011-05-24.rrd to XML: /tmp/temperature-2011-05-24.rrd_new_8615.xml
    Parsing ../temperature-2010-12-06.rrd XML......parsing completed
    Parsing ../temperature-2011-05-24.rrd XML...
    Last Update: 1306217100
    Start processing Round Robin DB
    Can't call method "text" on an undefined value at rrd_merger.pl line 61.
     at rrd_merger.pl line 286
     at rrd_merger.pl line 286

是否有工具可以合并或合并有效的RRD?

4 个答案:

答案 0 :(得分:2)

通过检查现有的python脚本,我最终整理了一个非常简单的脚本,该脚本对我的情况非常有效。

http://gist.github.com/2166343

答案 1 :(得分:2)

为我修复了rrdtool-merge.pl:

<       my $xff         = $new_rra->first_child( 'xff' )->text;
---
>       my $xff         = $new_rra->first_child_text( 'xff' );

来自XML :: Twig文档:

first_child_text ($optional_condition)
    Return the text of the first child of the element, or the first child
    matching the $optional_condition If there is no first_child then returns ''. This
    avoids getting the child, checking for its existence then getting the text for trivial
    cases.

答案 2 :(得分:1)

/ extras目录中的Routers2附带的rrdmerge.pl实用程序可以执行此操作。从http://www.steveshipway.org/software/rrd/

收集最新版本的Routers2

这是我为了合并多个存档的MRTG RRD文件而编写的实用程序,听起来与您提到的情况完全相同。

这对于OP来说可能为时已晚,但希望对来到这里的后来人有用。它可以合并任何RRD文件,即使使用不同的DS,RRA或间隔,也可以生成XML或RRD,并从组件RRD文件中选择最佳可用数据来进行输出。

示例:

rrdmerge.pl --rrd --libpath $RRDLIBDIR --output /tmp/merge.rrd --rows 12000 $FROMDIR/file.rrd $ARCHIVE/*.rrd

答案 3 :(得分:0)

查看rrdtool生成的XML文件,Perl脚本中存在一个简单的逻辑错误。元素AVERAGE并且很简单,但标签包含在标签内,文本在里面。

            <cf> AVERAGE </cf>
            <pdp_per_row> 1 </pdp_per_row> <!-- 300 seconds -->

            <params>
            <xff> 5.0000000000e-01 </xff>
            </params>

解析只需稍微调整一下,当它工作时,修复反馈在这里(很容易'谷歌'),也可以反映给脚本的作者进行修复。