Объединить несколько RRD с течением времени - PullRequest
3 голосов
/ 22 марта 2012

У меня есть старый файл 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 ]

2 голосов
/ 21 февраля 2013

Это исправлено для меня 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 голосов
/ 23 марта 2012

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

http://gist.github.com/2166343

1 голос
/ 01 сентября 2014

Утилита rrdmerge.pl, включенная в Routers2 в каталоге / extras, может сделать это. Соберите последнюю версию 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
0 голосов
/ 27 марта 2012

Глядя на файл XML, сгенерированный rrdtool, в скрипте Perl есть простая логическая ошибка.Элементы СРЕДНЕЕ и достаточно просты, но тег содержится внутри тега с текстом внутри.

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

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

Синтаксический анализ просто нужно немного настроить, и когда он работает, исправление возвращается сюдаэто легко "Google"), а также автору сценария для исправления.

...