2012-03-22 4 views
3

1 년 동안의 기록 만 추적하도록 설정 한 오래된 RRD 파일이 있습니다. 나는 더 많은 역사가 좋을 것이라고 결정했다. 나는 rrdtool의 크기를 조정했고 RRD가 더 커졌습니다. 이 RRD 파일의 오래된 백업이 있고 최신 RRD에 기록 데이터가 포함되도록 이전 데이터를 병합하고 싶습니다.시간이 지남에 따라 여러 RRD 병합

은 내가 RRD에있는 contrib "merged-rrd.py"를 해봤지만 제공합니다

$ 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 

가 결합 할 수있는 도구가 있습니까 :

$ 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을"시도 또는 작동하는 RRD를 병합합니까?

답변

2

필자는 기존의 파이썬 스크립트를 검토하여 필자의 경우에 충분히 잘 작동하는 간단한 스크립트를 작성했다. RRDtool의에 의해 생성 된 XML 파일을 보면

http://gist.github.com/2166343

0

, 펄 스크립트의 간단한 논리 오류가있다. 요소 AVERAGE는 매우 간단하지만 태그는 태그 안에 텍스트가 들어 있습니다.

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

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

구문 분석은 조금 불통해야하고 작업을 할 때, 수정을위한 스크립트의 저자로도하고 (이것은 '구글'에 쉽게입니다) 여기에 피드백 수정.

+0

내가 분석에 대한 감사하지만, 수정, 그래서 여전히 발굴 - 여기 포인터를 통해 감상 할 수있다, 펄을 모른다. – hasienda

2

나를 위해 고정 rrdtool-merge.pl 그건 : XML :: 나뭇 가지 문서에서

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

가 :

rrdmerge.pl 유틸리티
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

의/엑스트라 디렉토리에 Routers2에 포함 할 수 있어요. Routers2의 최신 버전을 수집하십시오. http://www.steveshipway.org/software/rrd/

이것은 내가 언급 한 상황과 정확히 일치하는 여러 개의 보관 된 MRTG RRD 파일을 병합하기 위해 작성한 유틸리티입니다.

이것은 OP를하기에는 너무 늦었지만 여기에 오는 사람들에게 유용 할 것입니다. 다른 DS, RRA 또는 간격을 사용하여 모든 RRD 파일을 병합 할 수 있으며 XML 또는 RRD를 생성 할 수 있으며 구성 요소 RRD 파일에서 사용 가능한 최상의 데이터를 선택하여 출력합니다.

예 :

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