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.
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.






