2012-03-22 3 views
3

У меня есть старый файл RRD, который был настроен только для отслеживания 1 года истории. Я решил, что больше истории будет приятным. Я изменил размер rrdtool, и RRD теперь больше. У меня есть старые резервные копии этого файла RRD, и я бы хотел объединить старые данные, чтобы обновленный RRD также имел исторические данные.Слияние нескольких RRD со временем

Я попытался RRD вно "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, который работает?

ответ

2

Я закончил тем, что создал очень простой скрипт, который достаточно хорошо работает для моего случая, изучив существующий сценарий python.

http://gist.github.com/2166343

0

Глядя на файл XML, порожденного RRDTool, существует простая логическая ошибка в сценарии Perl. Элементы AVERAGE и достаточно просты, но тег содержится внутри тега с текстом внутри.

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

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

Разбор просто должен быть изменен немного, и когда он работает, исправление подается обратно сюда (где легко «Google»), а также автором сценария для исправления.

+0

Я не знаю, Perl, так что спасибо за анализ, но исправление будет по-прежнему иметь в виду, над DIG-сюда указатель. – hasienda

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. 
+0

Это, безусловно, сработало для меня. –

1

Утилита rrdmerge.pl, входящий в состав Routers2 в каталоге/статистов, может это сделать. Соберите последнюю версию Routers2 от http://www.steveshipway.org/software/rrd/

Это утилита, которую я написал для слияния нескольких архивных файлов MRTG RRD, которые звучат точно так же, как в ситуации, о которой вы упоминаете.

Возможно, это слишком поздно для ОП, но, надеюсь, будет полезно для более поздних людей, которые приходят сюда. Он может объединять любые файлы RRD, даже с разными DS, RRA или интервалами, и может генерировать XML или RRD и будет выбирать наилучшие доступные данные из файлов RRD компонента для вывода.

Пример:

rrdmerge.pl --rrd --libpath $RRDLIBDIR --output /tmp/merge.rrd --rows 12000 $FROMDIR/file.rrd $ARCHIVE/*.rrd 
Смежные вопросы