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.
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)
|
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
| 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)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|