Der Vortrag soll einen Überblick geben, wie sich mit Hilfe der Nagios-Plugin API und dem Net::SNMP Modul von Perl ein einges Plugin zur Hardware-Überwachung bauen lässt.
OSMC 2009 | Entwicklung von Nagios-Plugins mit Net::SNMP und Nagios::Plugin by Martin Hefter
1. Entwicklung von Nagios-Plugins mit
Net::SNMP und Nagios::Plugin
Plugins prima selbst gemacht
Martin Hefter
Schenker Deutschland AG
N¨urnberg, 28. - 29. Oktober 2009
2. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einf¨uhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 2 von 40
3. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Zur Person
Erfahrungen mit Nagios seit 2004
Planung und Umsetzung der Nagios-¨Uberwachung f¨ur das Hess.
Landesamt f¨ur Bodenmanagement und Geoinformation (fr¨uher
Hess. Landesvermessungsamt)
Weitere kleine Projekte und Diplomarbeit zum Thema
”
¨Uberwachen von Gesch¨aftsprozessen mit Nagios“
Nagios-Plugins
Pluginpack zur ¨Uberwachung von Fujitsu(-Siemens-) Hardware
check power fsc
check fans fsc
check temp fsc
check systemhealth fsc
check 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
4. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Zielsetzung
Ziel dieses Vortrags
Dieser Vortrag soll einen kurze Einf¨uhrung in die Verwendung
von Nagios::Plugin und Net::SNMP vermitteln. Es k¨onnen
leider nicht alle Methoden und M¨oglichkeiten der beiden
Module behandelt werden. Ausf¨uhrlichere Informationen zu
den beiden Modulen finden Sie auf der jeweiligen Website.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 4 von 40
5. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Agenda
1 Einf¨uhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 5 von 40
6. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einf¨uhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 6 von 40
7. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Installation
Installation von Nagios::Plugin
Beim Kompilieren der Nagios-Plugins ab Version 1.4.11 kann
das 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
8. Einf¨uhrung 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
9. Einf¨uhrung 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
10. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Objekt erzeugen
Objekt erzeugen
Das Nagios-Plugin-Objekt kapselt die wichtigsten Funktion f¨ur
ein 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
11. Einf¨uhrung 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 automatisch
eine Instanz von Nagios::Plugin::Getopt zur Verarbeitung von
Kommandozeilen-Argumenten erzeugt.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 10 von 40
12. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Kommandozeilen-Argumente hinzuf¨ugen
add_arg
F¨ugt 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
13. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Kommandozeilen-Argumente auswerten
getopts
¨Uberpr¨uft die Kommandozeilen-Argumente auf Vollst¨andigkeit
und stellt sie f¨ur 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
14. Einf¨uhrung 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
15. Einf¨uhrung 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
16. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Warnschwellen und Bereiche
set_thresholds
Legt die Grenzwerte f¨ur die ¨Uberpr¨ufung 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
17. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Warnschwellen und Bereiche
check_thresholds
Vergleicht den ¨ubergebenen Wert mit den festgelegten
Grenzwerten und generiert den entsprechenden R¨uckgabewert
OK, 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
18. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Nachrichten
add_message
F¨ugt eine Nachricht der entsprechenden Queue hinzu. Es wird
jeweils eine eigene Queue f¨ur OK, Warning und Critical
gef¨uhrt.
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
19. Einf¨uhrung 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
20. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Nachrichten
check_message
¨Uberpr¨uft die Nachrichten Queues und gibt die letzte
Nachricht der Queue mit der h¨ochsten Priorit¨at zur¨uck.
1 Critical
2 Warning
3 OK
Mit den Parametern join und join_all k¨onnen auch alle
Queues zur¨uckgeben 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
21. Einf¨uhrung 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
22. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Performance Daten
add_perfdata
F¨ugt 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
23. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Exit-Methoden (1/2)
nagios_exit
Beendet das Skript mit einer Nachricht und einem
R¨uckgabewert.
Beispiel Aufruf nagios_exit
$np -> nagios_exit(
return_code => OK ,
message => "Everything is alright");
Hinweis
Diese Methode sollte verwendet werden, um das Plugin regul¨ar
zu beenden.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 22 von 40
24. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Exit-Methoden (1/2)
nagios_exit
Beendet das Skript mit einer Nachricht und einem
R¨uckgabewert.
Beispiel Aufruf nagios_exit
$np -> nagios_exit(
return_code => OK ,
message => "Everything is alright");
Hinweis
Diese Methode sollte verwendet werden, um das Plugin regul¨ar
zu beenden.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 22 von 40
25. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Exit-Methoden (2/2)
nagios_die
Beendet das Skript mit einer Nachricht und dem R¨uckgabewert
Unknown. 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 bei
einem Fehler zu beenden.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 23 von 40
26. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Exit-Methoden (2/2)
nagios_die
Beendet das Skript mit einer Nachricht und dem R¨uckgabewert
Unknown. 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 bei
einem Fehler zu beenden.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 23 von 40
27. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einf¨uhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 24 von 40
28. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
SNMP
SNMP Tree
Managed Objects
Die Managed Objects werden durch einen eindeutigen Object
Identifier (OID) identifiziert. Die OID beschreibt den Weg durch den
Baum zum Managed Object.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 25 von 40
29. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Management Information Base
Management Information Base (MIB)
Die MIB beschreibt die Informationen, die ¨uber SNMP abgefragt
werden k¨onnen.
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
30. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
N¨utzliche Hilfsmittel
Kommandozeilen-Tools
snmpget
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
31. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Installation
Installation von Net::SNMP
Die meisten Linux-Distributionen liefern bereits fertige Pakete
f¨ur 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
32. Einf¨uhrung 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
33. Einf¨uhrung 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
34. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Verbindung aufnehmen
Verbindung aufnehmen
Das Session-Objekt regelt die Verbindung zwischen dem Client
und 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
35. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Anfragen stellen
Eine OID abfragen
Mit get_request() lassen sich eine oder mehere OIDs vom
Agenten abfragen. Entspricht der Funktion von snmpget auf
der 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
36. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Anfragen stellen
Einen OID Baum abfragen
Mit get_table() kann ein ganzer OID-Baum abgefragt
werden. Entspricht der Funktion von snmpwalk auf der
Kommandozeile.
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
37. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Anfragen stellen
Hinweis
Die Abfrageergebnisse von get_table() k¨onnen sehr
umfangreich ausfallen, wenn ein Knoten nahe an der Wurzel
gew¨ahlt wird.
Hinweis
Net::SNMP bietet noch weitere Methoden um Abfragen zu
stellen z.B. get_entries() und get_bulk_request().
Damit lassen sich die Abfragen weiter optimieren. Allerdings
setzt dies mindestens SNMP Version 2 voraus.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 33 von 40
38. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Ergebnisse auswerten
Abfrage Ergebnisse
Die Methoden get_request() und get_table() liefern
jeweils eine Referenz auf einen HASH zur¨uck, der sich aus der
OID als Schl¨ussel dem dazugeh¨origen 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
39. Einf¨uhrung 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
40. Einf¨uhrung 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 Verbindung
mit session->close() explizit zu schließen.
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 36 von 40
41. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einf¨uhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 37 von 40
43. Einf¨uhrung Nagios::Plugin Net::SNMP Beispiel Ende
Neuer Abschnitt
1 Einf¨uhrung
2 Nagios::Plugin
3 Net::SNMP
4 Beispiel
5 Ende
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 39 von 40
44. Einf¨uhrung 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.
info@martinhefter.de
- Nagios Consulting -
- Softwareentwicklung -
Slides TEXed with LATEX-Beamer
M. Hefter - OSMC 2009 Plugins mit Net::SNMP und Nagios::Plugins 40 von 40