2017-04-07 2 views
0

Ich zeichne ein Diagramm, das Variablen aus mehreren Rrd-Dateien enthält. Ich zeige auch den letzten Wert jeder Variablen in der Grafik an. Wenn ich zum Beispiel "CDEF: A = a, UN, 0, a, WENN, 8, " verwende, dann drucke den letzten Wert der Variablen A in der Grafik, hängt davon ab, wann ich die Grafik lade, der letzte Wert von A wird manchmal 0, obwohl der letzte aktualisierte Wert in der Rrd-Datendatei nicht 0 ist. Ich verwende rrdtool 1.4.8. Dies passiert nicht, wenn ich A mit "CDEF: A = a, 8," definiere.letzter Wert wird 0 manchmal in Rrd-Diagramm, wenn IF und UN verwendet, um unbekannten Wert auf 0

Antwort

0

Dies liegt daran, dass Sie mehrere RRD-Dateien verwenden und zwischen ihrer Aktualisierung und Ihrer Abfrage eine Race-Bedingung besteht. Ich habe gesehen, dass dies in Graphen passiert ist, die von "Routers2" über MRTG-Daten generiert wurden, und das Programm hat spezielle Berechnungen hinzugefügt, um dies zu vermeiden.

Wenn Sie Ihr Diagramm ausführen, basiert der letzte Punkt auf der aktuellen Zeit. Der Zeitbereich, in dem wir uns derzeit befinden, wurde jedoch möglicherweise nicht in einer der Quell-RRD-Dateien aktualisiert.

Beispiel: Die Daten werden alle 5 Minuten aktualisiert.

  • Um 11:59 Uhr wird die RRD-Datei A aktualisiert und der 11:55-Bucket ist nun fertig.
  • Um 12:01, RRD-Datei B wird aktualisiert, und die 12:00 Eimer ist jetzt abgeschlossen.
  • Um 12:03 Uhr wird die Funktion aufgerufen. Das Ende des Diagramms ist auf 12:00 eingestellt, da dies die neuesten verfügbaren Daten sind.
  • Für die RRD-Datei A sind die neuesten verfügbaren Daten jedoch 11:55, da das Update 12.04 noch nicht verfügbar war. Der letzte Datenpunkt im Diagramm ist unknown.
  • Deshalb erhalten Sie gelegentlich eine unbekannte am Ende eines Ihrer Datensätze. Dies bedeutet, dass der RRD, der diese Datenquellen aktualisiert, am Ende des Zeitfensters, in dem Sie sich gerade befinden, ist.

    Wenn Sie den Test für unbekannt nicht haben, wird der Graph einfach nicht den fraglichen Punkt anzeigen (wie unbekannte Punkte werden nicht geplottet). Wenn Sie genau hinsehen, werden Sie sehen, dass die Linie im Diagramm einen Pixel früher endet.

    Eine Möglichkeit, dies programmgesteuert zu vermeiden, besteht darin, die -Zeit aller Komponenten-RRD-Dateien abzurufen und dann die frühesten als Endzeit im Diagramm zu verwenden. Dies ist die Art und Weise, wie die routers2 Software dieses Problem vermeidet.