2017-11-03 9 views
0

Mein erster Beitrag hier, also ich hoffe, ich war nicht zu ausführlich. Ich habe festgestellt, dass ich Datenpunkte verlor, da ich nur 10 Zeilen in meiner rrdtool-Konfiguration hatte und von einer Backup-Quelldatei mit älteren Daten aktualisieren wollte.Aktualisierung der rrdtool Datenbank

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 

und die Update-Linie in Python ist

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

Diese alle Originaldaten zur Eingabe fein gearbeitet (von crontabbed Website schabt), aber: Nachdem die Zeilen Festsetzung Zahl wurde die Config mit erstellt Wie gesagt, ich habe Daten verloren und wollte die früheren Datenpunkte wieder hinzufügen. Aus meiner Backup-Quelle hatte ich eine einfache Textdatei mit Zeilen wie

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

, wo das erste Feld der Zeitstempel ist. Und verwendet dann diesen Code in den Zeilen zu lesen für die Updates:

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) 

Wenn es nicht richtig ich auf eine leere Datenbank versuchte es noch einmal mit einer Kopie der aktuellen Version der Datenbank funktionierte die gleiche Konfiguration erstellt. In jedem Fall führt das Update nur zu den Zeitstempeldaten in der Datenbank und keine Daten von den anderen Feldern. Python ist nicht beschweren und ich erwartete

1509386401:10876.9:3446.22:18489.2:19.0 

würde das gleiche aktualisieren ebenso wie

N:10876.9:3446.22:18489.2:19.0 

Der Dump zeigt die lastupdate Daten für alle Felder, aber diese dann für die RRA-Datenbank

<!-- 2017-10-31 11:00:00 AEDT/1509408000 --> <row><v>NaN</v><v>NaN</v><v>NaN</v><v>NaN</v></row> 

Nicht sicher, ob ich ein Python-Problem habe - wahrscheinlicher ein rrdtool-Verständnisproblem. Danke für irgendwelche Hinweise.

Antwort

0

Das Problem, das Sie haben, ist, dass RRDTool Zeitstempel muss erhöht werden. Dies bedeutet, dass Sie, wenn Sie die Länge Ihrer RRAs (zurück in die Vergangenheit) erhöhen, keine Daten direkt in diese Punkte einfügen können - fügen Sie nur neue Daten am Ende hinzu, wenn die Zeit zunimmt. Wenn Sie eine neue RRD erstellen, wird die Zeit für die letzte Aktualisierung standardmäßig auf NOW gesetzt.

Wenn Sie ein Protokoll Ihres vorherigen Zeitstempels haben, dann sollten Sie in der Lage sein, dieses Protokoll hinzuzufügen, solange Sie keine "jetzt" -Updates durchführen, bevor Sie damit fertig sind.

Erstellen Sie zuerst die RRD mit einer "Startzeit" vor der ersten historischen Aktualisierung.

Dann verarbeiten Sie alle historischen Aktualisierungen in chronologischer Reihenfolge mit den entsprechenden Zeitstempeln.

Endlich können Sie Ihre regelmäßigen 'jetzt' Updates machen.

Ich vermute, was passiert ist, dass Sie Ihren regulären Cronjob neue Daten hinzugefügt hatten, bevor Sie alle Ihre historischen Dateneingabe ausgeführt haben - oder Sie erstellten die RRD mit einer Startzeit nach Ihren historischen Zeitstempeln.

+0

Danke für Ihre Antwort. Scheint so, als ob einige meiner obigen Probleme von der Verwendung aufeinanderfolgender RESIZE-Befehle, z. '1755 rrdtool resize scripts/dailySolax.rrd 0 GROW 1000 1756 rrdtool Größe ändern scripts/dailySolax.rrd 1 GROW 1000 1757 rrdtool Größe ändern scripts/dailySolax.rrd 2 GROW 1000' , die die Anzahl der Zeilen nicht korrekt für alle RRAs wuchs. Jetzt aber, wenn ich eine neue RRD erstellen und mein Python-Skript ausführen, wird das vierte Datenfeld nicht aktualisiert. –

+0

Wenn ich verwende: 'rrdtool Update dailySolaxTemp.rrd 1508371201: 10740.95: 3430.97: 18259.2: 58.0' macht es das gleiche und" 58.0 "wird" NaN "in der Rrd. Wenn ich einen Fehler in der Update-Zeile habe, kann ich es nicht sehen. –

+0

Ok Ich habe eine Anpassung an die Rrd-Parameter vorgenommen und jetzt bekomme ich einen Fehler, der darauf hindeutet, dass ich einige Newline- oder CR-Zeichen habe, die Probleme verursachen. –

Verwandte Themen