Open Source im professionellen Einsatz
Linux-Magazin 06/2004

Messdaten mit RRDtool und Perl verwalten

Daten ausgesiebt

Ständig reinrieselnde Messdaten müssen die Festplatte nicht vollstopfen. Bei älteren Werten genügt ein Überblick, während fürs aktuelle Geschehen alle Details wichtig sind. Eine Round-Robin-Datenbank wie RRDtool vergisst unwichtige Werte, das System bleibt bis zum Sankt-Nimmerleins-Tag wartungsarm.

584

Das von Tobias Oetiker entwickelte Programm RRDtool[2] hat sich zum Quasi-Standard bei der Speicherung von Netzwerk-Überwachungsdaten gemausert. Es legt seine Daten in so genannten Round-Robin-Datenbanken (RRD) ab, die von Frontends wie Cacti[3] genutzt werden. Ein Round-Robin-Archiv (RRA) stellt man sich am besten wie in Abbildung 1 dargestellt vor.

Abbildung 1: Das Round-Robin-Archiv hält eine feste Anzahl von Datenwerten vorrätig und überschreibt alte Werte, um Platz für neue zu schaffen.

Dort liegen auf einer begrenzten Anzahl von Speicherplätzen die bei einem Webserver ermittelten Lastwerte, angefangen beim Wert 6,1 um 01:00 Uhr (oben Mitte), dann - im Uhrzeigersinn - eine Last von 2,0 um 01:01 Uhr, bis schließlich zu dem um 01:04 Uhr gespeicherten Wert 2,4. Der Zeiger deutet auf den zuletzt aktualisierten Eintrag.

Das Ergebnis der nächsten Messung passt aber nicht mehr ins Archiv - deshalb wird, wie Abbildung 2 zeigt, die Messung von 01:00 Uhr mit dem neuen Wert 4,1 von 01:05 Uhr überschrieben. Nun ist der Admin aber nicht nur an Messwerten der letzten 5 Minuten interessiert, sondern möchte auch sehen, wie sich die Rechnerlast über die letzten dreißig Tage oder die zurückliegenden zwölf Monate entwickelt hat.

Gewollt unscharf

Auch dafür braucht er keine riesigen Datenmengen vorzuhalten, denn über größere Zeiträume hinweg ist eine gewisse Unschärfe akzeptabel. Der Trick ist, weitere RRAs anzulegen, die die Durchschnittslast (oder die Höchstlast, ganz nach Geschmack) pro Stunde für den letzten Tag oder pro Tag für das laufende Jahr aufnehmen. Sind diese Round-Robin-Archive erst einmal in der RRD-Datei angelegt, füttert RRDtool neue Messwerte hinein, und zwar per Kommandozeilenaufruf oder über die mitgelieferte Perl-Schnittstelle.

Der darunter liegende Datenbankmotor sorgt automatisch dafür, dass die Kreise mit den verschiedenen Granularitäten die richtig aufpolierten Daten erhalten. Spätere Abfragen liefern auch die Werte über einen angegebenen Zeitraum in der höchsten verfügbaren Genauigkeit und RRDtool zeichnet davon sogar formschöne Grafiken.

RRDtool in Perl-Skripten verwenden

Die Definition einer Round-Robin-Datenbank besteht aus einer oder mehreren Datenquellen (DS, Data Sources). Für jede einzelne Quelle gibt der RRD-Administrator beim Anlegen der Datenbank vier Parameter an: Einen Namen, einen Datenquellentyp, die Breite des Eingabe-Zeitfensters sowie die minimalen und maximalen Eingangswerte.

Der Name (zum Beispiel »load« oder »mem_usage«) identifiziert die Eingabedatenquelle in der RRD eindeutig. Über den Datenquellentyp (DST, Data Source Type) legt der Admin fest, ob die Eingabewerte einfach übernommen werden (»GAUGE«) oder von einem stetig wachsenden Zähler stammen, den RRDtool bei einem Überlauf sinnvoll behandelt (»COUNTER«). Das Programm fängt den Überlauf dann ab und nutzt den zuletzt gespeicherten Wert, um die Zählreihe fortzuführen.

Purzeln in der durch die Breite des Eingabe-Zeitfensters bestimmten Zeit mehrere Daten herein, wird der Mittelwert berechnet und abgespeichert. Trifft in diesem Zeitraum kein einziger Wert ein, speichert RRDtool ein »na« (not available). Alle Messwerte, die jenseits der minimalen und maximalen Eingangswerte liegen, ignoriert es.

Folgender Perl-Code legt eine Datenbank an, die ihre Einträge aus der Eingabequelle namens »load« bezieht, die wiederum alle 60 Sekunden Infos über die aktuelle Rechnerlast liefert:

use RRDs;

RRDs::create(
  "/tmp/load.rrd", "--step=60",
  "--start=" . time() - 10,
  "DS:load:GAUGE:90:0:10.0",
  "RRA:MAX:0.5:1:5",
  "RRA:MAX:0.5:5:10");


Leider gibt es noch kein intuitives objektorientiertes Interface für RRDtool, der etwas kryptisch anmutende Code ist daher sehr erklärungsbedürftig. In der Datei »/tmp/load.rrd« legt RRDtool die Datenbank ab. Das vorgegebene Eingabeintervall ist 60 Sekunden (über die Option »--step=60«). In diesen Zeitabständen werden später die Daten in das Archiv eingespeist.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Kurven-Reich

    Würmer, Mailbomben und Benutzer, die MByte-große Powerpoint-Dateien durch die Mail-Landschaft schicken, liefern jedem Postfix-Administrator genug Gründe, seinem Schätzchen auf die Finger zu schauen.

  • Selbst ist der Admin

    Fällt ein Server aus, sollten nicht die User, sondern Tools dem Admin das mitteilen. Besser wäre, wenn er schon die Frühformen abnormen Serververhaltens erkennt. Das vorgestellte Toolset überwacht Server und Dienste und fertigt Lastanalysen an. Anders als fertige Lösungen sind die gezeigten Skripte sehr flexibel.

  • Tipps und Tricks

    Zwischen Turnschuhadministration und Automatisierung lauern Gräben und Klippen. Linux-Magazin-Autoren plaudern aus dem Nähkästchen und verraten ihre Kniffe.

  • Klimaforschung

    Hält sich die Hitze noch im Rahmen? Beim Überwachen der Zimmertemperatur mit einem preiswerten USB-Sensor bietet das Holt-Winters-Verfahren aus dem RRDTool-Werkzeugkasten einen Ansatz, um gewöhnliche Schwankungen von Ausreißern zu unterscheiden.

  • E-Werke

    Digitale Multimeter messen nicht nur Strom und Spannung, sondern auch Kapazität und Temperatur. Es gibt sogar in der 50-Euro-Preisklasse einige, die mit der seriellen Schnittstelle eines PC reden. Mit einfachen Perl-Skripten lassen sich hier die Daten auslesen und grafisch aufbereiten.

comments powered by Disqus

Ausgabe 08/2016

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.