Kombination von Nagios und JMeter

Hab ja schon mehrmals erwähnt, dass sich Nagios, dank einer Plugin-Schnittstelle, sehr gut erweitern lässt. Somit lässt sich eigentlich alles checken, was man möchte! Heute werde ich eine weitere Möglichkeit vorstellen.

Mit den Standardmitteln von Nagios lassen sich ja schon viele Dienste „monitoren“. Aber wenn man eine Web-Oberfläche auf Verfügbarkeit und/oder Auslastung checken möchte, wird dies mit diesen Mitteln eher schwierig. So lässt sich z.B. überprüfen, ob der Mail-Server (Über die Protokolle: POP, IMAP, SMTP) noch läuft, aber nicht wie lange ich benötige um über die Weboberfläche (z.B. SquirrelMail) meine Mails zu checken. Das kann ja manchmal ein Indiz dafür sein, dass irgendwo was hängt! Sowas ist schwierig über die Standardprotokolle herauszufinden. Aber da kommt nun JMeter ins Spiel.

JMeter – was ist das?

Für die unter euch, die es nicht kennen (Ich kenne es auch erst seit ein paar Wochen): JMeter ist ein Tool mit dem sich Lasttests auf Server/Clientanwendungen ausführen lassen. Dazu erstellt man einfach einen Testplan, was nichts anderes ist wie ein Ablauf von bestimmten Aktionen (z.B. Klicke auf Button A, Gib das Wort „Hallo“ in das Textfeld ein, Klicke auf Button B, … etc.), zu seiner (Web-)Anwendung. Diesen Plan kann man anschließend so oft und so schnell (je nach Zweck) über seine Anwendung schicken.
Naja… also das war jetzt eine sehr kurze Kurzfassung! 😉 Wer sich mehr mit JMeter beschäftigen will, dem sei die Homepage empfohlen.

Noch wichtig zu erwähnen ist, dass dieses Programm in Java geschrieben ist. Um es zu benutzen braucht ihr min. eine JVM höher 1.5. (Wenn ihr gerne Oracle/Sun Java unter Debian 6.0.2 installieren wollt, sei euch dieser Blogartikel empfohlen.)

Installation

Eigentlich muss man da nichts großartig installieren. Einfach das Tarball (oder Zip) von der Homepage herunterladen und am besten in das libeexec-Verzeichnis unter Nagios entpacken. Also in etwa so:

$ wget http://artfiles.org/apache.org//jmeter/binaries/
$ mv jakarta-jmeter-2.5.1.tgz /usr/local/nagios/libexec/jmeter/
$ tar xzf jakarta-jmeter-2.5.1.tgz

Nach dem erfolgreichen Entpacken müssen dann noch innerhalb der jmeter.properties unter jakarta-jmeter-2.5/bin/ zwei Einträge angepasst werden. Sonst funktioniert das JMeter-Nagios-Plugin nicht richtig.

jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.assertion_results_failure_message=true

Jetzt besorgen wir uns das benötigte Nagios-Plugin. Man kann es natürlich selber schreiben. Aber wozu das Rad neu erfinden?! 😉
In der Nagios-Plugin-Sammlung kann man sich dieses Plugin einfach herunterladen. Nicht wundern, es ist nur ein Perl-Skript! 🙂
Dieses Perl-Skript speichern wir ebenfalls unter /usr/local/nagios/etc/libexec/jmeter/
Würde dann alles in etwa so aussehen:

$ mv jmeter.pl /usr/local/nagios/libexec/jmeter/

Dieses Skript müssen wir uns dann auch nochmal vornehmen:

$ vi jmeter.pl

Innerhalb des Skriptes werden zwei Umgebungsvariablen gesetzt. Die erste gibt den Pfad zur Java-Installation an und die zweite zum JMeter-Verzeichnis. Dies solltet ihr natürlich an eure Gegebenheiten anpassen! Sonst funktioniert das Skript nicht.

$ENV{JAVA_HOME} = "/usr/java/jdk1.5.0_11/bin/java";
$ENV{JMETER_HOME} = "/usr/local/nagios/libexec/jmeter/jakarta-jmeter-2.5.1";

So viel zur Installation. Nun können wir unseren ersten Testplan mit JMeter erstellen…

Erstellen eines Testplans mit JMeter

Dazu möchte ich eigentlich nicht viel schreiben, da dies sonst diesen Artikel sprengen würde und ich finde die Dokumentationen und FAQs von Apache schon ganz gut:

Solltet ihr dennoch fragen haben, schreibts einfach in die Kommentare. Ich versuche dann zu helfen! 🙂

Wichtig noch zu erwähnen: Wenn ihr euer Testplan fertig erstellt habt, speichert ihn auch in das libexec-Verzeichnis von Nagios ab! Die Dateiendung lautet „*.jmx“.

Integration in Nagios

Zum Schluss kommt dann noch die Integration in eine Nagios-Instanz. Dazu muss erstmal ein passender Command in der command-config definiert werden (in /usr/local/nagios/etc/objects/commands.cfg):

define command{
     command_name jmeter
     command_line perl /usr/local/nagios/libexec/jmeter/jmeter.pl -p $ARG1$ -w $ARG2$ -c $ARG3$ -t $ARG4$
}

Joa und dieses Command können wir jetzt in verschiedenen Service-Definition verwenden… Würde dann in etwa so aussehen:

define service{
    use                 generic-service
    host_name           HOSTNAME
    check_command       jmeter!TESTPLAN.jmx!5!10!30
    service_description BESCHREIBUNG
}

TESTPLAN.jmx ist dabei natürlich der vorhin mit JMeter erstellte Testplan, der dann auch unter /usr/local/nagios/libexec/jmeter/ liegen sollte.

Die Übergabeparameter p, w, c, t stehen für den Pfad zur JMX-Datei, Warning-Zeit, Critical-Zeit und Timeout.

Dieser Beitrag wurde unter Howto, Nagios abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Leave a reply