Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2004  »  06  »  Daten ausgesiebt  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

RRD auf die Finger geschaut

Listing 1 ist ein Testskript, das eine RRD definiert, dann künstlich erzeugte Werte eingibt und die Archivdaten abfragt. Für reproduzierbare Ergebnisse nutzt das Skript statt der Systemzeit den Zeitstempel »1080460200«. Tipp: RRD fängt wild zu runden an, falls keine durch 60 (und für das Fünf-Minuten-Archiv sogar durch 300) teilbare Zahl verwendet wird. Das mittelt sich zwar auf Dauer, aber für Demonstrationszwecke eignen sich glatte Werte besser. Die Zeilen 17 bis 22 erzeugen die RRD wie oben beschrieben.

Die »for«-Schleife ab Zeile 26 läuft von 0 bis 40 und schiebt mit »RRDs::update()« die folgenden Zeitstempel-Lastwert-Kombinationen als Strings in die RRD:

1080460200:2
1080460260:2.1
1080460320:2.2
...

Im Normalbetrieb ist es möglich, den Zeitstempel nicht zu übergeben, dann nimmt das »RRDs«-Modul die aktuelle Systemzeit. Bei den übergebenen Werten handelt es sich um künstlich erzeugte Beispielwerte für die Systemlast, das Testskript startet einfach bei »2« und erhöht den Wert pro Schritt um »0.1«.

Auswertung starten

Um ein Archiv abzufragen, nimmt »RRDs::fetch()« das gewünschte Abfrageintervall mit der beim Abspeichern verwendeten CF entgegen und ermittelt daraus das Archiv mit der maximal verfügbaren Auflösung. Ist eine CF angegeben, für die kein Archiv existiert, gibt das Modul eine Fehlermeldung zurück. »RRDs::fetch()« speichert in Zeile 47 die Datenpunkte des Archivs in »$data«, einer Referenz auf ein Array, das wiederum Referenzen enthält, die auf Arrays mit den Floating-Point-Datenwerten zeigen. Weitere von »RRDs::fetch()« zu- rückgelieferte Wer-te sind »$dbstart« (Startzeitpunkt die- ser RRD), »$step« (Zeitabstand der Datenpunkte im Archiv) und »$names« (Referenz auf ein Array mit den Namen aller Datenquellen).

»$step« ist übrigens nicht unbedingt der mit »--step« eingestellte Datensammelabstand der Datenbank. Für ein Archiv, das mehrere PDPs zu einem Archivpunkt zusammenfasst, ergibt sich »$step« aus der Multiplikation von Sammelabstand und der Anzahl der pro Archivpunkt erfassten Punkte.

Zeile 36 von Listing 1 startet mit Hilfe der in Zeile 42 definierten Funktion »fetch()« eine Abfrage im Zeitfenster der letzten fünf Minuten vor dem Ende. Sie fördert Folgendes zutage:

Last 5 minutes:
1080462300: N/A
1080462360: 5.6
1080462420: 5.7
1080462480: 5.8
1080462540: 5.9
1080462600: 6

Listing 1:
»rrdtest«

01 #!/usr/bin/perl
02 ###########################################
03 # Feed test data to RRD
04 # Mike Schilli, 2004 (m@perlmeister.com)
05 ###########################################
06 use warnings;
07 use strict;
08 
09 use RRDs;
10 
11 my $DB    = "/tmp/mydemo.rrd";
12 my $start = 1080460200;
13 my $dst   = "MAX";
14 my $nof_iterations = 40;
15 my $end   = $start + $nof_iterations * 60;
16 
17 RRDs::create(
18     $DB, "--step=60",
19     "--start=" . ($start-10),
20     "DS:load:GAUGE:90:0:10.0",
21     "RRA:$dst:0.5:1:5",
22     "RRA:$dst:0.5:5:10",
23 ) or
24     die "Cannot create rrd ($RRDs::error)";
25 
26 for(0..$nof_iterations) {
27     my $time = $start + $_ * 60;
28     my $value = 2 + $_ * 0.1;
29 
30     RRDs::update(
31         $DB, "$time:$value") or
32          die "Cannot update rrd ($!)";
33 }
34 
35 print "Last 5 minutes:n";
36 fetch($end - 5*60, $end, $dst);
37 
38 print "Last 30 minutes:n";
39 fetch($end - 30*60, $end, $dst);
40 
41 ###########################################
42 sub fetch {
43 ###########################################
44     my($start, $end, $dst) = @_;
45 
46     my ($dbstart, $step, $names, $data) =
47       RRDs::fetch($DB, "--start=$start",
48         "--end=$end", $dst);
49 
50     foreach my $line (@$data) {
51         print "$start: ";
52         $start += $step;
53         foreach my $val (@$line) {
54           $val = "N/A" unless defined $val;
55           print "$valn";
56         }
57     }
58 }

Das Modul »RRDs« hat hierzu das Kurzzeitarchiv mit 60 Sekunden Datenabstand gewählt. Da es immer nur fünf Werte vorhält, ist der älteste Wert »na«. Fragt der Anwender, wie etwa in Zeile 39, die Funktion »RRDs::fetch()« hingegen nach Werten für ein breiteres Fenster, beispielsweise für die letzten 30 Minuten der Messreihe, enthält das Ergebnis Werte aus dem zweiten Archiv, das die Daten im 300-Sekunden-Abstand speichert:

Last 30 minutes:
1080460800: 3
1080461100: 3.5
1080461400: 4
1080461700: 4.5
1080462000: 5
1080462300: 5.5
1080462600: 6

Bei den eingetragenen Werten handelt es sich um die im jeweiligen Intervall gemessenen Höchstwerte, da das zweite Archiv mit der CF »MAX« definiert ist. Das Modul »RRDs« wird übrigens nicht versuchen, Werte aus einer Kombination von Archiven darzustellen, es wählt ein passendes Archiv aus und nutzt dessen Granularität für eine Ergebnisreihe mit konstanten Zeitabständen.

Das Skript »rrdload« in Listing 2 zeigt eine praktische Anwendung von RRDtool. Folgende Cronjob-Konfiguration startet es alle fünf Minuten:

*/5 * * * * /home/mschilli/bin/rrdload -u

Mit der Option »-u« aufgerufen frischt es ein Round-Robin-Archiv mit dem Messwert der aktuellen Systemlast auf und verabschiedet sich dann wieder. Zur grafischen Auswertung ruft der Administrator es mit der Option »-g« auf. Es legt dann eine schöne Grafik wie in Abbildung 4 als PNG-Datei im Dokumentenpfad des Webservers ab. Auf diese Weise kontrolliert der Autor beispielsweise auf dem Shared-System Perlmeister.com die Systemlast.


Abbildung 4: Diese mit RRDtool erstelle Grafik zeigt die Last auf dem Internet-Host perlmeister.com, und zwar über eine ganze Nacht verteilt.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Selbst ist der Admin Monitoring: Server- und Netzüberlastungen mit Bordmitteln ermitteln
Schädlingsbekämpfung Perl-Skript bewahrt Webforen und Blogs vor Spamflut
Persönlicher Spürhund Desktop-Suche mit Perl-Skript
Geiz ist geil Perl-Skript überwacht Preise bei Amazon
Ist das nicht cool? Temperatursensoren mit Perl auslesen
E-Werke Perl misst Stromverbrauch mit Multimeter
Whitepaper
Daten Migration - Eine Publikation von Bloor Research

Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.

Download PDF (Registrierung erforderlich)
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (0)