2017-11-03 10 views
0

내 첫 번째 게시물을 너무 너무 장황하지 않았 으면 좋겠다. 내 rrdtool 구성에 10 개의 행만 있기 때문에 datapoints를 잃어 버렸고 이전 데이터로 백업 소스 파일에서 업데이트하려고했습니다. 은 행을 수정 한 후 설정을 사용하여 만든 수 :rrdtool 데이터베이스 업데이트

rrdtool create dailySolax.rrd \ 
--start 1451606400 \ 
--step 21600 \ 
DS:toGrid:GAUGE:172800:0:100000 \ 
DS:fromGrid:GAUGE:172800:0:100000 \ 
DS:totalEnerg:GAUGE:172800:0:100000 \ 
DS:BattNow:GAUGE:1200:0:300 \ 
RRA:LAST:0.5:1d:1010 \ 
RRA:MAX:0.5:1d:1010 \ 
RRA:MAX:0.5:1M:1010 

와 파이썬 업데이트 라인은

newline = ToGrid + ':' + FromGrid + ':' + TotalEnergy + ':' + battNow 
UpdateE = 'N:'+ (newline) 
print UpdateE 
try: 
    rrdtool.update(
    "%s/dailySolax.rrd" % (os.path.dirname(os.path.abspath(__file__))), 
    UpdateE) 

이 모두 (A crontabbed 웹 사이트 스크랩에서) 원래의 데이터를 입력하는 잘 작동하지만입니다 내가 말했듯이 나는 데이터를 잃어 버렸고 이전 데이터 포인트를 다시 추가하려고했다. 내 백업 소스에서 나는 첫 번째 필드는 시간 소인입니다

1509386401:10876.9:3446.22:18489.2:19.0 
1509408001:10879.76:3446.99:18495.7:100.0 

처럼 보이는 선으로 일반 텍스트 파일을 가지고 있었다. 그리고 업데이트의 라인 읽기이 코드를 사용 :

with open("rrdRecovery.txt","r") as fp: 
    for line in fp: 
     print line 
## newline = ToGrid + ':' + FromGrid + ':' + TotalEnergy + ':' + battNow 
    UpdateE = line 
    try: 
     rrdtool.updatev(
     "%s/dailySolax.rrd" % (os.path.dirname(os.path.abspath(__file__))), 
     UpdateE) 

그것이 내가 같은 설정을 사용하여 만든 빈 데이터베이스에 다시 시도 데이터베이스의 현재 버전의 사본이 제대로 작동하지 않자. 각각의 경우 업데이트는 데이터베이스의 타임 스탬프 데이터에만 적용되고 다른 필드의 데이터는 제공되지 않습니다. 파이썬은 불평하지 않고 나는

N:10876.9:3446.22:18489.2:19.0 

덤프 수행하는 RRA 데이터베이스

<!-- 2017-10-31 11:00:00 AEDT/1509408000 --> <row><v>NaN</v><v>NaN</v><v>NaN</v><v>NaN</v></row> 
에 대해 다음이를 LASTUPDATE 모든 필드에 대한 데이터 만 표시와 같은을 업데이트
1509386401:10876.9:3446.22:18489.2:19.0 

예상

파이썬 문제가 있는지 확실하지 않습니다 - rrdtool 이해 문제 일 가능성이 큽니다. 어떤 포인터 주셔서 감사합니다.

답변

0

문제는 RRDTool 타임 스탬프 은 (는)이 증가해야한다는 것입니다. 즉, 과거로 돌아가는 RRA의 길이를 늘리면이 지점에 직접 데이터를 넣을 수 없으므로 시간이 갈수록 끝에 새 데이터가 추가됩니다. 또한 새 RRD를 만들 때 '마지막 업데이트'시간의 기본값은 NOW입니다.

이전 타임 스탬프의 로그가있는 경우 완료하기 전에 '현재'업데이트를 수행하지 않는 한이 기록을 추가 할 수 있어야합니다.

먼저 첫 번째 기록 업데이트보다 '시작'시간이 더 긴 RRD를 만듭니다.

그런 다음 모든 시간 기록 업데이트를 적절한 시간 소인으로 시간순으로 처리하십시오.

마지막으로 정기적 인 '지금'업데이트를 시작할 수 있습니다.

이전 기록 데이터 입력을 모두 실행하기 전에 정기적으로 cronjob에 새 데이터를 추가하는 것이 좋습니다. 그렇지 않으면 기록 타임 스탬프 이후의 시작 시간으로 RRD를 만들었습니다.

+0

감사합니다. 위의 문제점 중 일부는 연속 RESIZE 명령을 사용하여 발생합니다. '1755 rrdtool 스크립트/dailySolax 크기 조정.rrd 0 GROW 1000 1756 rrdtool resize scripts/dailySolax.rrd 1 GROW 1000 1757 rrdtool resize scripts/dailySolax.rrd 2 GROW 1000' 모든 RRA의 행 수가 올바르게 증가하지 않았습니다. 그러나 이제 새 RRD를 만들고 내 파이썬 스크립트를 실행하면 네 번째 데이터 필드가 업데이트되지 않습니다. –

+0

내가 사용하는 경우 : 'rrdtool update dailySolaxTemp.rrd 1508371201 : 10740.95 : 3430.97 : 18259.2 : 58.0' rrd에서는 "58.0"이 "NaN"과 같은 일을합니다. 업데이트 라인에 오류가 있으면 그것을 볼 수 없습니다. –

+0

Ok rrd 매개 변수를 조정했는데 문제가 발생하는 줄 바꿈 또는 CR 문자가 있음을 알리는 오류가 나타납니다. –