SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
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)

Contenu connexe

Tendances

Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreGregor Biswanger
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Gregor Biswanger
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungFrank Schmittlein
 
Drupal Basics (7-8) Vortrag (01.2016)
Drupal Basics (7-8) Vortrag (01.2016)Drupal Basics (7-8) Vortrag (01.2016)
Drupal Basics (7-8) Vortrag (01.2016)Peter_Majmesku
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungTilo Baller
 
IfN Studienarbeit Abschlusspres 18.9.2007
IfN Studienarbeit Abschlusspres 18.9.2007IfN Studienarbeit Abschlusspres 18.9.2007
IfN Studienarbeit Abschlusspres 18.9.2007derDoc
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenTorsten Kleiber
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Torsten Kleiber
 
Zend Framework 2.0
Zend Framework 2.0Zend Framework 2.0
Zend Framework 2.0Ralf Eggert
 
OSMC 2009 | PNP4Nagios by Jörg Linge
OSMC 2009 | PNP4Nagios by Jörg LingeOSMC 2009 | PNP4Nagios by Jörg Linge
OSMC 2009 | PNP4Nagios by Jörg LingeNETWAYS
 
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsAber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-AppsGregor Biswanger
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookUlrich Krause
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit MavenStefan Scheidt
 
Nagios Conference 2006 | SAP Monitoring II - Die technische Umsetzung by Wolf...
Nagios Conference 2006 | SAP Monitoring II - Die technische Umsetzung by Wolf...Nagios Conference 2006 | SAP Monitoring II - Die technische Umsetzung by Wolf...
Nagios Conference 2006 | SAP Monitoring II - Die technische Umsetzung by Wolf...NETWAYS
 

Tendances (20)

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

Similaire à Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth

OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
 
SLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauenSLAC 2008 RPMs selber bauen
SLAC 2008 RPMs selber bauenSchlomo Schapiro
 
OSMC 2008 | Nagios für Einsteiger by Sven Velt
OSMC 2008 | Nagios für Einsteiger by Sven VeltOSMC 2008 | Nagios für Einsteiger by Sven Velt
OSMC 2008 | Nagios für Einsteiger by Sven VeltNETWAYS
 
Azure Notebooks
Azure NotebooksAzure Notebooks
Azure NotebooksTEitelberg
 
2011 12 05 KLUG Karl Franzens Universität Graz Linux User Group
2011 12 05 KLUG Karl Franzens Universität Graz Linux User Group2011 12 05 KLUG Karl Franzens Universität Graz Linux User Group
2011 12 05 KLUG Karl Franzens Universität Graz Linux User GroupMatthias Praunegger
 
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeOSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeNETWAYS
 
Extbase/Fluid: Kennenlernen und ausprobieren
Extbase/Fluid: Kennenlernen und ausprobierenExtbase/Fluid: Kennenlernen und ausprobieren
Extbase/Fluid: Kennenlernen und ausprobierenSpeedPartner GmbH
 
PhpStorm 6 Configuration for TYPO3
PhpStorm 6 Configuration for TYPO3PhpStorm 6 Configuration for TYPO3
PhpStorm 6 Configuration for TYPO3marco-huber
 
Drupal 8 templating alles neu mit twig
Drupal 8 templating   alles neu mit twigDrupal 8 templating   alles neu mit twig
Drupal 8 templating alles neu mit twigSteffen Rühlmann
 
NetBeans für PHP-Entwickler
NetBeans für PHP-EntwicklerNetBeans für PHP-Entwickler
NetBeans für PHP-EntwicklerIngo Reinhart
 
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas LangeOSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas Lange
OSDC 2010 | FAI - ein Projekt wird 10 Jahre alt by Thomas LangeNETWAYS
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als CodeJan Gehring
 
20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatengeKarin Patenge
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Joachim Baumann
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance ReloadedGregor Goldbach
 
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsJavaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsStephan Kaps
 
Python-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipsePython-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipseThomas Koch
 

Similaire à Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth (20)

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

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)