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

Graphen zeichnen</>

Der Code ab Zeile 21 in Listing 2 legt drei Archive an. Das erste nimmt 288 Datenpunkte auf, stellt also genügend Plätze bereit, um die alle fünf Minuten ermittelten Werte einen Tag lang zu speichern (24á12). Das zweite Archiv sucht die Spitze aus zwölf Messpunkten, also eine Stunde (12á5 Minuten = 60 Minuten) lang eingehende Daten, und speichert 168 davon. Später steht die jeweils letzte Woche im Stundentakt zur Abfrage bereit (168 = 24á7). Das dritte und letzte Archiv findet noch die Tagesspitzen und hält 365 davon für die Jahresbilanz vorrätig.

Listing 2:
»rrdload«

01 #!/usr/bin/perl
02 ###########################################
03 # rrdload -- Measure CPU load over time
04 # Mike Schilli, 2004 (m@perlmeister.com)
05 ###########################################
06 use warnings;
07 use strict;
08 
09 use RRDs;
10 use Getopt::Std;
11 
12 getopts("ug", my %opts);
13 
14 my $DB     = "/tmp/load.rrd";
15 my $SERVER = "/www/htdocs";
16 my $UPTIME = "uptime";
17 
18 if(! -f $DB) {
19   RRDs::create($DB, "--step=300",
20     "DS:load:GAUGE:330:U:U",
21     "RRA:MAX:0.5:1:288",
22     "RRA:MAX:0.5:12:168",
23     "RRA:MAX:0.5:288:365",
24   ) or die "Create error: ($RRDs::error)";
25 }
26 
27 if(exists $opts{u}) {
28     my $uptime = `$UPTIME`;
29     my ($load) = ($uptime =~ /(d.d+)/);
30 
31     RRDs::update($DB, time() . ":$load") or
32         die "Update error: ($RRDs::error)";
33 }
34 
35 if(exists $opts{g}) {
36   RRDs::graph("$SERVER/load.png",
37     "--vertical-label=Load perlmeister.com",
38     "--start=" . rrd_start_time(),
39     "--end=" . time(),
40     "DEF:myload=$DB:load:MAX",
41     "LINE2:myload#FF0000") or
42         die "graph failed ($RRDs::error)";
43 }
44 
45 ###########################################
46 sub rrd_start_time {
47 ###########################################
48 
49     my ($start,$step,$names,$data) =
50                    RRDs::fetch($DB, "MAX");
51 
52     foreach my $line (@$data) {
53       if(! defined $line->[0]) {
54           $start += $step;
55           next;
56       }
57       return $start;
58     }
59 }

Die erzeugte Grafik im PNG-Format erzeugt das Skript mit Hilfe der Funktion »RRDs::graph()«. Sie erhält über »--vertical-label« noch eine Beschriftung für die Lastachse. Die beiden Argumente

"DEF:myload=$DB:load:MAX",
"LINE2:myload#FF0000"

bestimmen, dass das »RRDs«-Modul aus der in »$DB« angegebenen Datei Ergebnisdaten bezieht und diese der Graphen- Variablen »myload« zuordnet. Es werden Werte der Datenquelle »load« gesucht, in einem Archiv, das zum vorher angegebenen Zeitraum (»--start« bis »--end«) Daten mit der Consolidation Function »MAX« gewonnen hat.

RRDtool hat die zweifelhafte Angewohnheit, die Datenbank zu Beginn zufällig zu füllen und über die Startzeit eine falsche Auskunft zu geben - daher greift die ab Zeile 46 definierte Funktion »rrd_start_time()« ein und holt so lange Daten heraus, bis etwas Vernünftiges erscheint. Das Datum dieses Messwerts gibt sie zurück und die »graph«-Funktion nimmt es entgegen.

Die in Zeile 50 verwendete Funktion »RRDs::fetch()« geht ohne Angabe einer Startzeit genau einen Tag zurück. Wer einen längeren Zeitraum im Graphen betrachten möchte, bestimmt mit »--start« einen anderen Zeitpunkt. Negative Werte setzen relative Zeitdifferenzen zur gegenwärtigen Uhrzeit. Mit »"--start", -365*24*3600« kommen stets alle verfügbaren Daten zur Anzeige, allerdings in der gröbsten Auflösung. Den Graphen malt die Funktion elegant ganz in Rot (»#FF0000«) und wegen »LINE2« genau zwei Pixel stark.

Das Perl-Modul »RRDs«, das eine Shared Library von »RRDtool« nutzt, gibt es nicht im CPAN, es liegt der RRD-Distribution bei. Um es zu installieren, lädt und entpackt der Admin den neuesten Source-Tarball von[2] und kompiliert ihn per »./configure; make«. Im Unterverzeichnis »perl-shared« findet sich die Distribution von »RRDs.pm«, die Installation erfolgt mit »perl Makefile.PL; make install«. (mwe)

Infos

[1] Listings zu diesem Artikel: [ftp://ftp.linux-magazin.de/pub/listings/magazin/2004/06/Perl]

[2] RRDtool: [http://www.rrdtool.com]

[3] Achim Schrepfer, "Kurven-Schau": Linux-Magazin 09/03, S. 54

[4] Charly Kühnast, "Netz-Monitoring": Linux-Magazin 01/04, S. 28

Der Autor

Michael Schilli arbeitet als Software-Engineer für AOL/Netscape in Mountain View, Kalifornien. Er hat "Goto Perl 5" (deutsch) und "Perl Power" (englisch) für Addison-Wesley geschrieben und ist unter [mschilli@perlmeister.com] zu erreichen. Seine Homepage ist [http://perlmeister.com].


Copyright © 2002 Linux New Media AG

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
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

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

Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (0)