3

我有一个旧的 RRD 文件,它只设置为跟踪 1 年的历史。我决定更多的历史会很好。我做了 rrdtool resize,现在 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

4 回答 4

2

通过检查现有的 python 脚本,我最终编写了一个非常简单的脚本,该脚本对我的情况来说足够好。

http://gist.github.com/2166343

于 2012-03-23T02:46:24.657 回答
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.
于 2013-02-21T17:34:47.603 回答
1

rrdmerge.pl 实用程序,包含在 /extras 目录中的 Routers2 中,可以执行此操作。从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
于 2014-08-31T22:39:15.190 回答
0

查看 rrdtool 生成的 XML 文件,Perl 脚本中有一个简单的逻辑错误。元素 AVERAGE 并且足够简单,但标签包含在标签中,其中包含文本。

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

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

解析只需要稍微调整一下,当它工作时,修复会反馈到这里(很容易“谷歌”)以及脚本的作者进行修复。

于 2012-03-27T14:29:04.610 回答