我有一个旧的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?
答案 0 :(得分:2)
通过检查现有的python脚本,我最终整理了一个非常简单的脚本,该脚本对我的情况非常有效。
答案 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>
解析只需稍微调整一下,当它工作时,修复反馈在这里(很容易'谷歌'),也可以反映给脚本的作者进行修复。