Entwicklung von Nagios-Plugins mit
Net::SNMP und Nagios::PluginPlugins prima selbst gemacht
Martin Hefter
Schenker Deutschland AG
Nurnberg, 28. - 29. Oktober 2009
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einfuhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 2 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Zur Person
Erfahrungen mit Nagios seit 2004
Planung und Umsetzung der Nagios-Uberwachung fur das Hess.Landesamt fur Bodenmanagement und Geoinformation (fruherHess. Landesvermessungsamt)Weitere kleine Projekte und Diplomarbeit zum Thema
”Uberwachen von Geschaftsprozessen mit Nagios“
Nagios-Plugins
Pluginpack zur Uberwachung von Fujitsu(-Siemens-) Hardware
check power fsccheck fans fsccheck temp fsccheck systemhealth fsccheck raid fsc
Plugin zur Uberwachung von USV-Systemen der Firma APC
check ups apc
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 3 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Zielsetzung
Ziel dieses Vortrags
Dieser Vortrag soll einen kurze Einfuhrung in die Verwendungvon Nagios::Plugin und Net::SNMP vermitteln. Es konnenleider nicht alle Methoden und Moglichkeiten der beidenModule behandelt werden. Ausfuhrlichere Informationen zuden beiden Modulen finden Sie auf der jeweiligen Website.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 4 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Agenda
1 Einfuhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 5 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einfuhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 6 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Installation
Installation von Nagios::Plugin
Beim Kompilieren der Nagios-Plugins ab Version 1.4.11 kanndas Perl Modul Nagios::Plugin mit ubersetzt werden.
Kompilieren aus dem Sourcecode
./configure --enable-perl-modules
Alternativ
http://www.cpan.org/
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 7 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Einbinden von Nagios::Plugin
Einbinden von Nagios::Plugin
use FindBin
use lib "$FindBin ::Bin /../ perl/lib";
use Nagios :: Plugin;
Weitere Informationen zu Nagios::Plugin
http://search.cpan.org/~tonvoon/Nagios-Plugin-0.
33/lib/Nagios/Plugin.pm
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 8 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Einbinden von Nagios::Plugin
Einbinden von Nagios::Plugin
use FindBin
use lib "$FindBin ::Bin /../ perl/lib";
use Nagios :: Plugin;
Weitere Informationen zu Nagios::Plugin
http://search.cpan.org/~tonvoon/Nagios-Plugin-0.
33/lib/Nagios/Plugin.pm
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 8 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Objekt erzeugen
Objekt erzeugen
Das Nagios-Plugin-Objekt kapselt die wichtigsten Funktion furein Nagios-Plugin.
Beispiel Aufruf des Konstuktors
$np = Nagios ::Plugin ->new(
usage => "Usage: %s [-H <host >]"
shortname => "USV");
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 9 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Objekt erzeugen
Beispiel Aufruf des Konstrutors
$np = Nagios ::Plugin ->new(
usage => "Usage: %s [-H <host >]"
shortname => "USV");
Hinweis
Wenn das Argument usage verwendet wird, wird automatischeine Instanz von Nagios::Plugin::Getopt zur Verarbeitung vonKommandozeilen-Argumenten erzeugt.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 10 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Kommandozeilen-Argumente hinzufugen
add_arg
Fugt dem Plugin ein Kommandozeilen-Argument hinzu.
Beispiel Aufruf add_arg
$np ->add_arg(
spec => ’hostname|H=s’,
help => "-H, --hostname (Hostname or IP Address)");
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 11 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Kommandozeilen-Argumente auswerten
getopts
Uberpruft die Kommandozeilen-Argumente auf Vollstandigkeitund stellt sie fur den Zugriff bereit.
Zugriff auf Kommandozeilen-Argumente
$np ->getopts;
$hostname = $np ->opts ->hostname;
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 12 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Warnschwellen und Bereiche
Erzeugt einen Alarm wenn X...
Bereich Bemerkung
10 < 0 oder > 10 (Außerhalb des Bereiches [0 . . . 10])10: < 10, (Außerhalb des Bereiches [10 . . .∞])∼:10 > 10, (Außerhalb des Bereiches [-∞ . . . 10])10:20 < 10 or > 20, (Außerhalb des Bereiches [10 . . . 20])@10:20 ≥ 10 and ≤ 20, (Innerhalb des Bereiches 10 . . . 20)
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 13 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Warnschwellen und Bereiche
Temperaturmessung im Serverraum
Bereichsdefinition
Warning 19:21
Critical 18:22
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 14 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Warnschwellen und Bereiche
set_thresholds
Legt die Grenzwerte fur die Uberprufung eines Wertes fest.
Beispiel Aufruf set_thresholds
$np ->set_thresholds(
warning => $warning ,
critical => $critical );
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 15 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Warnschwellen und Bereiche
check_thresholds
Vergleicht den ubergebenen Wert mit den festgelegtenGrenzwerten und generiert den entsprechenden RuckgabewertOK, Warning oder Critical.
Beispiel Aufruf check_thresholds
$code = $np ->check_threshold($runtime );
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 16 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Nachrichten
add_message
Fugt eine Nachricht der entsprechenden Queue hinzu. Es wirdjeweils eine eigene Queue fur OK, Warning und Critical
gefuhrt.
Beispiel Aufruf add_message (1/2)
$np ->add_message(’OK’,"Everything is all right");
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 17 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Nachrichten
Beispiel Aufruf add_message (1/2)
$np ->add_message(’OK’,"Everything is all right");
Beispiel Aufruf add_message mit check thresholds (2/2)
$np ->add_message(check_thresholds($runtime),
"Battery Runtime is $runtime");
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 18 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Nachrichten
check_message
Uberpruft die Nachrichten Queues und gibt die letzteNachricht der Queue mit der hochsten Prioritat zuruck.
1 Critical
2 Warning
3 OK
Mit den Parametern join und join_all konnen auch alleQueues zuruckgeben werden.
check_message (1/2) Eine Queue
($code , $message) = $np ->check_messages ();
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 19 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Nachrichten
check_message (1/2) Eine Queue
($code , $message) = $np ->check_messages ();
check_message (2/2) Alle Queues
($code , $message) = $np ->check_messages(
join => "<BR>",
join_all => "<BR>");
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 20 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Performance Daten
add_perfdata
Fugt den Performance-Daten einen Wert hinzu.
Beispiel Aufruf add_perfdata
$np ->add_perfdata(
label => "batCapacity",
value => $batteryCapacity ,
threshold => $capacityThreshold ,
uom => "%",
min => 0,
max => 100);
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 21 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Exit-Methoden (1/2)
nagios_exit
Beendet das Skript mit einer Nachricht und einemRuckgabewert.
Beispiel Aufruf nagios_exit
$np ->nagios_exit(
return_code => OK,
message => "Everything is alright");
Hinweis
Diese Methode sollte verwendet werden, um das Plugin regularzu beenden.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 22 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Exit-Methoden (1/2)
nagios_exit
Beendet das Skript mit einer Nachricht und einemRuckgabewert.
Beispiel Aufruf nagios_exit
$np ->nagios_exit(
return_code => OK,
message => "Everything is alright");
Hinweis
Diese Methode sollte verwendet werden, um das Plugin regularzu beenden.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 22 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Exit-Methoden (2/2)
nagios_die
Beendet das Skript mit einer Nachricht und dem RuckgabewertUnknown. Das Argument return_code ist hier optional.
Beispiel Aufruf nagios_die
$np ->nagios_die(
message => "Unable to open SNMP connection");
Hinweis
Diese Methode sollte verwendet werden, um das Plugin beieinem Fehler zu beenden.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 23 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Exit-Methoden (2/2)
nagios_die
Beendet das Skript mit einer Nachricht und dem RuckgabewertUnknown. Das Argument return_code ist hier optional.
Beispiel Aufruf nagios_die
$np ->nagios_die(
message => "Unable to open SNMP connection");
Hinweis
Diese Methode sollte verwendet werden, um das Plugin beieinem Fehler zu beenden.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 23 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einfuhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 24 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
SNMP
SNMP Tree
Managed Objects
Die Managed Objects werden durch einen eindeutigen ObjectIdentifier (OID) identifiziert. Die OID beschreibt den Weg durch denBaum zum Managed Object.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 25 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Management Information Base
Management Information Base (MIB)
Die MIB beschreibt die Informationen, die uber SNMP abgefragtwerden konnen.
Beispiel OID
.1.3.6.1.4.1.318.1.1.1.2.2.3.0 = 72000
Beispiel MIB
upsAdvBatteryRunTimeRemaining OBJECT -TYPE
SYNTAX TimeTicks
ACCESS read -only
STATUS mandatory
DESCRIPTION
"The UPS battery run time remaining before battery exhaustion."
::= { upsAdvBattery 3 }
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 26 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Nutzliche Hilfsmittel
Kommandozeilen-Toolssnmpget
snmpwalk
Websites (MIB-Browser)
http://support.ipmonitor.com/snmp_center.aspx
http://www.oidview.com/mibs/detail.html
uvm.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 27 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Installation
Installation von Net::SNMP
Die meisten Linux-Distributionen liefern bereits fertige Paketefur Net::SNMP mit.
Installation unter Debian
apt-get install libsnmp-perl
Alternativ (Sourcecode)
http://net-snmp.sourceforge.net
http://www.cpan.org/
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 28 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Einbinden von Net::SNMP
Einbinden von Net::SNMP
use Net::SNMP
Weitere Informationen zu Net::SNMP:
http://search.cpan.org/~dtown/Net-SNMP-v6.0.0/
lib/Net/SNMP.pm
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 29 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Einbinden von Net::SNMP
Einbinden von Net::SNMP
use Net::SNMP
Weitere Informationen zu Net::SNMP:
http://search.cpan.org/~dtown/Net-SNMP-v6.0.0/
lib/Net/SNMP.pm
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 29 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Verbindung aufnehmen
Verbindung aufnehmen
Das Session-Objekt regelt die Verbindung zwischen dem Clientund dem SNMP-Agenten
Beispiel Session-Objekt erzeugen
($session ,$error) = Net::SNMP ->session(
-hostname => $host ,
-community => $community ,
-port => $snmp_port ,
-version => $snmp_version );
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 30 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Anfragen stellen
Eine OID abfragen
Mit get_request() lassen sich eine oder mehere OIDs vomAgenten abfragen. Entspricht der Funktion von snmpget aufder Kommandozeile.
Beispiel get_request()
$timeOnBattery = "1.3.6.1.4.1.318.1.1.1.2.1.2.0";
$lineFailCause = "1.3.6.1.4.1.318.1.1.1.3.2.5.0";
push(@snmpoids ,$timeOnBattery );
push(@snmpoids ,$lineFailCause );
$result = $session ->get_request(varbindlist => \@snmpoids );
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 31 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Anfragen stellen
Einen OID Baum abfragen
Mit get_table() kann ein ganzer OID-Baum abgefragtwerden. Entspricht der Funktion von snmpwalk auf derKommandozeile.
Beispiel get_table()
$physicalDev = "1.3.6.1.4.1.231.2.49.1.5.2.1.3";
$devTable = $session ->get_table(baseoid => $physicalDev );
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 32 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Anfragen stellen
Hinweis
Die Abfrageergebnisse von get_table() konnen sehrumfangreich ausfallen, wenn ein Knoten nahe an der Wurzelgewahlt wird.
Hinweis
Net::SNMP bietet noch weitere Methoden um Abfragen zustellen z.B. get_entries() und get_bulk_request().Damit lassen sich die Abfragen weiter optimieren. Allerdingssetzt dies mindestens SNMP Version 2 voraus.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 33 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Ergebnisse auswerten
Abfrage Ergebnisse
Die Methoden get_request() und get_table() liefernjeweils eine Referenz auf einen HASH zuruck, der sich aus derOID als Schlussel dem dazugehorigen Wert zusammensetzt.
Beispiel (1/2) Zugriff auf einen einzelnen Wert
$timeOnBatteryOID = "1.3.6.1.4.1.318.1.1.1.2.1.2.0";
push(@snmpoids ,$timeOnBatteryOID );
$result = $session ->get_request(varbindlist => \@snmpoids );
$timeOnBattery = $result ->{ $timeOnBatteryOID };
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 34 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Ergebnisse auswerten
Beispiel (1/2) Zugriff auf einen einzelnen Wert
$timeOnBatteryOID = "1.3.6.1.4.1.318.1.1.1.2.1.2.0";
push(@snmpoids ,$timeOnBatteryOID );
$result = $session ->get_request(varbindlist => \@snmpoids );
$timeOnBattery = $result ->{ $timeOnBatteryOID };
Beispiel (2/2) Zugriff auf alle Werte
$physicalDevOID = "1.3.6.1.4.1.231.2.49.1.5.2.1.3";
$devTable = $session ->get_table(baseoid => $physicalDevOID );
foreach my $oid (sort(keys (%{ $devTable }))) {
$dev = $devTable ->{$oid};
}
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 35 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Ergebnisse auswerten
Beispiel (2/2) Zugriff auf alle Werte
$physicalDevOID = "1.3.6.1.4.1.231.2.49.1.5.2.1.3";
$devTable = $session ->get_table(baseoid => $physicalDevOID );
foreach my $oid (sort(keys (%{ $devTable }))) {
$dev = $devTable ->{$oid};
}
Hinweis
Nicht vergessen nach Beendigung der Abfragen die Verbindungmit session->close() explizit zu schließen.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 36 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einfuhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 37 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Beispiel
Beispiel
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 38 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einfuhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 39 von 40
Einfuhrung Nagios::Plugin Net::SNMP Beispiel Ende
Ende
Fragen?
Sie brauchen ein neues Nagios Plugin,haben aber keine Zeit selber zu programmieren?
Gerne erstelle ich Ihnen ein Angebot.
[email protected] Nagios Consulting -
- Softwareentwicklung -
Slides TEXed with LATEX-Beamer
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 40 von 40