SNMP

SNMPD als Ersatz für NRPE

Um Nagios Plugins auf einer Remote Maschine auszuführen, wird gerne NRPE oder check_by_ssh verwendet. Es bietet sich aber an, den SNMPD für diese Aufgabe zu verwenden.

Vorteile:

  1. Net-SNMP ist bei jeder Distribution dabei.
  2. Zur Abfrage muss kein User wie bei check_by_ssh oder NRPE eingerichtet werden.
  3. Geringer Aufwand bei der Konfiguration.

Nachteile:

  1. Daten werden unverschlüsselt übertragen.
  2. Plugins werden als Root ausgeführt.
  3. Keine Parameterübergabe an die Plugins zu Laufzeit. Schwellwerte können nicht auf dem Nagios Server zentral verwaltet werden.

Wer bis jetzt nicht von den Nachteilen abgeschreckt wurde, sollte weiter lesen …

snmpd.conf erweitern

Die Datei snmpd.conf ist die zentrale Config-Datei für den SNMPD. Hier besteht die Möglichkeit, den SNMPD um eigene Aktionen zu erweitern.

exec 1.3.6.1.4.1.7411.10 check_swap /usr/local/nagios/libexec/check_swap -w 20% -c 10%
  • exec → Ein externes Programm soll ausgeführt werden.
  • 1.3.6.1.4.1.7411.10 → Unter dieser OID soll das Programm eingebunden werden.
  • check_swap → ein Name für das Programm.
  • /usr/local/nagios/libexec/check_swap → Das Programm das ausgeführt werden soll.
  • -w 20% -c 10% → Zusätzliche Argumente.

Nach einem Reload des SNMPD steht die neue OID zur Verfügung.

Testen

Bevor man jetzt voller Eifer gleich Nagios auf die OID ansetzt sollten man sich erst genau mit der Reaktion des SNMPD auf das Implantat auseinandersetzen.

Also testen wir erst einmal mit einem snmpget und schauen uns die Antwort an.

snmpwalk -v1 -c <community> -On <server_ip> 1.3.6.1.4.1.7411.10

.1.3.6.1.4.1.7411.10.1.1 = INTEGER: 1
.1.3.6.1.4.1.7411.10.2.1 = STRING: "check_swap"
.1.3.6.1.4.1.7411.10.3.1 = STRING: "/usr/local/nagios/libexec/check_swap -w 20% -c 10%"
.1.3.6.1.4.1.7411.10.100.1 = INTEGER: 0
.1.3.6.1.4.1.7411.10.101.1 = STRING: "SWAP OK - 100% free (2055 MB out of 2055 MB) |swap=2055MB;411;205;0;2055"
.1.3.6.1.4.1.7411.10.102.1 = INTEGER: 0
.1.3.6.1.4.1.7411.10.103.1 = ""

Es kommen also einige Daten zurück. Die Daten möchte ich aber noch etwas genauer erklären.

  • 1.3.6.1.4.1.7411.10 ist die Basis OID die wir in der snmpd.conf für check_swap definiert haben.
  • 2.1 → Der Name des Checks wie wir ihn in der snmpd.conf definiert haben.
  • 3.1 → Der Befehl der ausgeführt wurde.
  • 100.1 → Der Returncode der vom Befehl geliefert wurde.
  • 101.1 → Die Ausgabe des Befehls.

und was sagt Nagios dazu ?

Wir haben nun eine OID, die wir abfragen können und die Möglichkeit, die Nagios-Plugins per SNMP auszuführen.

Wenn man sich die Ausgabe des snmpwalk Befehls anschaut, stellt man fest, dass Nagios ja nur die OID 100.1 und 101.1 benötigt.

Jetzt wird das S in SNMP wieder in das richtige Licht gerückt. Bei der Verarbeitung der Daten per Script steht es wirklich wieder für “simple”.

ein neues Plugin für Nagios

Nagios braucht also ein kleines Perl-Plugin, das genau die oben genannten OIDs ausliest.

  • Lies die 101.1 und gib den STRING auf STDOUT aus.
  • Lies die 100.1 und beende dich selbst mit genau diesem Wert.

Mit Perl sieht das in etwa so aus:

#!/usr/bin/perl
use strict;
use Net::SNMP;
my $host_name = shift;
my $id = shift;
my ($session, $error) = Net::SNMP->session(
   -hostname  => $host_name,
   -community => 'public',
   -port      => 161
);

if (!defined($session)) {
   printf("ERROR: %s.\n", $error);
   exit 1;
}

my $output_id = ".1.3.6.1.4.1.7411.$id.101.1";
my $state_id = ".1.3.6.1.4.1.7411.$id.100.1";
my $output = $session->get_request(
   -varbindlist => [$output_id]
);
my $state = $session->get_request(
   -varbindlist => [$state_id]
);
if (!defined($state)) {
   printf("ERROR: %s.\n", $session->error);
   $session->close;
   exit 1;
}
printf("%s\n",
   $output->{$output_id}
);
$session->close;
exit $state->{$state_id};

Das Plugin ist nur ein sehr einfaches Beispiel, erfüllt aber seinen Zweck.

Aufgerufen wird das Plugin mit zwei Optionen

  • IP-Adresse
  • id aus der snmpd.conf ( in unserem Fall die 10 )

Organisation

Wenn man seine Checks über diesen Weg ausführen möchte, sollte man auf jeden Fall seine OIDs dokumentieren. Die IDs sollten über alle Rechner gleich sein.

Sicherheit

SNMP ist nur durch die COMMUNITY geschützt und durch die Tatsache, dass nicht jeder Host Anfragen stellen darf. Kommt aber eine Anfrage durch, werden die Programme mit dem User ausgeführt, unter dem der SNMPD läuft. In der Regel ist das Root !

Also Vorsicht ! Bitte genau überlegen, was man in den SNMPD einbindet !

Ich weise hiermit ausdrücklich auf die Gefahren hin und übernehme keine Verantwortung für mögliche Schäden an Leib und Maschine.

nagios/snmp.txt · Last modified: 2008/08/12 12:24 (external edit)
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0