SlideShare ist ein Scribd-Unternehmen logo

Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth

NETWAYS
NETWAYS

Nicht immer findet sich ein passendes Plugin für die konkrete Aufgabenstellung. Dann ist Eigenbau angesagt. Plugins selbst zu schreiben ist nicht schwer, vorausgesetzt, man hält einige Spielregeln ein. Dieser Workshop zeigt auf, wie man in Perl Plugins erstellt, die sich an die wichtigsten Spielregeln halten. Die Programmierung erleichtert das Perlmodul Nagios::Plugin von Ton Voon, dem Maintainer der offiziellen Nagios-Plugins. Neben dem Modul Nagios::Plugin kommt auch das Modul GetOpt::Long für die Zerlegung der Kommandozeile und die Perl-Online-Dokumentation (POD) zur Sprache. Für die Ausführung von Perl-Plugins liefert Nagios einen integrierten Perl-Interpreter mit (ePN – embedded Perl Nagios), der allerdings besondere Anforderungen an ein Plugin stellt. Der Workshop geht auch auf die nicht immer einfache Fehlersuche ein, mit der man konfrontiert wird, wenn ein unter normalen Umständen funktionierendes Plugin nicht so recht mit ePN zusammen arbeiten mag. Aus dem Inhalt: Standard-Anforderungen an ein Plugin Rückgabewerte und Textausgaben Verarbeitung der Kommandozeile Online-Hilfe und integrierte Manpage Die Sache mit dem Timeout Formate für Schwellwerte: Thresholds Ausgabe von Performancedaten Konfigurationdateien für ein Plugins verwenden ePN, der embedded Perl-Interpreter: Anforderungen, Fehlersuche. Der Workshop richtet sich an Teilnehmer mit Programmierkenntnissen in einer Skriptsprache und zumindest einfachen Perl-Grundkenntnissen. Die Plugin-Erstellung erfolgt unter Linux.

1 von 30
Downloaden Sie, um offline zu lesen
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

Recomendados

Ausfallsichere Kultur mit Plone
Ausfallsichere Kultur mit PloneAusfallsichere Kultur mit Plone
Ausfallsichere Kultur mit PloneJens Klein
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3Roman Hutterer
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerGregor Biswanger
 
Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine
Schlangenhochzeit in-der Wolke - Pyramid auf Google AppengineSchlangenhochzeit in-der Wolke - Pyramid auf Google Appengine
Schlangenhochzeit in-der Wolke - Pyramid auf Google AppengineJens Klein
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrGunther Pippèrr
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 

Más contenido relacionado

Was ist angesagt?

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
 

Was ist angesagt? (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...
 

Ähnlich wie 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
 

Ähnlich wie 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)