RRDTool

Auf der Seite MRTG Monitoring wurde schon mehrfach das Programm RRDTOOL aufgeführt worden. Auch andere Programme wie z.B. NTOP, und viele andere (Siehe RRDWorld auf http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/rrdworld/) nutzen RRDTOOL. Also ist es an der Zeit diese Komponente etwas genauer unter die Lupe zu nehmen:

Warum RRDTool ?

Eine der wesentlichen Funktionen von MRTG ist das Wachstum der Datenbank. Die Datenbank bleibt nämlich immer gleich groß, das MRTG bei jedem Durchlauf sehr alte Werte einfach zusammenfasst. So ist eines der größten Probleme umgangen, dass die Festplatte mit Aufzeichnungen voll geschrieben wird. Der Preis dieses Verfahrens ist natürlich, dass Informationen je weiter Sie in der Vergangenheit liegen immer ungenauer werden. Kann MRTG z.B. den letzten Tag noch auf 5 Minuten genau auflösen, so sind Aussagen von Werten vor einigen Monaten ungenauer aber für eine Trendabschätzung vollkommen ausreichend.

Dieses Prinzip von MRTG wurde von Herrn Oetiker weiter entwickelt und steht als RRDTOOL als eigenständige Software bereit. RRDTOOL selbst kann also nicht losgelöst verwendet werden, sondern wird seinerseits in andere Programme eingebunden. Dabei sind im wesentlichen folgende Funktionen verfügbar:

  • Anlegen einer Datenbank
  • Hinzufügen von Werten
  • Erstellen von Grafiken

Um RRDTOOL daher nutzen zu können, müssen Sie entweder eine vorgefertigte Software nutzen oder selbst entsprechende Programme oder Skripte schreiben. RRDTOOL steht dabei als EXE-Programme oder PERL-Modul zur Verfügung. Diese drei wesentlichen Tätigkeiten möchte ich an Hand eines einfachen Beispiels für Windows erläutern:

Anlegen einer Datenbank

Der erste und einmalige Schritt ist die Anlage einer Datenbank. RRDTOOL wird dazu unter Angabe eines Dateinamens gestartet. Zusätzlich müssen die Werte angegeben werden,  die in der Datenbank gespeichert werden sollen. In einer Datenbank können problemlos auch mehrere Werte parallel gespeichert werden, so dass Sie zur Ablage von 100 Werten nicht 100 Dateien nutzen müssen. Ein Aufruf könnte z.B.: so aussehen (Alles in einer Zeile):

rrdtool create cpu.rrd --start 1023654125 --step 120
        DS:CPULast:GAUGE:240:0:100
        RRA:AVERAGE:0.5:12:5

(Achtung: Die Zeilenumbrüche sind zur Lesbarkeit addiert worden) Die Bedeutung der einzelnen Parameter ist:

  • create cpu.rrd
    Lege eine Datenbank mit dem Namen CPU.RRD an.
  • --start xxx --step xxx
    Zeit ab wann die Datenbank beginnt (UNIX Ticks) und wie oft ein neuer Wert (120sek) eingetragen wird.
    Wenn Sie später häufiger Werte eintragen wollen, ignoriert RRDTOOL diese. Fehlen Werte, so werden diese interpoliert.
  • DS:"varname":<typ>:Heartbeat:min:man
    Definition der Variable mit Name, dem Typ, wie viele Sekunden ein Wert Ausbleiben muss ehe er als "unbekannt" gespeichert wird und in welchem Bereich (Min/Max) sich der Wert bewegt.
  • RRA:Konsolidierung:
    Hier wird angegeben, wie viele Werte (12) in die nächste Zeile übernommen werden und wie viele dieser Stufen (5) vorgehalten werden. D.h. bei diesem Beispiel wird alle 100 Sekunden ein Wert aufgenommen. Aus 12 Werten wird eine Summe gebildet. Aus 12 Summen dann wieder die nächste Stufe bis die 5te Stufe erreicht ist.

Das klingt alles erst mal schrecklich aber SQL und andere Datenbanken machen es einem auch nicht einfacher.

Werte addieren

Nachdem die Datenbank nun mal erzeugt ist, müssen wir diese mit Daten füllen. Dazu wird ebenfalls wieder RRDTOOL aufgerufen.

RRDTOOL Update cpu.rrd N:50

Damit sagen wir RRDTOOL, dass er für den aktuellen Zeitpunkt den Wert 50 eintragen soll. Wir können nun immer wieder (idealer weise alle 100 Sekunden im Beispiel) RRDTOOL aufrufen, um weiter Werte in die Datenbank zu bringen.

Wenn ich Daten aus einer CSV-Datei importieren will, dann mache ich das aktuell über eine For-Schleife und starte RRDTool entsprechend oft. Allerdings muss man dann das "N" durch einen Zeitstempel ersetzen.

Daten ausgeben

Die Daten in der Datenbank können wir auf zwei Arten ausgeben lassen;

  • Textausgabe
    Dies ist besonders hilfreich, wenn Sie noch am experimentieren sind und eigentlich wissen wollen, welche Zahlen nun in der Datenbank stehen
  • Grafik
    Viel schöner ist die Möglichkeit mit RRDTOOL fertige Grafiken zu erzeugen. In Verbindung mit RRD_CGI können diese sogar on the fly erzeugt werden.

Die Textausgabe können Sie z.B. wie folgt erzeugen:

rrdtool dump cpu.rrd

RRDTool gibt ihnen eine einfache Liste der Werte als XML-Format aus. Die Grafikausgabe ist sehr viel leistungsfähiger. Dazu sollten Sie direkt die Referenz auf http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/manual/rrdgraph.html oder einige Beispiele bestehender Lösungen lesen.

Installation (Windows)

Je nach der Quelle der Installation finden Sie ein Windows-ZIP-Archiv, in dem eine eigenständige RRDTOOL.EXE einfach drin liegt oder sie finden einen Installer, der RRDTOOL per GUI auf ihrem Windows PC installiert. Natürlich gibt es RRDTOOL auch als Unix-Version. da kommt es ja ursprünglich her.

Interessanterweise ist die Version 1.3.8 nicht mehr als EXE alleine lauffähig, sondern benötigt auch die DLLs. Die Version 1.2.30 ist allein mit der EXE zufrieden.

Achtung: Zumindest ein RRDTool-Installiert hat mir meine globale PATH-Variable durch "C:\Program Files (x86)\RRDtool" ersetzt, was natürlich einiges gestört hat.

# Windows 7 Standard
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

Prüfen Sie daher vorher in der Systemsteuerung die Umgebungsvariablen

RRDTool und PowerShell

RRDTool ist unter Windows eine EXE und kann natürlich aus jedem Programm gestartet werden. Es ist leider kein COM-Object oder .NET Modul.

Weitere Links