entwicklung von nagios-plugins mit net::snmp und … · net::snmp und nagios::plugin plugins prima...

44
Entwicklung von Nagios-Plugins mit Net::SNMP und Nagios::Plugin Plugins prima selbst gemacht Martin Hefter Schenker Deutschland AG urnberg, 28. - 29. Oktober 2009

Upload: phamkiet

Post on 01-Aug-2018

242 views

Category:

Documents


0 download

TRANSCRIPT

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