SlideShare ist ein Scribd-Unternehmen logo
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 1
Nagios-Workshop:
Eigene Plugins in Perl
entwicklen
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 2
Workshop ≠ Schulung
● Workshop = mehrstündiger Vortrag/
Diskussion, um in ein Thema tiefer
einsteigen zu können, als das in einem
einstündigen Vortrag der Fall ist.
● keine Schulung = "selbst tun" steht
nicht im Vordergrund – wer möchte,
kann das aber durchaus tun.
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 3
Inhalt
● Standard-Anforderungen an ein Plugin
● Das Perl-Modul Nagios::Plugin
● Auf der Kommandozeile: GetOpt::Long
● Online-Hilfe: Pod::Usage
● Die Sache mit dem Timeout
● Formate für Schwellwerte: Thresholds
● Ausgabe von Performancedaten
● Konfigurationsdateien für Plugins?
● Trubelschießen ('trouble shooting' ;-)
● ePN: Nagios und der embedded Perl Interpreter
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 4
Standardanforderungen
im Überblick
(1) Batch-tauglich
(2) Rückgabewert (Returncode)
(3) Textausgabe für den Admin
(4) Online-Hilfe
(5) Reservierte Optionen
(6) Schwellwerte/Thresholds
(7) Timeout
(8) Performancedaten
(9) Copyright-Info
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 5
Anforderungen I
(1) Batch-tauglich:
– keine graphische Oberfläche
– keine feste Bindung an ein tty
– keine interaktive Eingabe (nur Optionen)
(2) Rückgabewert/Return-Code
Returncode Service-Check Host-Check
0 OK UP
1 WARNING (*)
2 CRITICAL DOWN/UNREACHABLE
3 UNKNOWN DOWN/UNREACHABLE
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 6
Anforderungen II
● (3) Textausgabe für den Admin:
– einzeilig auf STDOUT (ab Nagios 3.0 auch
mehrzeilig, aber Rücksicht auf Nagios 2.x
nehmen!)
– Format: Name_des_Checks Status – Text
– z.B.: CHECK_DU OK ­ /usr (520 MBytes)
● (4) Online-Hilfe
– anstelle einer Manpage
– bei Fehlbedienung und mit Option -h|--help
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 7
Anforderungen III
(5) Reservierte Optionen
Kurzform Langform Beschreibung
­h ­­help Online-Hilfe, ggf. kurze und lange Version
­V ­­version Ausgabe der Plugin-Version
­V ­­verbose erhöht die Geschwätzigkeit
­h ­­hostname Hostname (IP-Adresse)
­t ­­timeout Timeout für den Abbruch des Checks
­w ­­warning Threshold für Warnschwelle
­c ­­critical Threshold für kritische Schwelle
­4 ­­use­ipv4 verwende IPv4
­6 ­­use­ipv6 verwende IPv6
­­community SNMP-Community-String bei SNMP-Abfragen
­u ­­user oder ­­url User (für Authentifikation) oder URL
­p ­­port oder ­­password TCP/UDP-Port oder Passwort für Authentifikation
­a ­­authentication REALM (z.B. Kerberos, SNMPv3) oder Passwort
­l ­­logname Login-Name
­C
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 8
Anforderungen IV
(6) Thresholds:
Fehler, falls außerhalb eines Bereiches
[@]start:end Beschreibung
start muss kleiner gleich end sein!
end start = 0
start: Bereich geht bis Unendlich
~:end ~ bedeutet negatives Unendlich
@start:end Bereich wird negiert
­w 1:2 ­c 1:5 Wert < 1 oder > 5: CRITICAL; 3-5: WARNING
­c @10:20
start ≤ end
CRITICAL, falls 10 ≤ Wert ≤ 20
! Thresholds kennen keine Unit of Measurements!
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 9
Anforderungen V
(7) Timeout:
– Jedes Plugin soll nach einem Timeout den
Check hart abbrechen (Default: 10 sec.)
– Verhindert Scheduling-Probleme
(8) Performancedaten:
text | var=value[uom];warn;crit;min;max
– UOM = Unit Of Measurement:
● nichts
● s - Sekunden: s, ms, us, ...
● % - Prozentangaben (0-100)
● B - Bytes (auch: KB, MB, GB)
● c - Counter (stetig wachsender Zähler)
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 10
Das Modul Nagios::Plugin
● Autor: Ton Voon
● aktuelle Version: 0.21 (2007-09-24)
● Installation:
– perl -MCPAN -e 'install Nagios::Plugin'
– ggf. vor der ersten CPAN-Benutzung das
Modul 'CPAN' installieren (Bundle)
– alternativ: ≥ nagios-plugins-1.4.10
● Manpage: man Nagios::Plugin
● Demo
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 11
Nagios::Plugin ohne CPAN
● Installation aus den nagios-plugins:
cd perlmods
make && make install
● Modul wird installiert nach:
 /usr/local/nagios/bin/perl
● Verwendung im Plugin:
use FindBin;
use lib "$FindBin::Bin/../perl/lib";
use Nagios::Plugin;
● Suchpfad ist nun relativ zum Plugin-
Verzeichnis
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 12
Nagios::Plugin
● Konstanten:
– OK, WARNING, CRITICAL, UNKNOWN
● Constructor (new)
● Optionen: getopt-like
● Exit-Funktionen:
– nagios_exit(status, text)
– nagios_die(text [,status])
● Thresholds
● Performancedaten
● Message-Behandlung (experimentell)
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 13
Projekt check_du.pl
% du ­cs /var/log /var/spool
731468  /var/log
26448   /var/spool
757916  total
● Summe aller Dateien ausgeben
● prüfen, ob Schwellwerte überschritten
werden
● Performance-Daten
● Online-Hilfe
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 14
check_du.pl: Rumpf
# ­­ main
open( OUT, "LANG=C; /usr/bin/du ­cs $what 2>&1 |") 
   or $np­>nagios_die( "can't start /usr/bin/du" );
while (<OUT>) {
   print "$_" if ($verbose);
   chomp $_;
   
   $denied++ if ( /Permission denied/i );
   if ( /^(d+)s+total$/i ) {  # last line
      $size = $1;
      last;
   }
}
close (OUT);
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 15
Nagios::Plugin->new
#!/usr/bin/perl ­w
use strict;
use warnings;
# ­­ ggf. FindBin
use Nagios::Plugin;
my $np = Nagios::Plugin­>new( 
    shortname => "CHECK_DU" 
);
● Weitere Optionen: siehe manpage
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 16
Getopt::Long
use Getopt::Long qw(:config 
no_ignore_case bundling);
# ­­ GetOpt
GetOptions(
   "P|path=s"      => $what,
   "w|warning=s"   => $warn_threshold,
   "c|critical=s"  => $crit_threshold,
   "h|help"        => $help,
   "V|version"     => $printversion,
   "v|verbose+"    => $verbose,
) or exit_with_unknown_and_help;
argumente_auf_stichhaltigkeit_prüfen;
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 17
Getopt/Hilfe: entweder/oder
● Entweder nur die Funktionen von
Nagios::Plugin verwenden
● Oder nur Getopt::Long einsetzen
● Keinesfalls mischen!
● Dasselbe gilt für die Online-Hilfe
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 18
POD - Perl Online Doku
● Inline-Dokumentation, steht direkt im
Skript selbst
● formatierte Ausgabe als Manpage, usw.
● Aufruf: perldoc skript
● für die Batch-Verarbeitung
– pod2html, pod2latex, pod2man
– pod2text, pod2usage
● man perlpod; man perldoc; man man
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 19
POD - Anweisungen
=pod
=head1 Heading Text
=head2 Heading Text
=head3 Heading Text
=head4 Heading Text
=over indentlevel
=item stuff
=back      
=begin format
=end format
=for format text...
=encoding type
=cut      Demo
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 20
POD - everywhere
#!/usr/bin/perl ­w
=head1 NAME
....
=cut
use strict;
...
=head1 OPTIONS
...
=cut
... perl code ...
=head1 AUTHOR
...
=cut
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 21
Modul Pod::Usage
pod2usage(
  ­msg     => $message_text ,        
  ­exitval => $exit_status  ,
  ­verbose => $verbose_level,
  ­output  => $filehandle   );
● Verbose:
– 0: SYNOPSIS
– 1: SYNOPSIS|OPTIONS|ARGUMENTS
– 2: Alles
– 99: über "-sections" frei wählbar
● Output:
– stdout: bei verbose = 0 oder 1
– stderr: bei verbose = 2
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 22
Pod::Usage in check_du.pl
GetOptions(...) or pod2usage( 
   ­exitval => UNKNOWN,
   ­verbose => 0,
   ­msg     => "**unknown argument found**" );
pod2usage(­verbose => 2,
          ­exitval => UNKNOWN,
          ­output  => *STDOUT) if ( $help );
pod2usage(­msg => "n$0 ­­ version: $versionn",
      ­verbose => 0,
      ­exitval => UNKNOWN) if ( $printversion );
pod2usage(­msg => "**no path/pattern specified",
      ­verbose => 0,
      ­exitval => UNKNOWN) if ( "$what" eq "" );
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 23
Thresholds
# ­­ thresholds
$np­>set_thresholds(
   warning  => $warn_threshold,
   critical => $crit_threshold
);
# ­­ check
$result = $np­>check_threshold($size);
$np­>nagios_exit( 
   $result, "check size: $size kByte"
);
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 24
Messages in Nagios::Plugin
● noch sehr experimentell und veränderlich,
daher nicht produktiv benutzen!
● ermitteln aus vorhandenem Text einen
Fehlercode:
– add_message( <CODE>, $message );
– check_messages()
● Details siehe Manpage
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 25
Performancedaten
$np­>add_perfdata( 
   label     => "size", 
   value     => $size,
   uom       => "kB", 
   threshold => $np­>threshold() 
);
# ­­ Ausgabe
$np­>nagios_exit( 
   $result, "check size: $size kByte");
CHECK_DU WARNING ­ check size: 100 kByte | 
size=100kB;200:;100:
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 26
Timeout
# ... getopt ...
$SIG{ALRM} = sub { 
   $np­>nagios_die("Timeout reached"); 
};
alarm($timeout);
# ... eigentlicher Code ...
alarm(0);   # timeout stoppen
Achtung: alarm() nicht zusammen mit sleep()
verwenden!
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 27
Konfigurationsdateien
$Config = Nagios::Plugin::Config­>read(    
   '/etc/nagios/plugins.ini' 
);
$Config = Nagios::Plugin::Config­>read();
    
$rootproperty = $Config­>{_}­>{rootproperty};
$pi    = $Config­>{mathe}­>{pi};
$euler = $Config­>{mathe}­>{euler};
# /etc/nagios/plugins.ini ­ windows ini style
rootproperty=10.0
[mathe]
pi=3.1415
euler=2.78
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 28
Troubleshooting
● Pragmas zur Fehlervermeidung/-Suche:
#!/usr/bin/perl ­w
use strict;
use warnings;
...
● Deparse:
perl ­MO=Deparse plugin.pl
● Debbuging-Ausgaben:
print "xyzn" if ($debug);
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 29
Literatur/Bücher
● Larry Wall, Tom Christiansen,
JonOrwant, Randal Schwartz:
Programmieren in Perl (O'Reilly)
● Tom Christiansen, Nathan Torkington:
Perl Kochbuch (O'Reilly)
● cromatic: Perl Hacks (O'Reilly)
● Damian Conway:
Perl Best Practices (O'Reilly)
● Fahrid Hajji: Perl (Addison-Wesley)
● Johan Vromans: Perl 5 kurz & gut
Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 30
Literatur/Internet
● www.cpan.org
● www.annocpan.org
● perldoc.perl.org
● nagios.sourceforge.net/docs/3_0
● nagiosplug.sourceforge.net
● nagiosplugins.org (neu)

Weitere ähnliche Inhalte

ODP
Ausfallsichere Kultur mit Plone
PDF
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
PDF
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
ODP
Deploy Magento Shops with Capistrano v3
PDF
MongoDB: Security-Tipps gegen Hacker
ODP
Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine
PDF
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
PPTX
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Ausfallsichere Kultur mit Plone
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Deploy Magento Shops with Capistrano v3
MongoDB: Security-Tipps gegen Hacker
Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...

Was ist angesagt? (20)

PDF
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
PDF
Einführung in Clean Code mit .NET - Teil 1
PDF
Ard Gate - German
PDF
DDEV - Eine lokale Entwicklungsumgebung
PDF
Drupal Basics (7-8) Vortrag (01.2016)
PDF
Vagrant - Einführung & Verwendung
PPTX
Dockerize It - Mit apex in die amazon cloud
PPT
IfN Studienarbeit Abschlusspres 18.9.2007
PPTX
The Lotus Code Cookbook
PDF
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
ODP
Abläufe mit PHP und Phing automatisieren
ODP
Froscamp2010_padre
PDF
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
PDF
Zend Framework 2.0
PDF
Einführung in Docker
PDF
OSMC 2009 | PNP4Nagios by Jörg Linge
PPTX
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
PPTX
Dnug35 ak-dev.071111-cookbook
PPTX
Automatischer Build mit Maven
PDF
Nagios Conference 2006 | SAP Monitoring II - Die technische Umsetzung by Wolf...
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Einführung in Clean Code mit .NET - Teil 1
Ard Gate - German
DDEV - Eine lokale Entwicklungsumgebung
Drupal Basics (7-8) Vortrag (01.2016)
Vagrant - Einführung & Verwendung
Dockerize It - Mit apex in die amazon cloud
IfN Studienarbeit Abschlusspres 18.9.2007
The Lotus Code Cookbook
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Abläufe mit PHP und Phing automatisieren
Froscamp2010_padre
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Zend Framework 2.0
Einführung in Docker
OSMC 2009 | PNP4Nagios by Jörg Linge
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Dnug35 ak-dev.071111-cookbook
Automatischer Build mit Maven
Nagios Conference 2006 | SAP Monitoring II - Die technische Umsetzung by Wolf...
Anzeige

Ähnlich wie Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth (20)

PDF
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
PDF
SLAC 2008 RPMs selber bauen
PDF
OSMC 2008 | Nagios für Einsteiger by Sven Velt
PPTX
Azure Notebooks
PDF
2011 12 05 KLUG Karl Franzens Universität Graz Linux User Group
PDF
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
PDF
Extbase/Fluid: Kennenlernen und ausprobieren
ODP
PhpStorm 6 Configuration for TYPO3
PDF
Web Entwicklung mit PHP - Teil 3 Beta
PDF
Drupal 8 templating alles neu mit twig
PDF
NetBeans für PHP-Entwickler
PDF
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
PDF
PHP-Entwicklung mit PEAR
PDF
Einführung in Puppet und Vagrant
ODP
Rex - Infrastruktur als Code
PDF
20160229_ModernApplicationDevelopment_Python_KPatenge
PDF
Gradle - Beginner's Workshop (german)
PDF
Perl Renaissance Reloaded
PDF
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
PPTX
Python-IDEs - PyDev und Eclipse
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
SLAC 2008 RPMs selber bauen
OSMC 2008 | Nagios für Einsteiger by Sven Velt
Azure Notebooks
2011 12 05 KLUG Karl Franzens Universität Graz Linux User Group
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
Extbase/Fluid: Kennenlernen und ausprobieren
PhpStorm 6 Configuration for TYPO3
Web Entwicklung mit PHP - Teil 3 Beta
Drupal 8 templating alles neu mit twig
NetBeans für PHP-Entwickler
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
PHP-Entwicklung mit PEAR
Einführung in Puppet und Vagrant
Rex - Infrastruktur als Code
20160229_ModernApplicationDevelopment_Python_KPatenge
Gradle - Beginner's Workshop (german)
Perl Renaissance Reloaded
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Python-IDEs - PyDev und Eclipse
Anzeige

Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth

  • 1. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 1 Nagios-Workshop: Eigene Plugins in Perl entwicklen
  • 2. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 2 Workshop ≠ Schulung ● Workshop = mehrstündiger Vortrag/ Diskussion, um in ein Thema tiefer einsteigen zu können, als das in einem einstündigen Vortrag der Fall ist. ● keine Schulung = "selbst tun" steht nicht im Vordergrund – wer möchte, kann das aber durchaus tun.
  • 3. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 3 Inhalt ● Standard-Anforderungen an ein Plugin ● Das Perl-Modul Nagios::Plugin ● Auf der Kommandozeile: GetOpt::Long ● Online-Hilfe: Pod::Usage ● Die Sache mit dem Timeout ● Formate für Schwellwerte: Thresholds ● Ausgabe von Performancedaten ● Konfigurationsdateien für Plugins? ● Trubelschießen ('trouble shooting' ;-) ● ePN: Nagios und der embedded Perl Interpreter
  • 4. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 4 Standardanforderungen im Überblick (1) Batch-tauglich (2) Rückgabewert (Returncode) (3) Textausgabe für den Admin (4) Online-Hilfe (5) Reservierte Optionen (6) Schwellwerte/Thresholds (7) Timeout (8) Performancedaten (9) Copyright-Info
  • 5. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 5 Anforderungen I (1) Batch-tauglich: – keine graphische Oberfläche – keine feste Bindung an ein tty – keine interaktive Eingabe (nur Optionen) (2) Rückgabewert/Return-Code Returncode Service-Check Host-Check 0 OK UP 1 WARNING (*) 2 CRITICAL DOWN/UNREACHABLE 3 UNKNOWN DOWN/UNREACHABLE
  • 6. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 6 Anforderungen II ● (3) Textausgabe für den Admin: – einzeilig auf STDOUT (ab Nagios 3.0 auch mehrzeilig, aber Rücksicht auf Nagios 2.x nehmen!) – Format: Name_des_Checks Status – Text – z.B.: CHECK_DU OK ­ /usr (520 MBytes) ● (4) Online-Hilfe – anstelle einer Manpage – bei Fehlbedienung und mit Option -h|--help
  • 7. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 7 Anforderungen III (5) Reservierte Optionen Kurzform Langform Beschreibung ­h ­­help Online-Hilfe, ggf. kurze und lange Version ­V ­­version Ausgabe der Plugin-Version ­V ­­verbose erhöht die Geschwätzigkeit ­h ­­hostname Hostname (IP-Adresse) ­t ­­timeout Timeout für den Abbruch des Checks ­w ­­warning Threshold für Warnschwelle ­c ­­critical Threshold für kritische Schwelle ­4 ­­use­ipv4 verwende IPv4 ­6 ­­use­ipv6 verwende IPv6 ­­community SNMP-Community-String bei SNMP-Abfragen ­u ­­user oder ­­url User (für Authentifikation) oder URL ­p ­­port oder ­­password TCP/UDP-Port oder Passwort für Authentifikation ­a ­­authentication REALM (z.B. Kerberos, SNMPv3) oder Passwort ­l ­­logname Login-Name ­C
  • 8. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 8 Anforderungen IV (6) Thresholds: Fehler, falls außerhalb eines Bereiches [@]start:end Beschreibung start muss kleiner gleich end sein! end start = 0 start: Bereich geht bis Unendlich ~:end ~ bedeutet negatives Unendlich @start:end Bereich wird negiert ­w 1:2 ­c 1:5 Wert < 1 oder > 5: CRITICAL; 3-5: WARNING ­c @10:20 start ≤ end CRITICAL, falls 10 ≤ Wert ≤ 20 ! Thresholds kennen keine Unit of Measurements!
  • 9. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 9 Anforderungen V (7) Timeout: – Jedes Plugin soll nach einem Timeout den Check hart abbrechen (Default: 10 sec.) – Verhindert Scheduling-Probleme (8) Performancedaten: text | var=value[uom];warn;crit;min;max – UOM = Unit Of Measurement: ● nichts ● s - Sekunden: s, ms, us, ... ● % - Prozentangaben (0-100) ● B - Bytes (auch: KB, MB, GB) ● c - Counter (stetig wachsender Zähler)
  • 10. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 10 Das Modul Nagios::Plugin ● Autor: Ton Voon ● aktuelle Version: 0.21 (2007-09-24) ● Installation: – perl -MCPAN -e 'install Nagios::Plugin' – ggf. vor der ersten CPAN-Benutzung das Modul 'CPAN' installieren (Bundle) – alternativ: ≥ nagios-plugins-1.4.10 ● Manpage: man Nagios::Plugin ● Demo
  • 11. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 11 Nagios::Plugin ohne CPAN ● Installation aus den nagios-plugins: cd perlmods make && make install ● Modul wird installiert nach:  /usr/local/nagios/bin/perl ● Verwendung im Plugin: use FindBin; use lib "$FindBin::Bin/../perl/lib"; use Nagios::Plugin; ● Suchpfad ist nun relativ zum Plugin- Verzeichnis
  • 12. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 12 Nagios::Plugin ● Konstanten: – OK, WARNING, CRITICAL, UNKNOWN ● Constructor (new) ● Optionen: getopt-like ● Exit-Funktionen: – nagios_exit(status, text) – nagios_die(text [,status]) ● Thresholds ● Performancedaten ● Message-Behandlung (experimentell)
  • 13. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 13 Projekt check_du.pl % du ­cs /var/log /var/spool 731468  /var/log 26448   /var/spool 757916  total ● Summe aller Dateien ausgeben ● prüfen, ob Schwellwerte überschritten werden ● Performance-Daten ● Online-Hilfe
  • 14. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 14 check_du.pl: Rumpf # ­­ main open( OUT, "LANG=C; /usr/bin/du ­cs $what 2>&1 |")     or $np­>nagios_die( "can't start /usr/bin/du" ); while (<OUT>) {    print "$_" if ($verbose);    chomp $_;        $denied++ if ( /Permission denied/i );    if ( /^(d+)s+total$/i ) {  # last line       $size = $1;       last;    } } close (OUT);
  • 15. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 15 Nagios::Plugin->new #!/usr/bin/perl ­w use strict; use warnings; # ­­ ggf. FindBin use Nagios::Plugin; my $np = Nagios::Plugin­>new(      shortname => "CHECK_DU"  ); ● Weitere Optionen: siehe manpage
  • 16. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 16 Getopt::Long use Getopt::Long qw(:config  no_ignore_case bundling); # ­­ GetOpt GetOptions(    "P|path=s"      => $what,    "w|warning=s"   => $warn_threshold,    "c|critical=s"  => $crit_threshold,    "h|help"        => $help,    "V|version"     => $printversion,    "v|verbose+"    => $verbose, ) or exit_with_unknown_and_help; argumente_auf_stichhaltigkeit_prüfen;
  • 17. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 17 Getopt/Hilfe: entweder/oder ● Entweder nur die Funktionen von Nagios::Plugin verwenden ● Oder nur Getopt::Long einsetzen ● Keinesfalls mischen! ● Dasselbe gilt für die Online-Hilfe
  • 18. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 18 POD - Perl Online Doku ● Inline-Dokumentation, steht direkt im Skript selbst ● formatierte Ausgabe als Manpage, usw. ● Aufruf: perldoc skript ● für die Batch-Verarbeitung – pod2html, pod2latex, pod2man – pod2text, pod2usage ● man perlpod; man perldoc; man man
  • 19. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 19 POD - Anweisungen =pod =head1 Heading Text =head2 Heading Text =head3 Heading Text =head4 Heading Text =over indentlevel =item stuff =back       =begin format =end format =for format text... =encoding type =cut      Demo
  • 20. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 20 POD - everywhere #!/usr/bin/perl ­w =head1 NAME .... =cut use strict; ... =head1 OPTIONS ... =cut ... perl code ... =head1 AUTHOR ... =cut
  • 21. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 21 Modul Pod::Usage pod2usage(   ­msg     => $message_text ,           ­exitval => $exit_status  ,   ­verbose => $verbose_level,   ­output  => $filehandle   ); ● Verbose: – 0: SYNOPSIS – 1: SYNOPSIS|OPTIONS|ARGUMENTS – 2: Alles – 99: über "-sections" frei wählbar ● Output: – stdout: bei verbose = 0 oder 1 – stderr: bei verbose = 2
  • 22. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 22 Pod::Usage in check_du.pl GetOptions(...) or pod2usage(     ­exitval => UNKNOWN,    ­verbose => 0,    ­msg     => "**unknown argument found**" ); pod2usage(­verbose => 2,           ­exitval => UNKNOWN,           ­output  => *STDOUT) if ( $help ); pod2usage(­msg => "n$0 ­­ version: $versionn",       ­verbose => 0,       ­exitval => UNKNOWN) if ( $printversion ); pod2usage(­msg => "**no path/pattern specified",       ­verbose => 0,       ­exitval => UNKNOWN) if ( "$what" eq "" );
  • 23. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 23 Thresholds # ­­ thresholds $np­>set_thresholds(    warning  => $warn_threshold,    critical => $crit_threshold ); # ­­ check $result = $np­>check_threshold($size); $np­>nagios_exit(     $result, "check size: $size kByte" );
  • 24. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 24 Messages in Nagios::Plugin ● noch sehr experimentell und veränderlich, daher nicht produktiv benutzen! ● ermitteln aus vorhandenem Text einen Fehlercode: – add_message( <CODE>, $message ); – check_messages() ● Details siehe Manpage
  • 25. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 25 Performancedaten $np­>add_perfdata(     label     => "size",     value     => $size,    uom       => "kB",     threshold => $np­>threshold()  ); # ­­ Ausgabe $np­>nagios_exit(     $result, "check size: $size kByte"); CHECK_DU WARNING ­ check size: 100 kByte |  size=100kB;200:;100:
  • 26. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 26 Timeout # ... getopt ... $SIG{ALRM} = sub {     $np­>nagios_die("Timeout reached");  }; alarm($timeout); # ... eigentlicher Code ... alarm(0);   # timeout stoppen Achtung: alarm() nicht zusammen mit sleep() verwenden!
  • 27. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 27 Konfigurationsdateien $Config = Nagios::Plugin::Config­>read(        '/etc/nagios/plugins.ini'  ); $Config = Nagios::Plugin::Config­>read();      $rootproperty = $Config­>{_}­>{rootproperty}; $pi    = $Config­>{mathe}­>{pi}; $euler = $Config­>{mathe}­>{euler}; # /etc/nagios/plugins.ini ­ windows ini style rootproperty=10.0 [mathe] pi=3.1415 euler=2.78
  • 28. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 28 Troubleshooting ● Pragmas zur Fehlervermeidung/-Suche: #!/usr/bin/perl ­w use strict; use warnings; ... ● Deparse: perl ­MO=Deparse plugin.pl ● Debbuging-Ausgaben: print "xyzn" if ($debug);
  • 29. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 29 Literatur/Bücher ● Larry Wall, Tom Christiansen, JonOrwant, Randal Schwartz: Programmieren in Perl (O'Reilly) ● Tom Christiansen, Nathan Torkington: Perl Kochbuch (O'Reilly) ● cromatic: Perl Hacks (O'Reilly) ● Damian Conway: Perl Best Practices (O'Reilly) ● Fahrid Hajji: Perl (Addison-Wesley) ● Johan Vromans: Perl 5 kurz & gut
  • 30. Eigene Plugins in Perl entwickeln @ NETWAYS Nagios Konferenz © Wolfgang Barth 2007 30 Literatur/Internet ● www.cpan.org ● www.annocpan.org ● perldoc.perl.org ● nagios.sourceforge.net/docs/3_0 ● nagiosplug.sourceforge.net ● nagiosplugins.org (neu)