Open Source im professionellen Einsatz
Linux-Magazin 05/2006
© photocase.com

© photocase.com

Nagios-Plugins im Eigenbau

Holzauge, sei wachsam

Mit Hilfe selbst geschriebener Plugins spannt der clevere Perl-Programmierer das Netzwerk-Monitoring-Tool Nagios für vielfältige Überwachungsaufgaben ein.

848

Was tun, wenn die technisch eher desinteressierte Lebenspartnerin aus dem Nebenzimmer ruft: "Mein Internet geht nicht!" Mühsam zu erforschen, ob der Router ordnungsgemäß mit dem Serviceprovider kommuniziert und der DNS-Server erreichbar ist, wäre eine Möglichkeit. Viel einfacher gestaltet sich die Fehlersuche allerdings, wenn eine Software die wichtigsten Funktionen stets im Blick behält und das Ergebnis auf einer Webseite wie beispielsweise in Abbildung 1 präsentiert.

Abbildung 1: Die Nagios-Übersichtsseite zeigt an, dass lokale Tests fehlerlos durchlaufen, aber der Router und alle hinter ihm liegenden Systeme nicht ansprechbar sind.

Für solche Monitoring-Aufgaben bietet sich das Open-Source-Tool Nagios an. Die Entwickler stellen auf [5] viele Plugins bereit, die Websites, Datenbanken, Netzwerke und vieles mehr überwachen. Für spezielle Bedürfnisse schneidert sich der Admin einfach eigene Plugins nach Maß.

Nagios kann zum Beispiel laufend prüfen, ob ein Hostingprovider dem Kunden einen performanten Server mit genügend Spielraum zur Verfügung stellt, statt die vermieteten Rechner mit zu vielen Websites zu überfordern. Hat die Nagios-Installation auf dem lokalen Rechner aus Sicherheitsgründen keinen direkten Shellzugang zum fraglichen Host beim Provider, installiert der Kunde dort einfach einen Agenten.

IO-Statistik

Dafür eignet sich das Skript »iostat.cgi« (Listing 1), abgelegt im CGI-Verzeichnis des zu untersuchenden Webservers. Auf einen HTTP-Request hin ruft es das Kommando »iostat« auf und sendet dessen Ergebnisse zurück an das anfordernde Nagios-Plugin. Dies interpretiert das Ergebnis und teilt der Nagios-Applikation über den Exit-Code mit, ob alle Werte im grünen Bereich liegen oder ein Problem aufgetreten ist (Tabelle 1).

Listing 1:
»iostat.cgi«

01 #!/usr/bin/perl -w
02 use strict;
03 use Sysadm::Install qw(:all);
04 use CGI qw(:all);
05 use Regexp::Common;
06 
07 my($stdout, $stderr, $rc) =
08   tap "iostat", 1, 2;
09 
10 $stdout =~ /avg-cpu.*?avg-cpu/gs;
11 
12 print header();
13 
14 for my $key (qw(user nice sys
15                 iowait idle)) {
16   if($stdout =~
17      /G.*?($RE{num}{real})/gs) {
18        printf "%s %s ", $key, $1;
19   }
20 }

Tabelle 1:
Exit-Werte

 

Exit-Wert

Text

Bedeutung

OK

Alles im grünen Bereich

1

WARNING

Serviceproblem

2

CRITICAL

Kritisches Serviceproblem

3

UNKNOWN

Problem mit dem Plugin

Das CGI-Skript »iostat.cgi« ruft über die Funktion »tap« des CPAN-Moduls Sysadm::Install das Kommando »iostat« mit den Werten 1 und 2 auf (Zeile 8). Wegen des Intervall-Wertes »1« und des Count-Wertes »2« führt es zwei Messungen von CPU-Performance sowie Festplatten-IO durch und erzeugt eine Ausgabe gemäß Abbildung 3.

Die erste Messung gibt Mittelwerte seit dem letzten Reboot zurück, während die zweite die für Nagios interessanteren aktuellen Werte zeigt, die Iostat über eine Sekunde mittelt. Die Spalte »%idle« gibt an, wie lange die CPU frei zur Verfügung stand, und »%iowait« misst, wie lange die CPU auf die Festplatte warten musste. Aus der Sicht des Kunden ist also ein hoher Wert für »%idle« ebenso günstig wie ein möglichst geringer Wert für »%iowait«.

Das Skript (Listing 1) liest die Ausgabe von »iostat«, wirft die erste Messung weg, parst mit dem regulären Ausdruck »{num}{real}« aus dem Regexp::Common-Fundus die Zahlenwerte und gibt (nach dem obligatorischen HTTP-Header) den Text »user 2.99 nice 0.00 sys 0.00 iowait 0.00 idle 96.52« zurück. Die so genannte Zero-Width-Assertion»G« (Zeile 17) sorgt dafür, dass die Regex-Engine nicht jedes Mal zum Textanfang zurückspringt, sondern den Suchvorgang direkt hinter dem letzten Treffer fortsetzt.

Grenzlasten

Auf der Nagios-Seite ruft das Plugin in Listing 2 mit LWP::Simple das gerade vorgestellte CGI-Skript auf dem Server auf, schnappt sich die Ausgabezeile und zerlegt sie mit »split« in Felder, die es im Hash »%values« ablegt. Ist die CPU zu weniger als 50 Prozent verfügbar, meldet das Plugin den Zustand Critical, sind es weniger als 70 Prozent, spricht es nur eine Warnung aus. Gleiches gilt für die gemessenen Iowait-Werte, bei denen die jeweiligen Grenzwerte bei 10 und 20 Prozent liegen.

Listing 2:
»check_iostat«

01 #!/usr/bin/perl
02 ###########################################
03 use strict;
04 use LWP::Simple;
05 use Log::Log4perl qw(:easy);
06 use Nagios::Clientstatus;
07 
08 my $version = "0.01";
09 my $ncli    = Nagios::Clientstatus->new(
10     help_subref    =>
11       sub { print "usage: $0 urln" },
12     version        => $version,
13     mandatory_args => [ "url" ],
14 );
15 
16 my $url = $ncli->get_given_arg("url");
17 
18 my $data = get $url;
19 
20 unless($data) {
21     print "Failed to get $urln";
22     exit $ncli->exitvalue("unknown");
23 }
24 
25 my %values = split ' ', $data;
26 
27 my $status =
28   $values{idle}   < 50 ? "critical" :
29   $values{idle}   < 70 ? "warning"  :
30   $values{iowait} > 20 ? "critical" :
31   $values{iowait} > 10 ? "warning"  :
32                          "ok";
33 
34 print "IOSTAT ", uc($status), " - $datan";
35 
36 exit $ncli->exitvalue($status);

Das Modul Nagios::Clientstatus vom CPAN erleichtert die Arbeit etwas, da es prüft, ob das Plugin alle erforderlichen Parameter erhalten hat. Außerdem versteht die Methode »exitvalue()« auch Strings wie »warning« statt des Zahlenwerts »1« aus der Nagios-Welt. Von der Kommandozeile aus mit »check_iostat -url=http://webserver.com/cgi/iostat.cgi« aufgerufen zeigt das Plugin nun folgende Ausgabe:

IOSTAT OK - user 2.99 nice 0.00 sys 0.00 iowait 0.00 idle 96.52


Nagios wird später das Plugin genauso aufrufen und sowohl den Exit-Wert interpretieren als auch den auf Stdout angegebenen Text anzeigen. Zu beachten ist allerdings, dass Nagios::Clientstatus mindestens Version 2.35 von Getopt::Long benötigt.

Abbildung 2: Mit dieser Darstellung dokumentiert Nagios, wie oft ein System nicht erreichbar war.

Linux-Magazin kaufen

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

Deutschland

Ähnliche Artikel

  • Nagios

    Wer sich für den Platzhirsch unter den Monitoring-Lösungen entscheidet, hat bei der Erst-Inbetriebnahme viel zu lernen und zu tun, kommt dank der vielen Plugins aber auch sehr weit. Läuft irgendwann alles, kann der Admin damit ruhig schlafen.

  • Nagios-Plugin prüft Schreibrechte

    Die Monitoring-Software Nagios lässt sich durch Plugins erweitern. Jüngster Neuzugang der Zubehörsammlung ist Check_writable 1.0, das die Beschreibbarkeit von Verzeichnissen prüft.

  • Nagios-Plugin überwacht Primergy-Server

    Die Firma Netways hat ein Plugin für die Monitoring-Software Nagios veröffentlicht, das Hardware-Informationen der Primergy-Server von Fujitsu-Siemens ausliest.

  • Nagios 3.0: Mehr Flexibilität fürs Monitoring

    Der Nagios-Erfinder Ethan Galstad hat mit Version 3.0 die jüngste stabile Ausgabe seines freien Monitoring-Tools veröffentlicht.

  • Nagaconda: Python statt Perl für Nagios-Plugins

    Das Python-Tool Nagaconda hilft beim Schreiben von Plugins für das Monitoring-Tool Nagios und ist in einer ersten öffentlichen Release verfügbar.

comments powered by Disqus

Ausgabe 06/2017

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