kann die Diplomarbeit heruntergeladen werden. - bei BS-NetSolutions
kann die Diplomarbeit heruntergeladen werden. - bei BS-NetSolutions
kann die Diplomarbeit heruntergeladen werden. - bei BS-NetSolutions
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Fachhochschule Braunschweig/Wolfenbüttel<br />
Fachbereich Informatik<br />
Heterogenes Server-Monitoring unter Einsatz des<br />
OpenSource-Tools Nagios®<br />
<strong>Diplomar<strong>bei</strong>t</strong><br />
von<br />
Sven Schaffranneck<br />
Stu<strong>die</strong>ngang: Praktische Informatik<br />
Matrikelnr.: 20066338<br />
Datum: 18.08.2004<br />
Betreuer:<br />
Fachhochschule Braunschweig/Wolfenbüttel<br />
Fachbereich Informatik<br />
Prof. Dr. U. Klages<br />
Volkswagen AG<br />
K-DOI-5/4<br />
Systems Management<br />
Dipl.-Ing. Hans-Werner Buske<br />
Dipl.-Ing. (FH) Hans Fricke
- II -<br />
Kurzfassung<br />
Diese <strong>Diplomar<strong>bei</strong>t</strong> zeigt systematisch den Aufbau einer Enterprise Server-Überwachung mit<br />
Hilfe des OpenSource-Tools Nagios. Da<strong>bei</strong> wird im Wesentlichen auf <strong>die</strong> vorgegebenen<br />
Eckdaten seitens des betreuenden Unternehmens eingegegangen. Gerade <strong>die</strong> heterogene IT-<br />
Landschaft sowie <strong>die</strong> grosse Anzahl der zu überwachenen Services stellen hohe<br />
Anforderungen an das einzusetzende Tool.<br />
Die zentrale, Plugin-basierte Architektur von Nagios überzeugt durch Transparenz und<br />
geringe Komplextität. Die praxisnahen Features reichen von Event-Unterdrückung bis zu<br />
intelligentem Scheduling.<br />
Anhand eines Proof of Concepts wird der Einsatz einer Nagios-Überwachung in der IT-<br />
Umgebung der Volkswagen AG evaluiert. Die verwendeten Server und Betriebssysteme<br />
repräsentieren <strong>die</strong> strategischen Plattformen des Unternehmens. Neben der generellen<br />
Verfügbarkeit der Plugins auf den spezifischen Plattformen zeigen Performance-Messungen<br />
<strong>die</strong> zu erwartende Last des Nagios-Servers im praktischen Einsatz.<br />
Nagios zeigt im Laufe des Proof of Concepts hohe Stabilität und Zuverlässigkeit. Der offene<br />
Quelltext bietet Flexibilität und ermöglicht schnelle Fehlerkorrekturen. Nagios bringt eigene<br />
Konzepte für ausfallsicheres sowie verteiltes Monitoring mit und <strong>kann</strong> mit Hilfe<br />
unterschiedlicher Vorgehensweisen auch in Firewall-Umgebungen agieren.<br />
In Summe lässt <strong>die</strong>s den Autor zu dem Schluss kommen, den Einsatz von Nagios in der IT-<br />
Umgebung der Volkswagen AG Wolfsburg zu befürworten.
- III -<br />
Danksagung<br />
Die vorliegende <strong>Diplomar<strong>bei</strong>t</strong> wurde in der Zeit von Mai bis August 2004 <strong>bei</strong> der<br />
Volkswagen AG Wolfsburg in der Unterabteilung K-DOI-5/4 Systems Management<br />
angefertigt.<br />
Für <strong>die</strong> freundliche Aufnahme und vielfältige Unterstützung möchte ich mich <strong>bei</strong> allen<br />
Mitar<strong>bei</strong>tern der Unterabteilung K-DOI-5/4 bedanken.<br />
Besonderer Dank gilt meinen Betreuern Herrn Buske und Herrn Fricke, <strong>die</strong> stets ein offenes<br />
Ohr für meine Probleme und Anregungen hatten. Dieser Dank gebührt ebenso Herrn Meister<br />
(K-DOI-1/1) sowie den Mitar<strong>bei</strong>tern der Firmen Pluralis AG, gedas deutschland GmbH und<br />
IBM, namentlich Andreas Schmutzler, Dirk Lammers und Martin Adamiak.<br />
Für <strong>die</strong> Betreuung und Unterstützung seitens der Fachhochschule Braunschweig/Wolfenbüttel<br />
möchte ich mich <strong>bei</strong> Herrn Klages bedanken.<br />
Ebenso bedanke ich mich <strong>bei</strong> Claudia Sturm und Carsten Poels für <strong>die</strong> konstruktiven<br />
Diskussionen, Vorschläge und Anregungen <strong>bei</strong> der Erstellung der <strong>Diplomar<strong>bei</strong>t</strong>.<br />
Sven Schaffranneck, August 2004
- IV -<br />
Inhaltsverzeichnis<br />
Inhaltsverzeichnis................................................................................................................... IV<br />
Abkürzungsverzeichnis.......................................................................................................VIII<br />
Abbildungsverzeichnis..........................................................................................................XII<br />
1. Einleitung.............................................................................................................................13<br />
1.1 Aufgabe und Struktur des Rechenzentrums................................................................... 13<br />
1.2 Kenndaten der IT-Infrastruktur.......................................................................................14<br />
1.3 Relevanz des Server-Monitorings.................................................................................. 15<br />
1.4 Gliederung der Ar<strong>bei</strong>t.....................................................................................................15<br />
2. IT Infrastructure Library (ITIL)...................................................................................... 16<br />
2.1 Vorteile des IT Service Managements............................................................................16<br />
2.2 Umfang der IT Infrastructure Library.............................................................................17<br />
2.3 Service Support.............................................................................................................. 19<br />
2.4 Service Delivery............................................................................................................. 21<br />
3. Incident Management in der Praxis.................................................................................. 23<br />
3.1 Incident Management Prozess........................................................................................23<br />
3.2 Incident- und Event-Management <strong>bei</strong> der Volkswagen AG...........................................24<br />
3.3 Server-Monitoring.......................................................................................................... 25<br />
3.3.1 Manuelle Überwachung..........................................................................................25<br />
3.3.2 Automatisierte Überwachung................................................................................. 26<br />
3.3.3 IBM/Tivoli im Einsatz <strong>bei</strong> der Volkswagen AG.................................................... 27<br />
4. Konzept von Nagios.............................................................................................................31<br />
4.1 Architekturbedingte Unterschiede zu IBM/Tivoli..........................................................32<br />
4.1.1 zentraler Ansatz...................................................................................................... 33<br />
4.1.2 dezentraler Ansatz.................................................................................................. 33<br />
4.1.3 Gegenüberstellung IBM/Tivoli und Nagios............................................................34<br />
4.2 Überwachung lokaler Ressourcen mit Nagios................................................................35<br />
4.3 Überwachung entfernter, öffentlicher Ressourcen......................................................... 38<br />
4.4 Überwachung entfernter, privater Ressourcen............................................................... 39<br />
4.4.1 Nagios Remote Plugin Executor (NRPE)...............................................................39<br />
4.4.1.1 Konzept und Implementierung........................................................................39<br />
4.4.1.2 Sicherheitsmerkmale.......................................................................................40<br />
4.4.1.3 Konfiguration................................................................................................. 41
- V -<br />
4.4.1.4 Aufruf des check_nrpe.................................................................................... 43<br />
4.4.1.5 Zusammenfassung...........................................................................................44<br />
4.4.2 Nagios Service Check Acceptor (NSCA)...............................................................45<br />
4.4.2.1 Konzept und Implementierung........................................................................45<br />
4.4.2.2 Sicherheitsmerkmale.......................................................................................47<br />
4.4.2.3 Konfiguration des NSCA-Daemons................................................................48<br />
4.4.2.4 Konfiguration des NSCA-Clients (send_nsca)............................................... 51<br />
4.4.2.5 Aufruf des send_nsca......................................................................................51<br />
4.4.2.6 Zusammenfassung...........................................................................................53<br />
4.4.3 Plugin check_by_ssh...............................................................................................54<br />
4.4.3.1 Konzept und Implementierung........................................................................54<br />
4.4.3.2 Sicherheitsmerkmale.......................................................................................55<br />
4.4.3.3 Konfiguration der Secure Shell (SSH)............................................................55<br />
4.4.3.4 Aufruf des check_by_ssh Plugins................................................................... 56<br />
4.4.3.5 Zusammenfassung ..........................................................................................58<br />
4.4.4 Fazit........................................................................................................................ 59<br />
4.5 Distributed Monitoring...................................................................................................60<br />
4.5.1 Architektur..............................................................................................................61<br />
4.5.2 Konfiguration..........................................................................................................62<br />
4.6 Failover Monitoring........................................................................................................64<br />
4.6.1 Architektur..............................................................................................................64<br />
4.6.2 Konfiguration und Voraussetzungen...................................................................... 65<br />
5. Funktionale Details............................................................................................................. 68<br />
5.1 Service- und Host-Abhängigkeiten................................................................................ 68<br />
5.1.1 Architektur..............................................................................................................68<br />
5.1.2 Konfiguration..........................................................................................................71<br />
5.2 Soft und Hard States.......................................................................................................73<br />
5.2.1 Soft States............................................................................................................... 73<br />
5.2.2 Hard State............................................................................................................... 74<br />
5.3 State Flapping.................................................................................................................75<br />
5.3.1 Implementierung.....................................................................................................75<br />
5.3.2 Konfiguration..........................................................................................................77<br />
5.3.3 Auswirkungen.........................................................................................................77<br />
5.4 Freshness-Check.............................................................................................................78
- VI -<br />
5.5 Scheduling mit Interleaving............................................................................................79<br />
5.5.1 Konfiguration..........................................................................................................79<br />
5.5.2 Funktionsweise des Interleaving.............................................................................81<br />
6. Plugins.................................................................................................................................. 84<br />
6.1 Standard Plugins.............................................................................................................85<br />
6.2 Contributed Plugins........................................................................................................91<br />
7. Proof of Concept (PoC).......................................................................................................92<br />
7.1 Zielsetzung..................................................................................................................... 92<br />
7.2 Anforderungen an das Server-Monitoring......................................................................93<br />
7.2.1 Plattformen............................................................................................................. 93<br />
7.2.2 Service-Überwachung.............................................................................................93<br />
7.2.2.1 Filesystem-Überwachung............................................................................... 93<br />
7.2.2.2 Prozess-Überwachung....................................................................................94<br />
7.2.2.3 Auslagerungsspeicher-Überwachung.............................................................96<br />
7.3 Beschreibung des PoC....................................................................................................97<br />
7.4 Installation des Nagios Servers.......................................................................................98<br />
7.4.1 Voraussetzung.........................................................................................................98<br />
7.4.2 Installation............................................................................................................ 100<br />
7.4.2.1 Apache Installation.......................................................................................101<br />
7.4.2.2 Nagios Installation....................................................................................... 103<br />
7.4.2.3 Installation der Plugins................................................................................ 104<br />
7.4.2.4 Installation des check_nrpe.......................................................................... 104<br />
7.4.2.5 Installation des NSCA...................................................................................105<br />
7.4.3 Konfiguration von Nagios.................................................................................... 106<br />
7.4.3.1 Modifikationen an cgi.cfg.............................................................................106<br />
7.4.3.2 Modifikationen an checkcommands.cfg........................................................108<br />
7.4.3.3 Modifikationen an contactgroups.cfg...........................................................109<br />
7.4.3.4 Modifikationen an contacts.cfg.....................................................................110<br />
7.4.3.5 Modifikationen an dependencies.cfg............................................................ 111<br />
7.4.3.6 Modifikationen an escalations.cfg................................................................111<br />
7.4.3.7 Modifikationen an hostgroups.cfg................................................................ 111<br />
7.4.3.8 Modifikationen an hosts.cfg..........................................................................112<br />
7.4.3.9 Modifikationen an misccommands.cfg......................................................... 113<br />
7.4.3.10 Modifikationen an nagios.cfg..................................................................... 114
- VII -<br />
7.4.3.11 Modifikationen an ressource.cfg................................................................ 115<br />
7.4.3.12 Modifikationen an services.cfg................................................................... 115<br />
7.4.3.13 Modifikationen an timeperiods.cfg.............................................................116<br />
7.4.4 Start des Nagios Servers....................................................................................... 117<br />
7.5 Vorbereitung der Agenten für <strong>die</strong> remote Hosts.......................................................... 120<br />
7.6 Installation der Agenten auf den remote Hosts............................................................ 124<br />
7.6.1 Voraussetzung und Vorbereitung......................................................................... 124<br />
7.6.2 Installation............................................................................................................ 124<br />
7.6.3 Einsatz von send_nsca.......................................................................................... 126<br />
7.6.4 Einsatz von check_by_ssh.................................................................................... 127<br />
7.7 Besonderheiten und Hinweise für AIX........................................................................ 129<br />
7.8 Besonderheiten und Hinweise für HP-UX................................................................... 131<br />
7.9 Besonderheiten und Hinweise für Linux (Intel/s390).................................................. 132<br />
7.10 Remote Hosts hinter einer Firewall............................................................................133<br />
7.11 Performance................................................................................................................134<br />
7.11.1 Systemauslastung <strong>bei</strong> 980 Checks/Minute......................................................... 135<br />
7.11.2 Systemauslastung <strong>bei</strong> 490 Checks/Minute......................................................... 137<br />
7.11.3 Skalierbarkeit durch Veränderung der Prozessoranzahl.....................................138<br />
8. Ergebnis............................................................................................................................. 140<br />
9. Ausblick..............................................................................................................................140<br />
Anhang................................................................................................................................... 141<br />
Literaturverzeichnis..............................................................................................................156<br />
Verzeichniss der relevanten Internet Links........................................................................158<br />
Eidesstattliche Erklärung
- VIII -<br />
Abkürzungsverzeichnis<br />
• CPU<br />
Central Processing Unit: Ein Prozessor ist für <strong>die</strong> Verar<strong>bei</strong>tung der Daten in einem<br />
Rechnersystem verantwortlich.<br />
• CVS<br />
Concurrent Versions System: bezeichnet eine Software zur Versionsverwaltung von<br />
Quellcode.<br />
• Daemon<br />
Als Daemon wird unter Unix ein Prozess bezeichnet, welcher im Hintergrund läuft. Einmal<br />
gestartet, wartet er auf bestimmte Ereignisse und tritt dann in Aktion. Daemons haben<br />
meistens keine direkte Ausgabe auf <strong>die</strong> Systemkonsole. Sie schreiben ihre Meldungen in<br />
<strong>die</strong> Log-Dateien des Unix-Systems.<br />
• DES<br />
Der Data Encryption Standard ist einer der be<strong>kann</strong>testen Algorithmen für symmetrische<br />
Verschlüsselung. Beim 3DES (Tripple DES) wird <strong>die</strong>ser dreifach hintereinander<br />
angewendet, um eine höhere Sicherheit zu erreichen.<br />
• DHCP<br />
Dynamic Host Configuration Protocol: Dient zur dynamischen Vergabe von IP-Adressen<br />
an Client-Rechnern. Der zu konfigurierende Client muß keine IP-Adresse kennen. Er<br />
sendet einen Broadcast, um DHCP Server zu finden. Aus den Rückmeldungen der DHCP-<br />
Server wählt der Client einen Server aus und erhält von <strong>die</strong>sem dann <strong>die</strong> geleaste IP-<br />
Adresse, sowie <strong>die</strong> Netmask, default Gateway und <strong>die</strong> IP-Adressen der DNS-Server. Nach<br />
dem Ende der Lease-Time erhält der Client eine neue IP-Adresse.<br />
• DNS<br />
Domain Name Service: Ein Dienst zum Auflösen von symbolischen Internet-Adressen in<br />
IP-Adressen.<br />
• FTP<br />
File Transfer Protocol: Ein Protokoll zum Übertragen von Dateien von einem Rechner auf<br />
einen anderen. FTP setzt auf TCP/IP auf.
- IX -<br />
• GNU<br />
GNU ist eine rekursive Abkürzung von GNU's Not Unix. Das GNU-Projekt wurde 1984<br />
begonnen, um ein vollständiges, Unix-artiges Betriebssystem zu entwickeln, das freie<br />
Software ist.<br />
• GPL<br />
Die GNU General Public Licenses erlaubt legales kopieren, verbreiten und/oder<br />
Veränderungen der Quellen.<br />
Einzusehen unter http://www.gnu.org/copyleft/gpl.html<br />
• GUI<br />
Graphical User Interface: Grafische Nutzeroberfläche.<br />
• HTTP<br />
Hyper Text Transfer Protocol: Protokoll zur Übertragung von Dokumenten im Internet.<br />
• iLinux<br />
Das „i“ steht für Intel und beschreibt ein Linux, welches auf Intel-basierender Hardware<br />
läuft.<br />
• IPv4<br />
Internet Protocol, Version 4<br />
• IPv6<br />
Internet Protocol, Version 6: Es wurde der Adressumfang gegenüber IPv4 erweitert und<br />
Teile des IP-Headers verändert, um weniger Overhead <strong>bei</strong> den Paketen mitzuführen.<br />
• ITIL<br />
Die IT Infrastructure Library ist ein IT Service Management Leitfaden, welcher Ende der<br />
80er Jahre von der britischen Behörde CCTA (Central Computer and<br />
Telecommunications Agency) für <strong>die</strong> Regierung entwickelt wurde.<br />
• Kernel<br />
Eine Binärdatei, welche <strong>die</strong> Ressourcen der Hardware verwaltet.<br />
• LDAP<br />
Lightwight Directory Access Protocol: Protokoll zur Kommunikation mit einem LDAP-<br />
Server. LDAP bietet auf einer Protokollschicht Zugriff auf einen Verzeichnis<strong>die</strong>nst.<br />
• NFS<br />
Mit dem Network File System können Verzeichnisse über das Netzwerk freigegeben<br />
<strong>werden</strong>.
- X -<br />
• NIS<br />
Network Information Service: Bei NIS handelt es sich um Sun Microsystems YP (yellow<br />
pages) Client-Server-Protokoll für <strong>die</strong> Verteilung von Systemkonfigurationen wie<br />
Benutzer, Passwörter und Hostnames.<br />
• Pipe<br />
Pipes ermöglichen den Transport von Daten zwischen Prozessen nach der First In, First<br />
Out (FIFO) Methode.<br />
• POP<br />
Post Office Protocol: Ein Protokoll zum Empfangen von eMails von einem POP-<br />
Mailserver.<br />
• RPM<br />
Red Hat Package Manager: Paketformat der installierbaren Software unter Red Hat Linux<br />
und z. T. auch anderen Distributionen sowie Unices.<br />
• SAMBA<br />
Ein Softwarepaket bestehend aus zwei Services und mehreren Anwendungen für folgende<br />
Möglichkeiten: Nachbilden eines NT-File-Servers, Zugriff auf Windows-SMB-Dienste wie<br />
freigegebene Verzeichnisse oder NT-Drucker-Server.<br />
• SLA<br />
Service Level Agreements sind Vereinbarungen zwischen Anbieter und Kunden. Sie<br />
definieren exakt den Umfang der Leistungen des Anbieters.<br />
• SMB<br />
Server Message Block: Das Protokoll <strong>die</strong>nt im Microsoft Windows Umfeld der<br />
Kommunikation mit den Shares.<br />
• SMTP<br />
Das Simple Mail Transfer Protocol <strong>die</strong>nt dazu, ausgehende eMails an den eMail-Server zu<br />
transportieren.<br />
• SNMP<br />
Abkürzung für Simple Network Management Protocol und ein Teil der Internet Protokolle,<br />
<strong>die</strong> von der Internet Enginieering Task Force definiert wurden. Das Protokoll <strong>die</strong>nt der<br />
Verwaltung und Überwachung von Netzelementen, <strong>die</strong> überwiegend aus dem LAN Bereich<br />
stammen (z.B. Router, Server, etc). SNMP überträgt und verändert<br />
Managementinformationen und Alarme.
- XI -<br />
• SQL<br />
Stuctured Query Language: Sprache zur Kommunikation mit einer SQL-fähigen<br />
Datenbank.<br />
• TCP<br />
Transmission Control Protocol: Überwacht den Weg und <strong>die</strong> Reihenfolge, in der<br />
Datenpakete übertragen <strong>werden</strong>.<br />
• TCP/IP<br />
Transmission Control Protocol / Internet Protocol: Mittels der Verbindung <strong>die</strong>ser <strong>bei</strong>den<br />
Protokolle <strong>werden</strong> Daten in IP-basierenden Umgebungen übertragen.<br />
• WWW<br />
World Wide Web: ein Synonym für das Internet.<br />
• zLinux<br />
Bezeichnet <strong>die</strong> Implementierung des freien Betriebssystems Linux auf IBM zSeries<br />
Hardware (S/390).<br />
• Zombie<br />
Ein Zombie ist ein beendeter Kindprozess, dessen Vaterprozess es versäumt hat, den<br />
Exitstatus des Kindprozesses mit einem wait()-Call abzufragen. Bis <strong>die</strong>ses geschehen ist<br />
(oder der Vaterprozess beendet wurde), bleibt der Prozess in der Prozesstabelle als Zombie<br />
bestehen.
Abbildungsverzeichnis<br />
- XII -<br />
Abbildung 1 Organisatorische Eingliederung........................................................................... 15<br />
Abbildung 2 ITSM Disziplinen.................................................................................................19<br />
Abbildung 3 Incident Management Prozesse............................................................................24<br />
Abbildung 4 Tivoli Managed Region........................................................................................29<br />
Abbildung 5 zentraler/dezentraler Ansatz.................................................................................33<br />
Abbildung 6 Überwachung lokaler Ressourcen........................................................................36<br />
Abbildung 7 Nagios Webinterface Service Details...................................................................38<br />
Abbildung 8 Überwachung entfernter, öffentlicher Ressourcen...............................................39<br />
Abbildung 9 Indirekter Service-Check mit NRPE....................................................................40<br />
Abbildung 10 Passiver Service-Check mit NSCA....................................................................47<br />
Abbildung 11 Longrunner mit NSCA und NRPE.....................................................................48<br />
Abbildung 12 Passiver Service-Check im Webfrontend...........................................................53<br />
Abbildung 13 Indirekter Service-Check mit check_by_ssh......................................................55<br />
Abbildung 14 Distributed Monitoring...................................................................................... 62<br />
Abbildung 15 Failover Monitoring........................................................................................... 65<br />
Abbildung 16 Beispiel von Service-Abhängigkeiten................................................................70<br />
Abbildung 17 Beispiel von Host-Abhängigkeiten.................................................................... 73<br />
Abbildung 18 Service State Transitions....................................................................................76<br />
Abbildung 19 Weighted State Transitions................................................................................ 77<br />
Abbildung 20 Scheduling ohne Interleaving 1..........................................................................82<br />
Abbildung 21 Scheduling ohne Interleaving 2..........................................................................82<br />
Abbildung 22 Scheduling mit Interleaving, Anfang................................................................. 83<br />
Abbildung 23 Scheduling mit Interleaving, erste Durchgang...................................................83<br />
Abbildung 24 Scheduling mit Interleaving, dritter Durchgang.................................................84<br />
Abbildung 25 Nagios Webfrontend: Tacticel Overview nach erstem Start............................120<br />
Abbildung 26 PAP zur Installation eines remote Hosts..........................................................126<br />
Abbildung 27 Nagios Performance Info................................................................................. 135<br />
Abbildung 28 CPU-Usage <strong>bei</strong> 980 Checks/Minute................................................................ 136<br />
Abbildung 29 CPU Load <strong>bei</strong> 980 Checks/Minute.................................................................. 137<br />
Abbildung 30 CPU-Usage <strong>bei</strong> 490 Checks/Minute................................................................ 138<br />
Abbildung 31 CPU-Load <strong>bei</strong> 490 Checks/Minute.................................................................. 138<br />
Abbildung 32 CPU-Load <strong>bei</strong> 490 Checks/Minute (1 Prozessor)............................................139<br />
Abbildung 33 CPU-Load <strong>bei</strong> 490 Checks/Minute (1 Prozessor)............................................140
1. Einleitung<br />
- 13 -<br />
Aufbauend auf der Stu<strong>die</strong>nar<strong>bei</strong>t Schaffranneck, Sven, (2004) „Analyse ausgewählter Event-<br />
Management-Tools auf Basis der Anforderungen der Volkswagen AG unter Berücksichtigung<br />
von OpenSource“ soll <strong>die</strong>se Ar<strong>bei</strong>t anhand eines Proof of Concepts (PoC) den möglichen<br />
Einsatz von Nagios <strong>bei</strong> der Volkswagen AG praktisch evaluieren. Da<strong>bei</strong> sollen <strong>die</strong><br />
Möglichkeiten und Grenzen in praktischen Versuchen dargelegt <strong>werden</strong>. Das Ziel ist <strong>die</strong><br />
Überwachung einer hohen Anzahl von Servern auf verschiedensten Unix-Plattformen.<br />
1.1 Aufgabe und Struktur des Rechenzentrums<br />
Unsere heutige Gesellschaft wird auch als Informationsgesellschaft bezeichnet. Gestützt durch<br />
Computer und Netzwerke <strong>werden</strong> <strong>die</strong> Informationen in Form von Daten gespeichert und<br />
verwaltet. Die Technik trägt damit maßgeblich zum Erfolg eines Unternehmens <strong>bei</strong>.<br />
Entscheidend ist da<strong>bei</strong> neben dem schnellen und flexiblen Zugriff auf Informationen <strong>die</strong><br />
ständige Verfügbarkeit.<br />
Erreicht <strong>werden</strong> <strong>kann</strong> <strong>die</strong>s nur durch ein optimales Zusammenspiel einzelner Komponenten<br />
der Computer-Infrastruktur, primär in Form eines Netzwerkes. Der Trend geht zu immer<br />
größeren Netzen und verteilten Anwendungen, <strong>die</strong> einer immer größeren Anzahl von<br />
Anwendern den Zugriff auf Applikationen und Daten ermöglichen.<br />
In Anbetracht der gesteigerten Anforderungen und der Größe des Volkswagen Konzerns,<br />
erweiterten sich <strong>die</strong> Aufgaben und Tätigkeiten des Rechenzentrums von einfachen<br />
Rechentätigkeiten zu einem komplexen Zentrum für Informationsverar<strong>bei</strong>tung.<br />
Aus <strong>die</strong>sem Grund wir das Rechenzentrum <strong>bei</strong> der Volkswagen AG „Informationssysteme<br />
Technik und Betrieb“ genannt und ist dem Ressort „Führungsorganisation und Systeme“<br />
eingegliedert. 1<br />
1 Vgl: Twele, Horst (2000), S. 10ff
- 14 -<br />
Unterteilt wird der Bereich „Informationssysteme Technik und Betrieb“ (K-DOI) in<br />
Serversysteme (K-DOI-1), Middleware (K-DOI-2), Kommunikationssysteme (K-DOI-3),<br />
Betriebssteuerung (K-DOI-4), Betrieb Rechner & Netzwerke (K-DOI-5),<br />
Client Services (K-DOI-6), Projekt Global Client Services (K-DOI-7) und IT Infrastruktur<br />
Konzern/Markengruppe Volkswagen (K-DOI-8). Abbildung 1 verdeutlicht <strong>die</strong><br />
Gliederungsstruktur.<br />
Abbildung 1 Organisatorische Eingliederung<br />
eigene Darstellung<br />
1.2 Kenndaten der IT-Infrastruktur<br />
Das Rechenzentrum der Volkswagen AG Wolfsburg umfasst laut der Präsentation<br />
„Ihr IT-Powershop“ von Dirk Pollmeier (2003) eine (Rechner-) Fläche von 3600qm. Die<br />
Leistungsaufnahme wird mit ca. 20.000.000 kWh/Jahr angegeben, was dem<br />
durchschnittlichen Bedarf von 4000 Einfamilienhäusern entspricht.<br />
Die 2200 Server besitzen zusammen eine Speicherkapazität von ca. 1500 Terabyte<br />
(1,5 Petabyte) und <strong>werden</strong> von 220 Mitar<strong>bei</strong>tern (RZ Betrieb) betreut.<br />
Um den Anspruch an hohe Verfügbarkeit gerecht zu <strong>werden</strong>, teilt sich das Rechenzentrum auf<br />
4 Standorte auf und besitzt vielfältige Redundanz. Darunter fallen nicht nur redundante<br />
Hardware, sondern auch redundante Stromversorgungen und Klimaanlagen.
- 15 -<br />
1.3 Relevanz des Server-Monitorings<br />
Mit steigender Komplexität der Systeme steigt auch <strong>die</strong> Anzahl der potenziellen Fehlerquellen<br />
und Sicherheitslücken. Eine umfassende Überwachung wird zunehmend problematischer.<br />
Abhilfe schaffen hier automatisierte Systems-Management-Werkzeuge, <strong>die</strong> qualitative<br />
Aussagen über den Systemzustand geben können. Darunter fallen unter anderem <strong>die</strong><br />
Leistungsdaten (Performance) von Netzwerken, Servern und den darauf laufenden<br />
Applikationen. Das Ziel, Fehler und Leistungsengpässe frühzeitig zu erkennen und darauf<br />
reagieren zu können, ist <strong>die</strong> Hauptaufgabe des Server-Monitorings.<br />
1.4 Gliederung der Ar<strong>bei</strong>t<br />
In Kapitel 2 wird zunächst auf <strong>die</strong> Theorie und Hintergründe des IT-Managements nach ITIL<br />
eingegangen. Im Anschluss daran stellt das Kapitel 3 den Einsatz des Incident Managements<br />
in Theorie und Praxis dar. Anhand <strong>die</strong>ser Grundlagen wird das Konzept und <strong>die</strong> wesentliche<br />
Funktionalität von Nagios in den Kapiteln 4 bis 6 verdeutlicht, um als Fundament für das<br />
Proof of Concept (Kapitel 7) zu <strong>die</strong>nen.
- 16 -<br />
2. IT Infrastructure Library (ITIL)<br />
ITIL, <strong>die</strong> IT Infrastructure Library, ist ein IT Service Management Leitfaden, welcher Ende<br />
der 80er Jahre von der britischen Behörde CCTA (Central Computer and<br />
Telecommunications Agency) für <strong>die</strong> Regierung entwickelt wurde. ITIL umfasst eine<br />
Ansammlung von Literatur und ist als Baukasten mit Best Practice Prozessen 1 zum<br />
IT Service Management zu verstehen. Dadurch, dass alle Vorgehensweisen im Rahmen des<br />
IT Service Managements beschrieben <strong>werden</strong> und <strong>die</strong> Prozesse kundenorientiert ausgeprägt<br />
sind, <strong>kann</strong> ITIL als vollständiges Referenzsystem <strong>die</strong>nen.<br />
Mittlerweile gilt ITIL als „de Facto“-Standard und erfährt eine zunehmende, weltweite<br />
Verbreitung.<br />
Die in <strong>die</strong>ser Ar<strong>bei</strong>t verwendete Terminologie lehnt sich eng an den innerhalb der<br />
IT Infrastructure Library verwendeten Fachjargon.<br />
2.1 Vorteile des IT Service Managements<br />
In der Vergangenheit war <strong>die</strong> IT-Organisation eines Unternehmens oftmals nicht klar messbar.<br />
Die Kosten für IT-Services waren weitestgehend unbe<strong>kann</strong>t, <strong>die</strong> Dokumentation der IT-<br />
Komponenten unvollständig oder inkonsistent und es fehlte eine klare Aussage über <strong>die</strong> von<br />
der IT-Organisation zu erbringenden Leistungen.<br />
Mit dem Einsatz des IT Service Managements <strong>werden</strong> IT-Prozesse messbar. Die IT-<br />
Organisation <strong>kann</strong> als Service-Dienstleister innerhalb des Unternehmens auftreten und seine<br />
Dienste intern verkaufen. Daraus resultiert eine geschäftsmäßige Beziehung zwischen der IT-<br />
Organisation und ihren Kunden, was eine verbesserte Kommunikation zwischen IT-Kunden,<br />
IT-Anwendern und der IT-Organisation zur Folge hat. (vgl. MASTERS Consulting GmbH<br />
(2004), S. 4ff)<br />
Mit der Definition von IT Services, der Festlegung der auszuliefernden Service Levels sowie<br />
deren Kosten wird IT messbar. Durch Transparenz in Kosten und Leistungen wird <strong>die</strong> IT zu<br />
einer Steuerungsgröße innerhalb der Wertschöpfungskette des Unternehmens und stellt nicht<br />
mehr nur einen kaum beeinflussbaren Kostenblock dar. 2<br />
1 Ein Prozess gilt als eine zeitliche und logische Verkettung von Einzelaktivitäten mit definierter Eingabe,<br />
definiertem Ergebnis sowie definierten Mess- und Steuerungsgrössen. (vgl. MASTERS Consulting GmbH<br />
(2004), S. 10)<br />
2 Vgl: MASTERS Consulting GmbH (2004), S. 4
- 17 -<br />
2.2 Umfang der IT Infrastructure Library<br />
Während der letzten 3 Jahre wurde das vorhandene Wissen aktualisiert und neu<br />
zusammengestellt. Aus den ehemals 10 Büchern entstanden 7 neue Exemplare, welche <strong>die</strong><br />
grundlegende Basis der ITIL darstellen.<br />
• Service Support<br />
siehe Kapitel 2.3<br />
• Service Delivery<br />
siehe Kapitel 2.4<br />
• Planning to Implement Service Management<br />
Das Ziel <strong>die</strong>ses Buches ist es, dem Leser <strong>die</strong> wesentlichen Punkte <strong>bei</strong>m Planen eines<br />
erfolgreichen Service Managements zu vermitteln. Es beschreibt <strong>die</strong> einzelnen Schritte, IT-<br />
Services einzuführen oder vorhandene zu verbessern.<br />
• ICT Infrastructure Management<br />
In <strong>die</strong>ser Publikation <strong>werden</strong> neben Network Service Management (Netzwerk-<br />
Management) und Computer Installation auch Bereiche wie Operations Management<br />
(Betriebs-Management) behandelt.<br />
• Application Management<br />
Dieses Buch deckt den Lebenszyklus der Softwareentwicklung ab und betont hier<strong>bei</strong> <strong>die</strong><br />
klare Anforderungsdefinition und ihre Implementierung.<br />
• Security Management<br />
In der Informations-Technik gilt <strong>die</strong> Information als das Kerngeschäft. Jeder Faktor, der<br />
<strong>die</strong>se Information oder deren Verar<strong>bei</strong>tung gefährdet, gefährdet auch direkt <strong>die</strong> Leistung<br />
der IT-Organisation. Da<strong>bei</strong> ist <strong>die</strong> Sicherheit ein strukturelles Problem. ITIL stellt mit<br />
Security Management eine Grundlage für das Management von IT-Infrastrukturen zur<br />
Verfügung, <strong>die</strong> aus dem Gesichtspunkt eines Managers <strong>die</strong> Sicherheit in der IT-<br />
Infrastruktur organisiert und <strong>bei</strong>behält.<br />
• Software Asset Management<br />
Ein wirkungsvolles Management von Software ermöglicht eine gezielte Kontrolle und<br />
Schutz vorhandener Software innerhalb einer Organisation. Diese Publikation <strong>bei</strong>nhaltet<br />
einen Leitfaden, welcher <strong>die</strong> wesentlichen Punkte des Software Asset Managements<br />
darlegt.
- 18 -<br />
Die englischsprachigen Werke können <strong>bei</strong> dem britischen<br />
OGC (Office of Government Commerce), welches auch <strong>die</strong> Rechte an dem Wissen hält,<br />
bestellt <strong>werden</strong>.<br />
Die für <strong>die</strong>se Ar<strong>bei</strong>t wesentlichen Begriffsdefinitionen stammen aus den Werken<br />
Service Support und Service Delivery, welche zusammen 11 Disziplinen umfassen<br />
(siehe Abbildung 2) und in den nachfolgenden Kapiteln 2.3 und 2.4 kurz zusammengefasst<br />
<strong>werden</strong>.<br />
ITSM<br />
Service / Help Desk<br />
Incident Management<br />
Problem Management<br />
Change Management<br />
Release Management<br />
Configuration Management<br />
Service Level Management<br />
Capacity Management<br />
Continuity Management<br />
Availability Management<br />
IT Financial Management<br />
Service Support<br />
Service Delivery<br />
Abbildung 2 ITSM Disziplinen<br />
modifiziert nach iETSolutions GmbH (2003)<br />
Der in Abbildung 2 auftretende Oberbegriff ITSM beschreibt hier das<br />
Information Technologie Service Management und gilt als eine Untermenge von ITIL.
- 19 -<br />
2.3 Service Support<br />
Der Service Support umfasst <strong>die</strong> Service-Leistungen, welche notwendig sind, <strong>die</strong> IT-Services<br />
instandzuhalten und effektiv anbieten zu können. Da<strong>bei</strong> wird zwischen 5 bzw. 6 Gebieten<br />
unterschieden. Der Service-Desk ist zwar als ein eigener Punkt aufgeführt, wird jedoch durch<br />
das Incident Management impliziert.<br />
• Service-Desk<br />
• Schnittstelle zwischen Kunde bzw. Benutzer und Anbieter<br />
• Funktion des Incident-Managements<br />
• Incident-Management<br />
• Impliziert den Service-Desk<br />
• Primäre Aufgabe ist, dem Kunden schnellstmöglich das ausgefallene System (oder<br />
Ersatz) wieder zur Verfügung zu stellen<br />
• Problem-Management<br />
• Fehler erkennen, beheben und aufzeichnen<br />
• Verhindern von Ereignissen, welche das normale Betriebsgeschäft unterbrechen<br />
können<br />
Der wesentliche Unterschied zwischen dem Incident-Management und dem Problem-<br />
Management ist <strong>die</strong> Zielsetzung. Das Incident-Management hat <strong>die</strong> primäre Aufgabe, dem<br />
Kunden schnellstmöglich eine Problemlösung zu bieten. Da<strong>bei</strong> <strong>kann</strong> es sich auch um ein<br />
einfachen Workaround handeln. Das Problem-Management hingegen setzt an der Wurzel des<br />
Problems an, analysiert <strong>die</strong>ses und sucht nach einer Lösung. Dieser Prozess dauert i.d.R.<br />
länger und entspricht damit nicht dem Ziel des Incident-Managements.
- 20 -<br />
• Change-Management<br />
• Stellt sicher, dass alle Konfigurationsänderungen geplant und authorisiert sind<br />
• Bewertet und überwacht <strong>die</strong> Änderung<br />
• Jede Änderung wird getestet und ein Plan zum Rücksetzen der Änderung erstellt<br />
• Release-Management<br />
• Organisiert <strong>die</strong> kontrollierte Softwarehaltung und -verteilung<br />
• Halten einer Software-/Hardware-Bibliothek<br />
• Configuration-Management<br />
• Informationssammlung über Hardware, Software, Dokumentation und<br />
Ansprechpartner<br />
• Identifikation von IT-Komponenten<br />
• Warten und Anpassen von Informationen <strong>bei</strong> Änderungen<br />
• Verifikation der vorhanden Daten (IST) mit dem SOLL-Zustand<br />
• Pflege der Configuration Management Database (CMDB), welche ein logisches<br />
Modell der IT-Infrastruktur abbildet und <strong>die</strong> zentrale Informationsbasis für alle am<br />
IT-Service-Management beteiligten Prozesse und Funktionen darstellt
- 21 -<br />
2.4 Service Delivery<br />
Das Service Delivery umfasst <strong>die</strong> Service-Leistungen an sich und stellt sicher, dass <strong>die</strong><br />
angebotenen Leistungen den Vereinbarungen zwischen Anbieter und Kunde entsprechen.<br />
• Service-Level-Management<br />
• Primäres Management für angebotene IT-Dienstleistungen<br />
• Stellt sicher, das vereinbarte Dienstleistungen eingehalten <strong>werden</strong><br />
• Überprüfen vorhandener Dienstleistungen<br />
• Verhandlungen mit den Kunden<br />
• Erstellen und überwachen von Service-Level-Agreements (SLA) 1<br />
• Implementieren von Verbesserungs-Regeln und -Prozessen<br />
• Erstellen von Prioritäten<br />
• Planung von Angebotswachstum<br />
• Zusammenar<strong>bei</strong>t mit den Buchhaltungsprozessen, um entstandene Kosten<br />
zurückzugewinnen<br />
• Capacity-Management<br />
• Leistungskontrolle (Performance Monitoring)<br />
• Auslastungskontrolle<br />
• Anwendungsauslastung<br />
• Vorhersage von Ressourcenauslastungsentwicklung<br />
• Vorhersage von Nachfrage<br />
1 SLA's sind Vereinbarungen zwischen Anbieter und Kunden. Sie definieren exakt den Umfang der Leistungen<br />
des Anbieters.
- 22 -<br />
• Continuity-Management<br />
• Stellt sicher, dass <strong>die</strong> IT-Services wiederhergestellt und fortlaufen können, wenn<br />
ein schwerwiegendes, unerwartetes Ereignis eintrifft<br />
• Reduktion der Risiken in erster Instanz<br />
• Risikobeurteilung der einzelnen IT-Services<br />
• Wiederherstellungsrichtlinien erstellen<br />
• Erstellen eines Katastrophenplanes<br />
• Testen, überprüfen und verbessern des Katastrophenplanes<br />
• Availability-Management<br />
• Grundlage für SLA<br />
• Zuverlässigkeit als <strong>die</strong> Zeit einer Komponente, in der erwartet <strong>werden</strong> <strong>kann</strong>, sie<br />
ohne Ausfälle nutzen zu können<br />
• Regenerierbarkeit als den Zeitraum der Wiederherstellung einer Komponente nach<br />
einem Ausfall<br />
• Wartbarkeit, vorbeugend und fehlerbehebend<br />
• Sicherheit und Auswirkungen von Sicherheitslöchern<br />
• IT Financial-Management<br />
• Kalkulieren der Kosten für <strong>die</strong> angebotenen Dienstleistungen<br />
• Stellt sicher, das <strong>die</strong> IT-Infrastruktur kosteneffektiv aufgebaut wird
- 23 -<br />
3. Incident Management in der Praxis<br />
Nach der ITIL-Terminologie wird der Begriff Incident wie folgt definiert:<br />
Any event that is not part of the standard operation of a service and that causes, or may<br />
cause, an interruption to, or a reduction in, the quality of that service. 1<br />
Ein Incident ist demnach ein Ereignis, welches nicht dem üblichen Betriebsablauf entspricht<br />
und <strong>die</strong> Qualität der angebotenen Dienste gefährdet, bis hin zu einem Totalausfall.<br />
3.1 Incident Management Prozess<br />
Die Aufgabe des Incident Managements ist es, das Auftreten <strong>die</strong>ser „gefährlichen“ Ereignisse<br />
abzufangen und negative Auswirkungen für den Betrieb einzuschränken oder im besten Fall<br />
zu verhindern.<br />
Ein Beispiel für <strong>die</strong> Prozessabläufe <strong>bei</strong>m Incident Management zeigt ITIL:<br />
Abbildung 3 Incident Management Prozesse<br />
Quelle: Office of Government Commerce, (2000): ITIL Service Support CD-ROM Version 1.3<br />
1 Vgl: Office of Government Commerce, (2000)
- 24 -<br />
Die Zentrale Komponente ist hier der Incident Management process. Als Quelle für<br />
auftretende Incidents gelten unter anderem Server, Anwendungen, Netzwerke oder der<br />
Service-Desk. Die Incidents <strong>werden</strong> vom Incident Management process er<strong>kann</strong>t und<br />
analysiert. Dieser hat Zugriff auf <strong>die</strong> Problem Database (Problem/error database) und <strong>die</strong><br />
CMDB. Über <strong>die</strong> CMDB können Informationen bezüglich der betroffenen Systeme abgefragt<br />
<strong>werden</strong>, darunter auch administrative Ansprechpartner. Die Problem Database wird vom<br />
Problem-Management gepflegt. Sie enthält Informationen über be<strong>kann</strong>te Fehler und Probleme<br />
mit Workarounds und Fehlerbehebungen. Anhand <strong>die</strong>ser Daten <strong>kann</strong> der Incident<br />
Management process dem Anwender schnellstmöglich helfen. Handelt es sich <strong>bei</strong> dem Fehler<br />
jedoch um ein generelles Problem, welches eine Änderung am Server (oder den<br />
Anwendungen, Datenbanken, etc.) erfordert, so wird ein Request for Change (RFC) an das<br />
Change-Management weitergeleitet. Dieses bewertet und authorisiert <strong>die</strong><br />
Konfigurationsänderung.<br />
Über <strong>die</strong> Service Request procedures <strong>werden</strong> <strong>die</strong> Incident-Tickets gegebenenfalls an <strong>die</strong><br />
Fachabteilungen weitergeleitet und dort gelöst. Probleme, welche nicht direkt durch das<br />
Incident Management gelöst <strong>werden</strong> können, <strong>werden</strong> an das Problem Management übergeben.<br />
3.2 Incident- und Event-Management <strong>bei</strong> der Volkswagen AG<br />
Der Begriff Incident-Management wurde <strong>bei</strong> VW noch um den Begriff Event, bzw. Event-<br />
Management erweitert. Während nach ITIL jegliches Auftreten eines Ereignisses über <strong>die</strong><br />
Incident-Quellen als Incident bezeichnet wird, unterscheidet VW zwischen Ereignissen, <strong>die</strong><br />
über den Service-Desk (Incidents) eintreffen, und denen, <strong>die</strong> von den Systemen (Events)<br />
ausgelöst <strong>werden</strong>.<br />
Mit <strong>die</strong>ser Unterscheidung wird sichergestellt, das nicht jede Anfrage eines Anwenders über<br />
den Service-Desk als ein Incident (nach ITIL) gewertet wird. So tauchen in der Praxis auch<br />
Fragen über den alltäglichen Umgang mit Standard-Produkten am Service-Desk auf, <strong>die</strong> nicht<br />
<strong>die</strong> Qualität oder Funktionalität des Betriebes stören.<br />
Um <strong>die</strong> Konformität <strong>bei</strong>zubehalten, wird im weiteren Verlauf nicht zwischen Events und<br />
Incidents unterschieden.
- 25 -<br />
3.3 Server-Monitoring<br />
Diese Ar<strong>bei</strong>t bezieht sich speziell auf Server-Monitoring als Incident-Quelle. Server-<br />
Monitoring beschreibt eine automatisierte Überwachung von Servern und den darauf<br />
laufenden Anwendungen. Erst dadurch wird das Handling von vielen hundert zu<br />
überwachenden Systemen effizient.<br />
Eine IT-Organisation, welche Service Level Agreements mit Fachabteilungen des<br />
Unternehmens ausgehandelt hat, bietet, abhängig vom Inhalt der SLA's, garantierte<br />
Leistungen an. Diese Leistungen können <strong>bei</strong>spielsweise eine maximale Ausfallzeit des HTTP-<br />
Dienstes von 30 Minuten am Tag enthalten. Um solch einer Anforderung gerecht zu <strong>werden</strong>,<br />
ist <strong>die</strong> ständige Überwachung <strong>die</strong>ses Dienstes notwendig. In den folgenden Ansätzen wird<br />
eine Ar<strong>bei</strong>tswoche von 40 Stunden angenommen:<br />
3.3.1 Manuelle Überwachung<br />
Die Woche wird in 8 Stunden-Blöcke zerteilt, was einem Ar<strong>bei</strong>tstag entspricht. Zu jedem<br />
<strong>die</strong>ser Blöcke müssen zwei Mitar<strong>bei</strong>ter anwesend sein, damit zu den gesetzlich<br />
vorgeschriebenen Pausen mindestens einer <strong>die</strong> Überwachung fortführen <strong>kann</strong>. Jedes<br />
Mitar<strong>bei</strong>ter-Paar <strong>kann</strong> anhand der 40-Stunden-Woche fünf 8-Stunden-Blöcke absolvieren. Da<br />
eine Woche jedoch 168 Stunden hat und somit 21 Ar<strong>bei</strong>ts-Blöcke darstellt, <strong>werden</strong> insgesamt<br />
10 Mitar<strong>bei</strong>ter benötigt, um <strong>die</strong> vorgegebene Überwachung zu realisieren.<br />
24 Std. * 7 Tage = 168 Std.<br />
168 Std. / 8 Std. = 21 Ar<strong>bei</strong>ts-Blöcke<br />
21 Blöcke / 5 Blöcke_pro_Paar = 4,2 Mitar<strong>bei</strong>ter-Paare<br />
Um den Ausfall eines Mitar<strong>bei</strong>ters, durch Krankheit, Unfall, Urlaub oder Pause, zu<br />
kompensieren, müssen weitere Mitar<strong>bei</strong>ter als Redundanz abgestellt oder Überstunden<br />
geleistet <strong>werden</strong>. Damit sind mindestens 10 Mitar<strong>bei</strong>ter zum Einhalten des SLA's notwendig.<br />
4,2 Mitar<strong>bei</strong>ter-Paare = 8,4 Mitar<strong>bei</strong>ter (aufgerundet 9)<br />
9 Mitar<strong>bei</strong>ter + 1 Mitar<strong>bei</strong>ter (Redundanz) = 10 Mitar<strong>bei</strong>ter
- 26 -<br />
3.3.2 Automatisierte Überwachung<br />
Ein Tool übernimmt <strong>die</strong> ständige Überwachung des Dienstes. In regelmäßigen Abständen<br />
untersucht das Tool <strong>die</strong> erwartete Funktionalität des Dienstes und meldet Probleme umgehend<br />
an den oder <strong>die</strong> zuständigen Mitar<strong>bei</strong>ter. Zusätzlich <strong>kann</strong> das Tool schon erste<br />
Eskalationsmaßnahmen, wie z.B. Neustarten von Prozessen oder Löschen von temporären<br />
Dateien, durchführen, um den gefährdeten oder ausgefallenen Dienst wiederherzustellen. Über<br />
Rufbereitschaft können <strong>die</strong> informierten Mitar<strong>bei</strong>ter direkt vom Ar<strong>bei</strong>tsplatz aus, oder von zu<br />
Hause mit Hilfe eines Laptops, das Problem analysieren und beheben. Dieses Szenario ließe<br />
sich schon mit 3 oder 4 Mitar<strong>bei</strong>tern realisieren. Damit können in <strong>die</strong>sem Falle mehr als 50%<br />
der Mitar<strong>bei</strong>ter eingespart <strong>werden</strong>, was eine erhebliche Kostensenkung zur Folge hat.<br />
Insbesondere im großflächigen Einsatz macht sich <strong>die</strong> Automatisierung bemerkbar. Soll ein<br />
Szenario mit mehr als 1000 Servern mit Anwendungen überwacht <strong>werden</strong>, und jeder Server<br />
benötigt nur 5 Minuten eines Administrators zur Überprüfung, so <strong>werden</strong> 5000 Minuten<br />
benötigt, alle Server innerhalb eines Ar<strong>bei</strong>tstages einmal zu überprüfen. Das entspricht mehr<br />
als 83 Ar<strong>bei</strong>tsstunden und damit 11 Mitar<strong>bei</strong>tern.<br />
Sollte jeder Server mindestens einmal alle 30 Minuten überprüft <strong>werden</strong>, und das 24 Stunden<br />
am Tag, sind mindestens 167 Mitar<strong>bei</strong>ter notwendig (vereinfachtes Szenario ohne Redundanz,<br />
Pausen, etc.).<br />
30 Minuten / 5 Minute_pro_Server = 6 Server_pro_Mitar<strong>bei</strong>ter (in 30 Minuten)<br />
1000 Server / 6 Server_pro_Mitar<strong>bei</strong>ter ≈ 167 Mitar<strong>bei</strong>ter<br />
Diese Überlegungen sollen Aufschluss darüber geben, wie wichtig eine automatisierte<br />
Überwachung von Servern und Anwendungen ist, um als IT-Organisation kostengünstig und<br />
effektiv Dienstleistungen anbieten zu können. Die genannten Beispiele berücksichtigen nicht<br />
alle denkbaren Permutationen. So <strong>kann</strong> ein Mitar<strong>bei</strong>ter im Urlaub sein und der zweite<br />
aufgrund von Krankheit ausfallen. Sie sind jedoch für eine Abschätzung der Dimensionen<br />
ausreichend präzise.
- 27 -<br />
3.3.3 IBM/Tivoli im Einsatz <strong>bei</strong> der Volkswagen AG<br />
Tivoli Software wurde im Jahre 1989 von zwei ehemaligen IBM-Angestellten gegründet und<br />
im Jahre 1996 von IBM akquiriert. Noch immer kämpft IBM mit Integrationsproblemen und<br />
der Vereinfachung des Produktfolios. Dadurch wird <strong>die</strong> Innovationskraft gebremst und den<br />
Mitbewerbern ermöglicht, sich auf dem Markt zu positionieren 1 .<br />
Hinweis: Die in der Ar<strong>bei</strong>t verwendete Bezeichnung IBM/Tivoli bezieht sich ausschliesslich<br />
auf <strong>die</strong> Produktsparte Systems-Management und entspricht thematisch den von der Firma<br />
Tivoli Software ursprünglich entwickelten Produkten.<br />
Das <strong>bei</strong> der Volkswagen AG bereits seit 1998 etablierte IBM/Tivoli umfasst nicht nur das hier<br />
betrachtete Incident-Management und Server-Monitoring, sondern implementiert viele weitere<br />
Systems-Management Disziplinen, welche im ITSM zu finden sind.<br />
IBM/Tivoli basiert auf einer Kommunikationsplattform (Framework) mit dezentralen<br />
Komponenten. Diese Komponenten sind „intelligente“ Agenten, welche auf den zu<br />
überwachenden Hosts installiert <strong>werden</strong>. Die Eskalation von Incidents erfolgt primär vom<br />
Agenten aus, weitere Eskalationsmöglichkeiten sind über <strong>die</strong> TEC gegeben. Die in<br />
Abbildung 4 gezeigte Architektur lehnt sich eng an den <strong>bei</strong> der Volkswagen AG<br />
implementierten Aufbau.<br />
1 Vgl: Inverso, John (2003), S. 4
- 28 -<br />
"TMR"<br />
managed Node<br />
TEC<br />
managed Node<br />
TMR-Server<br />
oserv<br />
oserv<br />
managed Node<br />
Gateway<br />
oserv<br />
GW<br />
Endpoint<br />
lcfd - ITM<br />
Endpoint<br />
lcfd - ITM<br />
. . .<br />
Endpoint<br />
lcfd - ITM<br />
Abbildung 4 Tivoli Managed Region<br />
modifiziert nach Meister, Stefan (2001), S. 90<br />
Zusammen bilden <strong>die</strong> managed Node's und Endpoints <strong>die</strong> TMR. Der primäre Tivoli-Server<br />
wird daher TMR-Server genannt. Die Begrifflichkeiten <strong>werden</strong> wie folgt definiert 1 :<br />
• Framework<br />
Als Framework wird das grundlegende Kommunikationsgerüst der Tivoli-Software<br />
bezeichnet. Alle Aktionen, <strong>die</strong> zum Management der zu verwaltenden Systeme in der<br />
Tivoli-Managed-Region (TMR) verwendet <strong>werden</strong>, stützen sich auf das Framework.<br />
• Tools<br />
Auf das Framework können einzelne Tools mit speziellen Aufgaben aufgesetzt <strong>werden</strong>.<br />
Tivoli bietet eine Vielzahl von Tools wie Inventory 2 und Software Distribution 3 . Auch das<br />
Event-Management wird im Framework als eigenes Tool bereitgestellt.<br />
1 Vgl. Meister, Stefan (2001), S. 89ff<br />
2 automatische Datenerfassung der Hardwarekomponenten zur Laufzeit<br />
3 Software <strong>kann</strong> von zentraler Stelle im Betrieb auf ausgewählte Endpoints installiert <strong>werden</strong>
- 29 -<br />
• Endpoint<br />
Als Endpoint gilt der zu überwachende Host, welcher seinerseits keine weiteren Rechner in<br />
der Tivoli-Managed-Region verwaltet.<br />
• Gateway<br />
Dieser managed Node <strong>die</strong>nt zur logischen oder physikalischen Strukturierung einer TMR.<br />
Das Gateway steht in Verbindung mit einem TMR-Server und übernimmt <strong>die</strong><br />
Kommunikation mit den Endpoints. Fällt ein Gateway aus, können <strong>die</strong> angeschlossenen<br />
Endpoints mit ihren lcfd's <strong>die</strong> Verbindung zu einem anderen Gateway aufnehmen. Somit ist<br />
eine Software-basierte Redundanz möglich.<br />
• GW<br />
Dieses Gateway-Objekt ist <strong>die</strong> Schnittstelle, über welche <strong>die</strong> bidirektionale<br />
Kommunikation der Endpoints mit den managed Nodes ermöglicht wird.<br />
• ITM<br />
Das IBM Tivoli Monitoring ist <strong>die</strong> Produktbezeichnung für <strong>die</strong> Überwachungssoftware. Die<br />
ITM-Engine fragt über zugewiesene Monitore Systemzustände ab und bewertet <strong>die</strong>se<br />
Information anhand vorgegebener Thresholds 1 , um <strong>bei</strong> Bedarf einen Event zu generieren.<br />
Diese Events <strong>werden</strong> über den lcfd und das Tivoli Framework an das zugeordnete Gateway<br />
gesendet, welcher <strong>die</strong> Tivoli Enterprise Console informiert. Hat der lcfd eine Fehlfunktion,<br />
so läuft <strong>die</strong> ITM-Engine zwar weiter, eine Kommunikation zum Tivoli Framework ist<br />
jedoch nicht mehr möglich. Eine eigene SMTP 2 -Engine bringt das ITM nicht mit, jedoch<br />
<strong>kann</strong> eine lokale Aktion oder auch ein Task 3 ausgeführt <strong>werden</strong>.<br />
• lcfd (lightweight client framework daemon)<br />
Dieser Daemon 4 bildet mit den oserv-Prozessen das Tivoli Framework. Über den lcfd wird<br />
<strong>die</strong> Verbindung des Endpoints mit dem zugeordneten TMR-Server oder managed Node<br />
aufrecht erhalten. Fällt <strong>die</strong>ser aus, <strong>kann</strong> der lcfd zu einem anderen Gateway Kontakt<br />
aufnehmen, sofern <strong>die</strong>ser be<strong>kann</strong>t und dem selben TMR-Server zugeteilt ist. Ausserdem<br />
kümmert sich der lcfd um das dynamische Nachladen von Software-Komponenten, welche<br />
auf dem Endpoint benötigt <strong>werden</strong>.<br />
1 [engl.]: der Grenzwert<br />
2 Das Simple Mail Transfer Protokoll (SMTP) <strong>die</strong>nt dem Austausch von eMails.<br />
3 hier: Ein auf dem TMR-Server hinterlegtes Programm oder Script, welches <strong>bei</strong> Bedarf lokal auf dem<br />
Endpoint ausgeführt wird.<br />
4 Als Daemon wird unter Unix ein Prozess bezeichnet, welcher im Hintergrund läuft. Einmal gestartet, wartet er<br />
auf bestimmte Ereignisse und tritt dann in Aktion.
- 30 -<br />
• managed Node<br />
Als managed Node wird ein Rechner bezeichnet, auf welchem der oserv-Prozess läuft.<br />
Abhängig von den definierten Objekten und installierten Software-Komponenten ist ein<br />
managed Node fähig, verschiedene Aufgaben innerhalb der TMR zu übernehmen.<br />
• oserv (Tivoli Object Dispatcher)<br />
Der oserv stellt (mit den lcfd’s) das grundlegende Kommunikationsgerüst für das Tivoli<br />
Framework bereit. Es handelt sich da<strong>bei</strong> um eine Softwarekomponente, <strong>die</strong> auf den<br />
managed Nodes installiert wird.<br />
• TEC (Tivoli Enterprise Console)<br />
Die TEC nimmt <strong>die</strong> Events entgegen, legt <strong>die</strong>se in einer Datenbank ab und zeigt sie mit<br />
Hilfe eines GUI's 1 an.<br />
• TMR (Tivoli-Managed-Region)<br />
Die logische Zusammenfassung von TMR-Server, managed-Node(s) und Endpoints.<br />
Aktuell sind pro TMR genau ein TMR-Server und maximal eine TEC möglich.<br />
Die Erfahrung zeigt, das kommerzielle Lösungen wie IBM/Tivoli ein hohes Maß an<br />
individueller Anpassung benötigen, um in einer so komplexen Umgebung wie der<br />
Volkswagen AG eingesetzt <strong>werden</strong> zu können. Zwar mag <strong>die</strong>s durch <strong>die</strong> Unterstützung des<br />
Herstellers anfangs einfacher erscheinen, jedoch ist man gerade dadurch an das Unternehmen<br />
gebunden. Weiterhin hat <strong>die</strong> Erfahrung gezeigt, daß sich der scheinbare Vorteil des Hersteller-<br />
Supports in der Realität auch als nachteilig herausstellen <strong>kann</strong>. Bei notwendigen Anpassungen<br />
und Fehlerkorrekturen muss auf das Handeln des Herstellers gehofft <strong>werden</strong>, welcher oft nicht<br />
in angemessener Zeit reagiert. OpenSource-Produkte mit offenem Quellcode hingegen, lassen<br />
schnelle Reaktionen <strong>bei</strong> Fehlerbereinigung, Erweiterbarkeit und Wartbarkeit im eigenen<br />
Unternehmen zu.<br />
In der Stu<strong>die</strong>nar<strong>bei</strong>t Schaffranneck, Sven, (2004, S. 34ff) wurde festgestellt, dass der Einsatz<br />
des OpenSource-Tools Nagios, unter Berücksichtigung der gegebenen Anforderungen,<br />
sinnvoll erscheint. Darauf aufbauend wird <strong>die</strong>se Folgear<strong>bei</strong>t ein Proof of Concept vorstellen,<br />
welches <strong>die</strong> Möglichkeiten und Grenzen von Nagios kritisch aufzeigt.<br />
1 Graphical User Interface (grafische Nutzeroberfläche)
4. Konzept von Nagios<br />
- 31 -<br />
Der von dem Entwickler Ethan Galstad geschützte Begriff Nagios setzt sich aus „network“<br />
und „hagios 1 “ zusammen. Vielen ist Nagios noch unter dem Namen „Netsaint“ geläufig.<br />
Aufgrund der Namenskollision mit einem Security-Scanner nannte Galstad sein Projekt<br />
jedoch im Jahre 2002 um. Seit der Beta Version 1.0b ist Netsaint unter dem neuen Namen<br />
be<strong>kann</strong>t.<br />
Nagios basiert auf einem zentralen, Plugin-gestützten Ansatz und differenziert sich damit<br />
grundlegend von vielen kommerziellen Mitbewerbern, auch von IBM/Tivoli.<br />
Generell lässt sich zwischen drei Komponenten unterscheiden:<br />
• Der Nagios Process (auch als Core Logic bezeichnet) ist <strong>die</strong> zentrale Komponente. Hier<br />
<strong>werden</strong> <strong>die</strong> Informationen der zu überwachenden Systeme gesammelt, aufbereitet und in<br />
Log-Dateien festgehalten. Erkennt der Nagios Process ein Problem, wird <strong>die</strong> dafür<br />
festgelegte Eskalationsmethode ausgeführt.<br />
• Das Webinterface und dessen CGI-Skripte lesen <strong>die</strong> Konfigurations- und Log-Dateien<br />
aus und stellen <strong>die</strong> Informationen übersichtlich dar. Mit Hilfe einer Named-Pipe 2<br />
können zusätzliche Kommandos aus dem Webinterface an den Nagios Prozess<br />
übergeben <strong>werden</strong>.<br />
• Plugins <strong>werden</strong> vom Nagios Prozess aufgerufen, um Informationen über den Status von<br />
Hosts und Services zu sammeln. Diese Plugins können neben beliebigen Scripten auch<br />
kompilierte Programme sein, sofern sie <strong>die</strong> Nagios-Konventionen berücksichtigen. Perl-<br />
Scripts erfahren durch den Embedded Perl Nagios (EPN) - Interpreter einen<br />
zusätzlichen Geschwindigkeitsschub. Hier wird anstatt dem vollständigen Nachladen<br />
eines Perl-Interpreters <strong>bei</strong>m Aufruf des Perl-Scriptes nur ein Bibliotheksaufruf<br />
verwendet. Zusätzlich lassen sich dann <strong>die</strong> kompilierten Perl-Scripte für den nächsten<br />
Aufruf zwischenspeichern (perl-cache). Leider funktioniert nicht jedes Perl-Plugin mit<br />
EPN, ein manuelles Kompilieren mit perlcc 3 <strong>kann</strong> in <strong>die</strong>sem Fall helfen.<br />
1 griechisch: heilig<br />
2 Pipes ermöglichen den Transport von Daten zwischen Prozessen nach der First In First Out (FIFO) Methode<br />
3 Werkzeug, Bestandteil der Standard Perl Distribution
push<br />
- 32 -<br />
4.1 Architekturbedingte Unterschiede zu IBM/Tivoli<br />
Während IBM/Tivoli mit seinem Framework eher einen dezentralen Ansatz verfolgt, agiert<br />
Nagios von einer zentralen Instanz aus. Eine allgemeingültige Unterscheidung stellt<br />
Abbildung 5 dar:<br />
zentraler / dezentraler<br />
Ansatz<br />
Operator (SMS,<br />
Konsole, eMail)<br />
DEZENTRAL<br />
poll<br />
Zentrale Engine<br />
poll<br />
- erfassen<br />
- bewerten<br />
- eskalieren<br />
ZENTRAL<br />
push<br />
push<br />
- erfassen<br />
- bewerten<br />
- eskalieren<br />
Abbildung 5 zentraler/dezentraler Ansatz<br />
eigene Darstellung
- 33 -<br />
4.1.1 zentraler Ansatz<br />
Ein zentraler Server fragt <strong>die</strong> zu überwachenden Hosts in einem definierten Intervall ab.<br />
Dienste, <strong>die</strong> extern sichtbar und überprüfbar sind, können somit leicht erfasst <strong>werden</strong>.<br />
Dadurch entfällt neben der Installation, Konfiguration und Wartung eines Agenten auf dem zu<br />
überwachenden Host auch der resultierende Ressourcenverbrauch, da <strong>die</strong> gesamte<br />
„Intelligenz“ 1 des Incident-Management Tools auf einem zentralen Server läuft. Müssen<br />
jedoch Systemdaten erfasst <strong>werden</strong>, welche nicht auf einem öffentlich zugänglichen Port (wie<br />
HTTP, FTP, TELNET, ...) erfragt <strong>werden</strong> können, muss der zentrale Ansatz um dezentrale<br />
Komponenten erweitert <strong>werden</strong>. Die Installation eines simplen Agenten auf dem Host oder<br />
das Ausführen von Befehlen über einen Remote-Zugang verbindet den Komfort des zentralen<br />
mit den vielseitigen Möglichkeiten des dezentralen Ansatzes.<br />
4.1.2 dezentraler Ansatz<br />
Beim dezentralen Ansatz wird auf dem zu überwachenden Host (Endpoint) eine „intelligente“<br />
Software (Agent) installiert. Dieser sammelt autark Informationen über <strong>die</strong> zu überwachenden<br />
Dienste, Prozesse oder Systemdaten. Die Agenten <strong>werden</strong> zentral konfiguriert und bekommen<br />
<strong>die</strong>se Konfiguration danach mitgeteilt. Anhand der nun lokal vorliegenden Konfiguration wird<br />
<strong>bei</strong> einer Überschreitung der festgelegten Grenzwerte einer Messung der Alarm (Incident)<br />
generiert und entweder als SMS, eMail oder an eine Konsole eskaliert. Die Daten-Erfassung,<br />
-Bewertung und auch <strong>die</strong> Eskalation geschieht somit dezentral auf den Endpoints. Dadurch ist<br />
nahezu <strong>die</strong> gesamte „Intelligenz“ dezentral verteilt. Durch <strong>die</strong> installierten Agenten wird eine<br />
komplexe, lokale Datenerfassung möglich, da ein lokaler Zugriff auf dem Host stattfindet.<br />
Auch lassen sich, abhängig von den Rechten des Agenten, beliebig komplexe Automationen<br />
ausführen.<br />
1 In <strong>die</strong>sem Falle <strong>die</strong> Daten-Erfassung, -Bewertung und -Eskalation
- 34 -<br />
4.1.3 Gegenüberstellung IBM/Tivoli und Nagios<br />
Weder IBM/Tivoli noch Nagios halten sich strikt an einen der <strong>bei</strong>den Ansätze. Vielmehr<br />
versuchen sie <strong>die</strong> grundlegenden Techniken mit gezielten Veränderungen sowie<br />
Erweiterungen zu vermischen. Die folgende Tabelle stellt <strong>die</strong> wesentlichen,<br />
architekturbedingten Vor- bzw. Nachteile der <strong>bei</strong>den Tools im Bezug auf Incident-<br />
Management dar.<br />
Nagios<br />
Tivoli<br />
+<br />
Konfigurationsänderungen lassen sich Konfigurationsänderungen können über das<br />
+<br />
größtenteils zentral durchführen<br />
Framework zentral durchgeführt <strong>werden</strong><br />
+<br />
zentrales, „intelligentes“ Scheduling<br />
minimiert <strong>die</strong> Last auf den Remote-Hosts<br />
- nur lokales Scheduling möglich<br />
+<br />
Aktualität der Zustände abhängig von der<br />
direkte Statusabfrage sämtlicher Systeme<br />
- Zuverlässigkeit der Monitore und des<br />
von zentraler Instanz möglich<br />
Heartbeats<br />
+<br />
Heartbeat-Funktionalität architekturbedingt zusätzliche Heartbeat-Implementierung<br />
-<br />
implementiert<br />
notwendig<br />
+ geringerer Wartungsaufwand -<br />
erhöhter Wartungsaufwand durch verteilte<br />
Komplexität<br />
+ simple Agenten sind robust - komplexe Agenten sind fehleranfällig<br />
-<br />
Änderungen an der Konfiguration benötigt Die meisten Änderungen können on-thy-fly<br />
+<br />
einen Neustart des Prozesses<br />
ohne Neustart durchgeführt <strong>werden</strong><br />
- erhöhte Last auf dem Netzwerk +<br />
Entlastung des Netzwerkes durch autarke<br />
Agenten<br />
-<br />
Zugriff auf lokale Ressourcen und lokale<br />
Automation nur mit zusätzlichem Agent<br />
+ Lokale Automation über Agenten möglich<br />
- Hohe Last auf dem Server - Erhöhte Last auf den Remote-Hosts
- 35 -<br />
4.2 Überwachung lokaler Ressourcen mit Nagios<br />
Nach der erfolgreichen Installation von Nagios und seiner Plugins können lokale Ressourcen<br />
sofort konfiguriert und überwacht <strong>werden</strong>. Der schematische Ablauf der Überwachung sieht<br />
wie folgt aus:<br />
Abbildung 6 Überwachung lokaler Ressourcen<br />
eigene Darstellung<br />
Der Nagios Prozess ruft das Plugin auf (1) und übergibt <strong>die</strong>sem (i. d. R.) Threshold-Werte.<br />
Das Plugin ermittelt <strong>die</strong> erforderlichen Daten (2 und 3), bereitet <strong>die</strong>se auf und vergleicht sie<br />
mit den übergebenen Thresholds. Das resultierende, bewertete Ergebnis wird dem Nagios<br />
Prozess zurückgeliefert (4).<br />
Zusätzlich besteht <strong>die</strong> Möglichkeit, Perfomance-Daten abzufangen, welche <strong>die</strong> Plugins seit<br />
der Version 1.4 ergänzend liefern. Die Plugins können auch manuell ausgeführt <strong>werden</strong>. Um<br />
z.B. den belegten Auslagerungsspeicher zu prüfen, <strong>kann</strong> ein Aufruf folgendermaßen lauten:<br />
nagios@host-n# check_swap -w50% -c25%<br />
SWAP OK: 68% free (2485 MB out of 3658 MB)|swap=2485MB;1829;914;0,3658<br />
Dem Plugin check_swap <strong>werden</strong> zwei Thresholds übergeben, eines mit 50%, eines mit 25%.<br />
Die Option -w gibt hier<strong>bei</strong> den Schwellwert für WARNING, das -c den Schwellwert für<br />
CRITICAL an.
- 36 -<br />
Abhängig von der Architektur liest <strong>die</strong>ses Plugin <strong>die</strong> erforderlichen Informationen aus dem<br />
ProcFS 1 (/proc/meminfo) oder ruft spezielle Kommandos auf, welche Daten über den Swap-<br />
Speicher preisgeben. Das Script vergleicht <strong>die</strong> Daten anhand der WARNING- und CRITICAL-<br />
Thresholds und liefert ein bewertetes Ergebnis zurück. Da<strong>bei</strong> handelt es sich einerseits um<br />
Informationen in Textform, andererseits um einen Return-Code. Folgende Return-Codes sind<br />
in den Entwicklungs-Richtlinien 2 festgelegt:<br />
0: OK<br />
1: WARNING<br />
2: CRITICAL<br />
3: UNKOWN<br />
Anhand <strong>die</strong>ser Return-Codes <strong>kann</strong> der Nagios Prozess das Ergebnis weiter verar<strong>bei</strong>ten.<br />
nagios@local# echo $?<br />
0<br />
Der Return-Code des hier genannten Beispiels entspricht erwartungsgemäß dem OK.<br />
Erhält der Nagios Prozess das Ergebnis vom Plugin, wird <strong>die</strong> Status-Datei status.log<br />
aktualisiert und <strong>bei</strong> einer Status-Änderung sowie für alle kritischen Meldungen ein Eintrag in<br />
<strong>die</strong> Log-Datei nagios.log geschrieben.<br />
Abhängig von der Konfiguration wird zusätzlich der Event-Handler aufgerufen und<br />
Eskalationsmaßnahmen eingeleitet. Auf <strong>die</strong>se wird im weiteren Verlauf detaillierter<br />
eingegangen.<br />
1 Das ProcFS ist eine Schnittstelle zu Kernel- und Prozess-Informationen, um <strong>die</strong>se zur Laufzeit auszulesen<br />
oder zu verändern.<br />
2 Vgl. Nagios Plugins Development Team (2004)
- 37 -<br />
Das Webinterface wertet <strong>die</strong> status.log aus und bereitet <strong>die</strong> enthaltenen Status-Informationen<br />
grafisch auf. Abbildung 7 zeigt <strong>bei</strong>spielhaft das Webinterface im Einsatz. Die hinterlegten<br />
Farben repräsentieren den Status des Services.<br />
Abbildung 7 Nagios Webinterface Service Details<br />
Quelle: Screenshot Nagios
- 38 -<br />
4.3 Überwachung entfernter, öffentlicher Ressourcen<br />
Der Zugriff auf entfernte, öffentliche Ressourcen geschieht analog zu den lokalen Ressourcen.<br />
Abbildung 8 verdeutlicht den Vorgang.<br />
Abbildung 8 Überwachung entfernter, öffentlicher Ressourcen<br />
eigene Darstellung<br />
Für den Nagios Prozess macht es keinen Unterschied, ob der zu überwachende Dienst entfernt<br />
oder lokal ist. Er ruft nur ein Plugin auf, welches <strong>die</strong> Aufgabe hat, einen Return-Code<br />
zurückzuliefern. Um jedoch auf Dienste und Ressourcen zuzugreifen, <strong>die</strong> nicht über einen<br />
Port am Remote-Host ansprechbar sind, bedarf es einer anderen Lösung.
- 39 -<br />
4.4 Überwachung entfernter, privater Ressourcen<br />
Private Ressourcen unterscheiden sich von öffentlichen Ressourcen insofern, dass sie nicht<br />
direkt von einem entfernten Host abrufbar sind, sondern eine vermittelnde Instanz benötigen.<br />
Für <strong>die</strong>se vermittelnde Instanz haben sich im Wesentlichen drei unterschiedliche Ansätze<br />
etabliert.<br />
4.4.1 Nagios Remote Plugin Executor (NRPE)<br />
Die verbreitestete Möglichkeit, Plugins auf entfernten Hosts auszuführen, ist der NRPE.<br />
Ebenso wie <strong>die</strong> Server-Software Nagios, wird NRPE von Ethan Galstad entwickelt und<br />
gepflegt. Zum Zeitpunkt <strong>die</strong>ser Ar<strong>bei</strong>t hat der Daemon den Versionsstand 2.0 und ist auf der<br />
Nagios-Webseite (http://www.nagios.org/download/extras.php) zu finden.<br />
4.4.1.1 Konzept und Implementierung<br />
Der NRPE kommt der Idee einer vermittelnden Instanz am nahsten.<br />
Abbildung 9 Indirekter Service-Check mit NRPE<br />
eigene Darstellung
- 40 -<br />
Der Nagios Prozess ruft, wie gewohnt, ein lokales Plugin auf; in <strong>die</strong>sem Fall check_nrpe.<br />
Dieses Plugin fragt jedoch nicht direkt eine Ressource ab, sondern bildet mit dem NRPE-<br />
Daemon eine, für den Nagios Prozess nicht sichtbare, Vermittlungsschicht. Über Optionen,<br />
<strong>die</strong> check_nrpe übergeben <strong>werden</strong>, ruft der NRPE-Daemon ein lokales Plugin auf dem<br />
entfernten Host auf. Das Ergebnis wird daraufhin dem check_nrpe zurückgegeben, welcher es<br />
an den Nagios Prozess durchreicht.<br />
4.4.1.2 Sicherheitsmerkmale<br />
Der NRPE unterstützt SSL sowie IP-Restriction als Sicherheitsmerkmale. Um SSL nutzen zu<br />
können, muss <strong>bei</strong>m Kompilieren <strong>die</strong> Option --enable-ssl angegeben <strong>werden</strong>. Weiterhin muss<br />
das OpenSSL 1 -Paket installiert sein. In <strong>die</strong>ser Ar<strong>bei</strong>t wurde auf OpenSSL 0.9.7<br />
zurückgegriffen.<br />
Zur Authentifikation des Nagios-Servers muss dessen IP explizit in der NRPE-Konfiguration<br />
angeben <strong>werden</strong>. Diese Authentifizierung ist nicht sehr sicher, da IP's leicht zu fälschen sind.<br />
Des Weiteren muss <strong>die</strong> Konfiguration auf sämtlichen entfernten Hosts modifiziert <strong>werden</strong>,<br />
wenn sich <strong>die</strong> IP des Nagios-Servers ändert. Diese Art der Authentifizierung ist jedoch in den<br />
meisten Fällen ausreichend (im Bezug auf den NRPE).<br />
Der NRPE läuft per Default unter Benutzer:Gruppe nagios:nagios. Somit <strong>werden</strong> auch <strong>die</strong><br />
Plugins mit <strong>die</strong>sem Benutzer aufgerufen und ausgeführt. Werden für spezielle Anforderungen<br />
andere Nutzerrechte verlangt, <strong>kann</strong> entweder auf <strong>die</strong> SUDO 2 -Funktionalität zurückgegriffen<br />
<strong>werden</strong>, oder es wird ein Binary verwendet, welches mit dem SUID 3 -Flag versehen ist.<br />
Letzteres ist unter Sicherheitsaspekten jedoch als kritisch anzusehen und sollte in der Praxis<br />
vermieden <strong>werden</strong>.<br />
1 Das OpenSSL-Projekt, stellt eine freie SSL (v2/v3) und TLS (v1) Protokoll-Implementierung bereit und ist<br />
unter http://www.openssl.org zu finden.<br />
2 SUDO (von „Superuser DO“) erlaubt benannten Benutzern oder Gruppen Root-Level Befehle auszuführen,<br />
ohne das Root-Passwort zu verwenden. SUDO zeichnet auch sämtliche Befehle und Argumente detailliert in<br />
einer Log-Datei auf und ermöglicht so, seine Verwendung nachzuvollziehen.<br />
3 Ein spezielles Bit in den Permissions einer Datei ermöglicht das Ausführen <strong>die</strong>ser Datei unter dem Benutzer,<br />
welchem <strong>die</strong> Datei gehört. Gerade solche Dateien sind jedoch beliebte Angriffsziele für böswillige Nutzer,<br />
welche über Buffer-Overflows an fremde Rechte gelangen können.
- 41 -<br />
4.4.1.3 Konfiguration<br />
Die Konfiguration des NRPE-Daemons erfolgt in erster Linie dezentral. Folgende Optionen<br />
sind vorhanden:<br />
• server_port=<br />
Nummer des Ports auf welchem der Daemon auf Verbindungen wartet.<br />
• server_address=<br />
Lokale IP-Adresse, an <strong>die</strong> sich der NRPE binden soll. Gerade in Cluster-Umgebungen ist<br />
<strong>die</strong>se Funktion von Vorteil. Ist <strong>die</strong>se Option nicht angegeben, bindet sich der NRPE an alle<br />
Interfaces.<br />
• allowed_hosts=<br />
Eine mit Kommas getrennte Liste von Hosts, <strong>die</strong> eine Verbindung zum NRPE aufnehmen<br />
dürfen. Da <strong>die</strong>se Überprüfung intern nur rudimentär stattfindet, wird <strong>die</strong> Verwendung von<br />
inetd 1 bzw. xinetd 2 empfohlen, um nur speziellen Hosts den Zugriff auf den Port des NRPE<br />
zu erlauben.<br />
Wird NRPE mit inetd oder xinetd verwendet, ist <strong>die</strong>se Option ohne Bedeutung.<br />
• nrpe_user=<br />
Der Benutzername oder <strong>die</strong> ID, unter welcher der NRPE laufen soll.<br />
Wird NRPE mit inetd oder xinetd verwendet, ist <strong>die</strong>se Option ohne Bedeutung.<br />
• nrpe_group=<br />
Der Gruppenname oder <strong>die</strong> ID, unter welcher der NRPE laufen soll.<br />
Wird NRPE mit inetd oder xinetd verwendet, ist <strong>die</strong>se Option ohne Bedeutung.<br />
• dont_blame_nrpe=<br />
Anhand <strong>die</strong>ser Option wird entschieden, ob dem NRPE-Daemon zusätzliche Argumente<br />
übergeben <strong>werden</strong> dürfen. Diese Argumente können <strong>bei</strong>m Ausführen von lokalen Plugins<br />
berücksichtigt <strong>werden</strong>. Es wird jedoch explizit darauf hingewiesen, dass das Aktivieren<br />
<strong>die</strong>ser Option ein Sicherheitsrisiko darstellt.<br />
1 Der inetd ist ein „Superserver“, welcher auf ankommende Verbindungen wartet, <strong>die</strong>se annimmt und den<br />
passenden Serverprozess startet, für welchen <strong>die</strong> Verbindung bestimmt ist. Daraus ergibt sich der Vorteil, das<br />
nicht jeder Netzwerk<strong>die</strong>nst permanent laufen und System-Ressourcen belegen muss, sondern automatisch <strong>bei</strong><br />
Bedarf gestartet <strong>werden</strong> <strong>kann</strong>.<br />
2 Das „x“ vor dem inetd steht für „extended“. Die Erweiterungen beziehen sich primär auf unterschiedliche<br />
Sicherheitstechniken.
- 42 -<br />
• debug=<br />
Diese Option bestimmt, ob Debug-Meldungen in <strong>die</strong> Syslog 1 geschrieben <strong>werden</strong>, oder<br />
nicht.<br />
• command_timeout=<br />
Hiermit wird <strong>die</strong> maximale Sekundenanzahl festgelegt, <strong>die</strong> der NRPE-Daemon auf das<br />
Beenden eines Plugins wartet, bevor <strong>die</strong>ses aktiv beendet wird.<br />
• include=<br />
Diese Option erlaubt das Einlesen von weiteren Konfigurationsdateien.<br />
• include_dir=<br />
Jede Datei mit der Endung .cfg wird in dem hier angegebenen Verzeichnis oder<br />
Unterverzeichnis eingelesen und verar<strong>bei</strong>tet.<br />
• command[]=<br />
Diese Option erlaubt Kommando-Definitionen, welche der NRPE-Daemon ausführen<br />
<strong>kann</strong>. Innerhalb <strong>die</strong>ser Definitionen können Variablen verwendet <strong>werden</strong>, welche dem<br />
NRPE-Daemon <strong>bei</strong>m Aufruf übergeben <strong>werden</strong>. Hierzu muss der NRPE-Daemon jedoch<br />
mit --enable-command-args kompiliert und in der Konfiguration <strong>die</strong> Option<br />
dont_blame_nrpe aktiviert <strong>werden</strong>. Ein Beispiel zur Überwachung des Swap-Spaces könnte<br />
wie folgt aussehen:<br />
command[check_swap]=../libexec/check_swap -w 50% -c 25%<br />
Wurde der NRPE-Daemon vollständig konfiguriert, <strong>kann</strong> er gestartet <strong>werden</strong>.<br />
nagios@host-a: ./nrpe -c nrpe.cfg -d<br />
nagios@host-a: pidof nrpe<br />
7451<br />
Die Option -c ermöglicht das Übergeben einer Konfigurationsdatei und <strong>die</strong> Option -d startet<br />
den NRPE als Daemon. Mit pidof 2 wird überprüft, ob der Daemon-Prozess tatsächlich<br />
gestartet wurde.<br />
1 Unter Unix <strong>die</strong>nt das Konzept des Syslog-Dämons dazu, Logging-Nachrichten wie Warnungen oder<br />
bemerkenswerte Ereignisse aufzufangen und in einer Datei abzuspeichern.<br />
2 pidof ist ein Linux Standardtool um <strong>die</strong> ID eines Prozesses anzeigen zu lassen.
- 43 -<br />
4.4.1.4 Aufruf des check_nrpe<br />
Über das check_nrpe Plugin <strong>kann</strong> der Nagios-Server eine Verbindung mit dem entfernten<br />
NRPE-Daemon aufnehmen. Folgende Optionen sind möglich:<br />
• -H <br />
Adresse des entfernten Hosts, auf welchem der NRPE-Daemon läuft.<br />
• [-p ] [default=5666]<br />
Portnummer des NRPE-Daemon.<br />
• [-t ] [default=10]<br />
Maximale Anzahl der Sekunden <strong>die</strong> check_nrpe auf ein Ergebnis warten soll.<br />
• [-c ]<br />
Der Name des Kommandos, welches aufgerufen <strong>werden</strong> soll. Dieses muss einem<br />
definierten Kommando aus der nrpe.cfg entsprechen.<br />
• [-a ]<br />
Eine Liste von Argumenten, welche dem Kommando übergeben <strong>werden</strong> sollen. Diese<br />
Option wird nur ausgewertet, wenn der NRPE mit --enable-command-args kompiliert und<br />
in der nrpe.cfg <strong>die</strong> Option dont_blame_nrpe aktiviert wurde.<br />
• [-n]<br />
Dieser undokumentierte Switch zwingt das check_nrpe eine Verbindung ohne SSL<br />
aufzubauen. Wenn der NRPE-Daemon ohne, das Plugin check_nrpe jedoch mit<br />
SSL-Support kompiliert wurde, ist <strong>die</strong> Verwendung <strong>die</strong>ser Option notwendig.
- 44 -<br />
Im Folgenden wird von dem Nagios-Server über das check_nrpe Plugin eine Verbindung zum<br />
NRPE-Daemon aufgebaut.<br />
nagios@host-n: ./check_nrpe -H host-a<br />
NRPE v2.0<br />
Da keine weiteren Argumente übergeben wurden, antwortet der NRPE-Daemon nur mit seiner<br />
Versionsnummer. Der Verbindungstest war erfolgreich.<br />
Wurde der NRPE mit --enable-command-args kompiliert, besteht <strong>die</strong> Möglichkeit, <strong>die</strong> Plugins<br />
nahezu komplett zentral zu konfigurieren. Hierzu <strong>kann</strong> ein Template-Command wie folgt<br />
konfiguriert <strong>werden</strong>:<br />
command[check_args]=../libexec/check_$ARG1$ $ARG2$<br />
Über den Aufruf des check_nrpe lässt sich nun neben den Thresholds auch das Plugin selbst<br />
variieren.<br />
nagios@host-n# ./check_nrpe -H host-a -c check_template -a "swap -w50% -c25%"<br />
In <strong>die</strong>sem Falle wird auf host-a das Plugin ../libexec/check_swap mit den Argumenten<br />
-w50% -c25% aufgerufen.<br />
4.4.1.5 Zusammenfassung<br />
Die Features des NRPE sind in der nachfolgenden Tabelle noch einmal zusammengefasst.<br />
Features<br />
NRPE<br />
sichere Authentifikation -<br />
IP-Restriction<br />
X<br />
Verschlüsselung<br />
X<br />
Remote-Plugins ausführbar<br />
X<br />
Software Distribution -<br />
Plugins Ausführung unter anderem User z.T. / -<br />
Asynchrone Funktionalität -<br />
Externes Scheduling -<br />
Scheduling über Nagios<br />
X<br />
Zentrale Konfiguration<br />
X<br />
Lokale Konfiguration<br />
X<br />
In der Praxis zeigt sich der Einsatz des NRPE als robust und effektiv. Selbst <strong>bei</strong> der<br />
Verwendung von SSL ergeben sich keine kritischen Performance-Einbußen. Der wesentliche<br />
Nachteil des NRPE besteht in der begrenzten Authentifikationsmöglichkeit.
- 45 -<br />
4.4.2 Nagios Service Check Acceptor (NSCA)<br />
Der zweite von Galstad gepflegte Daemon ist der Nagios Service Check Acceptor (NSCA).<br />
Mit Hilfe des Clients send_nsca ermöglicht der NSCA das Übermitteln von Service-Check<br />
Ergebnissen an den Nagios Prozess. Zum Zeitpunkt <strong>die</strong>ser Ar<strong>bei</strong>t ist der NSCA in der Version<br />
2.4 aktuell und ebenso wie der NRPE auf der Nagios-Homepage<br />
(http://www.nagios.org/download/extras.php) zu finden.<br />
4.4.2.1 Konzept und Implementierung<br />
Bei der Verwendung des NRPE <strong>kann</strong> Nagios auf seine übliche Funktionalität, das Aufrufen<br />
von Plugins, zurückgreifen. Der NSCA kommt immer dann zum Einsatz, wenn auf das<br />
Nagios-interne Scheduling verzichtet <strong>werden</strong> <strong>kann</strong> oder muss. Das <strong>kann</strong> der Fall sein, wenn<br />
Statusmeldungen von lokalen Maintenance-Tools übermittelt <strong>werden</strong> sollen, <strong>die</strong> auf dem<br />
lokalen Rechner über cron 1 gestartet <strong>werden</strong>. Eine zweite Einsatzmöglichkeit bietet NSCA für<br />
den Fall, dass das auszuführende Plugin eine hohe Laufzeit aufweist und <strong>die</strong> üblichen Nagios-<br />
Timeouts überschreitet. Solche Plugins oder Scripte <strong>werden</strong> in <strong>die</strong>ser Ar<strong>bei</strong>t als Longrunner<br />
bezeichnet.<br />
1 Cron ist ein Programm, welches Unix-Benutzern automatisches Ausführen von Scripts und Programmen zu<br />
einem, auf <strong>die</strong> Minute konfigurierbaren, Zeitpunkt erlaubt
- 46 -<br />
In Abbildung 10 ist <strong>die</strong> primäre Verwendung des NSCA zu sehen.<br />
Abbildung 10 Passiver Service-Check mit NSCA<br />
eigene Darstellung<br />
Der externe Scheduler stößt ein Script an, welches entweder selbst oder mit Hilfe eines<br />
weiteren Plugins <strong>die</strong> gewünschen Daten sammelt, bewertet und das Ergebnis über den NSCA-<br />
Client send_nsca an den NSCA-Daemon sendet. Dieser schreibt <strong>die</strong> empfangenen<br />
Informationen in das External Command File des Nagios Prozesses, welches zyklisch<br />
ausgelesen und abgear<strong>bei</strong>tet wird.<br />
Wird als externer Scheduler <strong>bei</strong>spielsweise cron verwendet, so lassen sich genaue Startzeiten<br />
definieren, zu welchen der lokale Longrunner gestartet <strong>werden</strong> soll. Dieser Komfort erhöht<br />
jedoch den Aufwand für Wartung und Pflege, da hierzu Einstellungen am entfernten Host<br />
vorgenommen <strong>werden</strong> müssen. Eine Lösung bietet <strong>die</strong> Kombination des NSCA mit dem<br />
NRPE. Hierzu wird der externe Scheduler durch den NRPE ersetzt, welcher durch das<br />
Scheduling des Nagios Prozesses angestossen wird.
- 47 -<br />
Abbildung 11 Longrunner mit NSCA und NRPE<br />
eigene Darstellung<br />
Im Nagios wird ein zusätzlicher Service konfiguriert, der das Script auf Host A mit Hilfe des<br />
check_nrpe Plugins aufruft. Im ersten Schritt be<strong>die</strong>nt das gestartete Script den NRPE und<br />
übergibt <strong>die</strong>sem ein Rückgabewert mit der Information, erfolgreich gestartet worden zu sein.<br />
Diese Daten <strong>werden</strong> über das check_nrpe Plugin an den Nagios Prozess geliefert, welcher den<br />
gestarteten Service als OK anerkennt.<br />
Im zweiten Schritt startet das Script seine eigentliche Funktion und sammelt <strong>die</strong> gewünschten<br />
Daten. Der Übertragungsweg des Ergebnisses ist analog zum vorherigen Beispiel.<br />
4.4.2.2 Sicherheitsmerkmale<br />
Der NSCA erfüllt <strong>die</strong> wichtigsten Sicherheitsmerkmale. Wie der NRPE unterstützt der NSCA<br />
auch <strong>die</strong> Beschränkung auf festgelegte IP-Adressen. Jedoch muss in <strong>die</strong>sem Falle jede IP<br />
sämtlicher entfernter Hosts in der Konfigurationsdatei des NSCA eingetragen <strong>werden</strong>, was<br />
den Konfigurationsaufwand erheblich steigert.
- 48 -<br />
Weiterhin <strong>kann</strong> <strong>die</strong> Kommunikation zwischen dem NSCA-Client und -Daemon über<br />
verschiedene Verfahren verschlüsselt <strong>werden</strong>, darunter auch XOR. Gerade auf Plattformen,<br />
auf denen sich <strong>die</strong> OpenSSL-Unterstützung als problematisch herausstellt, ist <strong>die</strong>s von<br />
Interesse, da für <strong>die</strong> XOR „Verschleierung“ 1 keine SSL-Library benötigt wird und sie<br />
bedeutend schneller als 3DES 2 oder Blowfish 3 ar<strong>bei</strong>tet.<br />
Der NSCA-Daemon <strong>kann</strong> unter einem beliebigen Benutzer laufen. Als einzige Voraussetzung<br />
benötigt er den schreibenden Zugriff auf das External Command File des Nagios Prozesses.<br />
Der Aufruf von send_nsca ist ebenso benutzerunabhängig, lediglich der lesende Zugriff auf<br />
<strong>die</strong> Konfigurationsdatei wird benötigt. Damit ist es möglich, Befehle unter verschiedenen<br />
Benutzern aufzurufen und resultierende Ergebnisse mit send_nsca zu verschicken.<br />
4.4.2.3 Konfiguration des NSCA-Daemons<br />
Im Gegensatz zum NRPE ist der NSCA eine zentrale Instanz, zu welcher <strong>die</strong> Clients ihre<br />
Daten liefern. Daher ist auch <strong>die</strong> Konfiguration des Daemons an einer einzigen, zentralen<br />
Stelle möglich.<br />
Folgende Optionen enthält <strong>die</strong> nsca.cfg:<br />
• server_port=<br />
Nummer des Ports, auf welchem der Daemon auf Verbindungen horcht.<br />
• server_address=<br />
Lokale IP-Adresse, an <strong>die</strong> sich der NSCA binden soll. Ist <strong>die</strong>se Option nicht angegeben,<br />
bindet sich NSCA an alle Interfaces.<br />
• allowed_hosts=<br />
Eine mit Kommas getrennte Liste von Hosts, <strong>die</strong> eine Verbindung zum NSCA aufnehmen<br />
dürfen. Da <strong>die</strong>se Überprüfung intern nur rudimentär stattfindet, wird <strong>die</strong> Verwendung des<br />
inetd empfohlen, um nur speziellen Hosts den Zugriff auf den NSCA zu erlauben.<br />
• nsca_user=<br />
Der Benutzername oder <strong>die</strong> ID, unter welcher der NSCA laufen soll.<br />
Wird NSCA mit inetd oder xinetd verwendet, ist <strong>die</strong>se Option ohne Bedeutung.<br />
1 Vgl: Galstad, Ethan (2002), Sample NSCA Daemon Config File<br />
2 Der DES (Data Encryption Standard) ist einer der be<strong>kann</strong>testen Algorithmen für symmetrische<br />
Verschlüsselung. Beim 3DES (Tripple DES) wird <strong>die</strong>ser dreifach hintereinander angewendet, um eine höhere<br />
Sicherheit zu erreichen.<br />
3 Blowfish ist ebenso wie DES eine Blockchiffrierung, jedoch wesentlich schneller als DES.
- 49 -<br />
• nsca_group=<br />
Der Gruppenname oder <strong>die</strong> ID, unter welcher der NSCA laufen soll.<br />
Wird NSCA mit inetd oder xinetd verwendet, ist <strong>die</strong>se Option ohne Bedeutung.<br />
• debug=<br />
Diese Option bestimmt, ob Debug-Meldungen in <strong>die</strong> Syslog geschrieben <strong>werden</strong>.<br />
• command_file=<br />
Vollständiger Pfad zu dem Nagios External Command File.<br />
• alternate_dump_file=<br />
Sollte der Nagios Prozess einmal nicht laufen, so <strong>kann</strong> der NSCA keine Daten in das<br />
External Command File schreiben. Die Option alternate_dump_file gibt eine alternative<br />
Datei an, in welcher <strong>die</strong> zwischenzeitlich auftretenden Ergebnisse gespeichert <strong>werden</strong><br />
können. Es empfiehlt sich das Start-Script des Nagios Prozesses dahingehend abzuändern,<br />
dass nach dem Start von Nagios der Inhalt des alternate_dump_file in das External<br />
Command File geschrieben wird.<br />
• aggregate_writes=<br />
Diese Option erhöht <strong>die</strong> Effizienz <strong>bei</strong>m Schreiben von Ergebnissen, indem mehrere<br />
Ergebnisse in einem Paket geschrieben <strong>werden</strong>, anstatt jedes einzelne für sich in das<br />
External Command File abzulegen. Es können jedoch nur Ergebnisse zusammengefasst<br />
<strong>werden</strong>, welche zuvor von einem Client gesammelt und in einem Durchgang übertragen<br />
wurden.<br />
• append_to_file=<br />
Diese Option steuert den Zugriff auf das External Command File und sollte „absolut<br />
immer“ 1 auf den Wert 0 gesetzt <strong>werden</strong> (das External Command File wird schreibend<br />
geöffnet). Im Falle des Wertes 1 wird <strong>die</strong> Named Pipe 2 anhängend (appending) geöffnet.<br />
1 Vgl: Galstad, Ethan (2002), Sample NSCA Daemon Config File<br />
2 Als Named Pipe (oder FIFO) wird unter Unix eine virtuelle Datei bezeichnet, <strong>die</strong> nur im Speicher existiert<br />
und als eine Schnittstelle zwischen Prozessen <strong>die</strong>nen <strong>kann</strong>. Daten können nach dem First-In/First-Out Prinzip<br />
in <strong>die</strong> Named Pipe geschrieben und ausgelesen <strong>werden</strong>.
- 50 -<br />
• max_packet_age=<br />
Mit Hilfe <strong>die</strong>ser Option wird <strong>die</strong> Verfallszeit von Ergebnissen definiert, welche von den<br />
entfernten Hosts übertragen <strong>werden</strong>. Der Wert sollte möglichst klein gehalten <strong>werden</strong>, um<br />
möglichen „replay“-Attacken 1 vorzubeugen. Er entspricht der Zeit, <strong>die</strong> der entfernte Host<br />
benötigt, seine Daten zum NSCA-Daemon zu schicken. Ein Wert über 900 (Sekunden) ist<br />
nicht möglich.<br />
• password=<br />
Hier wird das Passwort angegeben, welches zum Entschlüsseln der empfangenen Pakete<br />
verwendet <strong>werden</strong> soll. In Verbindung mit dem richtigen Verschlüsselungsverfahren lassen<br />
sich <strong>die</strong> übermittelten Daten wiederherstellen.<br />
• decryption_method=<br />
Die Entschlüsselungsmethode, welche verwendet <strong>werden</strong> soll. Die Liste der möglichen<br />
Varianten ist der Konfigurationsdatei (Vgl: Galstad, Ethan (2002), Sample NSCA Daemon<br />
Config File) zu entnehmen. Bei der Auswahl sollte auf eine gute Balance zwischen<br />
Sicherheit und Performance geachtet <strong>werden</strong>. Die hier angegebene<br />
Entschlüsselungsmethode muss mit der Verschlüsselungsmethode der NSCA-Clients<br />
übereinstimmen.<br />
Wurde der NSCA-Daemon vollständig konfiguriert, <strong>kann</strong> er gestartet <strong>werden</strong>.<br />
nagios@host-n: ./nsca -c nsca.cfg<br />
nagios@host-n: pidof nsca<br />
844<br />
Die Option -c ermöglicht das Übergeben einer Konfigurationsdatei. Mit pidof wird überprüft,<br />
ob der Daemon-Prozess tatsächlich gestartet wurde.<br />
1 Als replay-Attacken <strong>werden</strong> Angriffe bezeichnet, welche ein gültiges Paket aus dem Netzwerkverkehr<br />
herrausfiltern und erneut übermitteln. Anhand der darauf folgenden Antworten lassen sich nähere<br />
Informationen über das Ziel-System ermitteln oder einfache Denial-of-Service Attacken durchführen.
- 51 -<br />
4.4.2.4 Konfiguration des NSCA-Clients (send_nsca)<br />
Die Konfiguration von send_nsca <strong>bei</strong>nhaltet zwei Parameter:<br />
• password=<br />
Hier wird das Passwort angegeben, welches zum Verschlüsseln der zu versendenden<br />
Pakete verwendet <strong>werden</strong> soll. Dieses Passwort muss dem des NSCA-Daemons<br />
entsprechen.<br />
• encryption_method=<br />
Diese Option gibt <strong>die</strong> Verschlüsselungsmethode an, welche verwendet <strong>werden</strong> soll. Die<br />
Liste der möglichen Varianten ist der Konfigurationsdatei (Vgl: Galstad, Ethan (2002),<br />
Sample NSCA Client Config File) zu entnehmen. Bei der Auswahl sollte auf eine gute<br />
Balance zwischen Sicherheit und Performance geachtet <strong>werden</strong>. Die hier angegebene<br />
Verschlüsselungsmethode muss mit der Entschlüsselungsmethode des NSCA-Daemons<br />
übereinstimmen.<br />
4.4.2.5 Aufruf des send_nsca<br />
Der NSCA-Client send_nsca übermittelt beliebige Service-/Host-Check Ergebnisse an den<br />
NSCA-Daemon. Dieses Ergebnis muss einem definierten Format entsprechen. Als<br />
Trennzeichen <strong>werden</strong> Tabulatoren verwendet, hier als [tab] gekennzeichnet. Mehrere<br />
Ergebnisse können zeilenweise übertragen <strong>werden</strong>.<br />
• Service-Checks:<br />
[tab][tab][tab][newline]<br />
• Host-Checks:<br />
[tab][tab][newline]<br />
Die Schlüsselwörter <strong>werden</strong> wie folgt definiert:<br />
• hostname<br />
Bei Service-Check: Kurzname des Hosts, mit welchem der Service assoziiert ist.<br />
Bei Host-Check: Kurzname des Hosts.<br />
• descr<br />
Beschreibung des Services.<br />
• ret_code<br />
Der Return-Code des Ergebnisses (siehe Seite 36).<br />
• plugin_out<br />
Ausgabe des Plugins im ASCII-Format.
- 52 -<br />
Diese Check Ergebnisse <strong>werden</strong> dem send_nsca über stdin 1 übergeben. Weiterhin sind<br />
folgende Optionen <strong>bei</strong>m Aufruf von send_nsca möglich.<br />
• -H <br />
Adresse des entfernten Hosts, auf welchem der NSCA-Daemon läuft.<br />
• [-p ] [default=5667]<br />
Portnummer des NSCA-Daemon.<br />
• [-to ] [default=10]<br />
Maximale Anzahl der Sekunden, bevor <strong>die</strong> Verbindung abgebrochen wird.<br />
• [-d ] [default=tab]<br />
Trennzeichen für das Check Ergebnis.<br />
• [-c config_file]<br />
Name und Pfad der Konfigurationsdatei.<br />
Im folgenden Beispiel wird ein Service-Check Ergebnis von dem Host debian zu dem Nagios-<br />
Server mit der IP 10.101.202.101 übertragen. Zur klaren Erkennung des Trennzeichens wurde<br />
der Tabulator durch <strong>die</strong> Zeichenfolge [tab] substituiert.<br />
nagios@debian# echo “debian[tab]passive[tab]0[tab]OK Übertragung mit NSCA\<br />
erfolgreich am `date`“ | ./send_nsca -H 10.101.202.101 -c\<br />
send_nsca.cfg<br />
1 data packet(s) sent to host successfully.<br />
Zuletzt bestätigt send_nsca das erfolgreiche Übertragen eines Ergebnisses an den NSCA-<br />
Daemon, welches sich daraufhin im Webfrontend des Nagios Prozesses präsentiert:<br />
Abbildung 12 Passiver Service-Check im Webfrontend<br />
Quelle: Screenshot<br />
1 Der Stream „stdin“ entspricht der Standardeingabe unter Unix/Linux-Derivaten
- 53 -<br />
In der letzten Zeile der Abbildung 12 ist der soeben übertragene Service-Check mit der<br />
Bezeichnung „passiv“ wiederzufinden. Das rote „P“ neben der Bezeichnung gibt an, das es<br />
sich um einen passiven Check handelt und Nagios keine aktiven Checks für <strong>die</strong>sen Service<br />
von sich aus startet.<br />
4.4.2.6 Zusammenfassung<br />
Die nachfolgende Tabelle stellt <strong>die</strong> Features des NSCA noch einmal zusammengefasst dar.<br />
Features<br />
NSCA<br />
sichere Authentifikation<br />
X<br />
IP-Restriction<br />
X<br />
Verschlüsselung<br />
X<br />
Remote-Plugins ausführbar<br />
X<br />
Software Distribution -<br />
Plugins Ausführung unter anderem User X<br />
Asynchrone Funktionalität<br />
X<br />
Externes Scheduling<br />
X<br />
Scheduling über Nagios -<br />
Zentrale Konfiguration -<br />
Lokale Konfiguration<br />
X<br />
Der NSCA fällt insbesondere durch seine Sicherheitsmechanismen positiv auf. Bezüglich der<br />
Flexibilität nimmt der Nagios Service-Check Acceptor <strong>die</strong> oberste Position ein.<br />
Aufwändig erscheint jedoch <strong>die</strong> Pflege der freigegebenen IPs in der nsca.cfg. Zwar bietet <strong>die</strong><br />
allowed_hosts-Direktive Schutz vor gefälschten Ergebnissen von unbe<strong>kann</strong>ten Hosts.<br />
Dadurch das einige Server mehrere IPs besitzen und sich ihre IPs ändern können, besteht <strong>die</strong><br />
Gefahr, das Artefakte zurück bleiben.<br />
Ein wichtiges Merkmal ist <strong>die</strong> Abhängigkeit zu einem externen Scheduler. Der<br />
Nagios Prozess <strong>kann</strong> zwar ebenso als Scheduler für send_nsca verwendet <strong>werden</strong>, <strong>die</strong>ses<br />
Szenario bringt jedoch erhöhten Konfigurationsaufwand mit sich.
- 54 -<br />
4.4.3 Plugin check_by_ssh<br />
Die dritte Möglichkeit an private Ressourcen entfernter Hosts zu gelangen, bietet das<br />
check_by_ssh Plugin. Das Prinzip entspricht dem des NRPE, mit dem Unterschied, das auf<br />
den zumeist vorhandenen SSH-Daemon zurückgegriffen wird. Damit <strong>kann</strong> <strong>die</strong> Installation,<br />
Konfiguration und Wartung eines zusätzlichen Daemons vermieden <strong>werden</strong>. Insbesondere für<br />
entmilitarisierte Zonen (DMZ 1 ) ist <strong>die</strong>se Methode interessant, da kein weiterer Port geöffnet<br />
<strong>werden</strong> muss, sofern bereits SSH erlaubt wird.<br />
4.4.3.1 Konzept und Implementierung<br />
Wie <strong>bei</strong>m NRPE ruft der Nagios Prozess ein Plugin auf, welches ihm ein Ergebnis<br />
zurückliefert. Zuvor baut es eine SSH-Verbindung zum entfernten Host auf und führt dort das<br />
gewünschte Plugin aus.<br />
Abbildung 13 Indirekter Service-Check mit check_by_ssh<br />
eigene Darstellung<br />
Die Information, auf welchem Host welches Plugin auszuführen ist, wird dem Plugin vom<br />
Nagios Prozess über <strong>die</strong> Kommandozeile mitgeteilt.<br />
1 Bei einer DMZ (Demilitarized Zone) handelt es sich um einen geschützten Rechnerverbund, der sich<br />
zwischen zwei Netzwerken befindet. Der Rechnerverbund wird jeweils durch eine Firewall gegen das<br />
dahinterstehende Netzwerk abgeschirmt.
- 55 -<br />
4.4.3.2 Sicherheitsmerkmale<br />
Bei SSH handelt es sich um ein sicheres Verfahren, das sich weltweit bewährt hat. Die<br />
Verwendung des SSH-Protokolls erlaubt eine sichere Authentifkation und Verschlüsselung<br />
mittels Public-Key-Verfahren. Der hohe Sicherheitsstandard hat jedoch eine schlechte<br />
Performance als Preis.<br />
Das für <strong>die</strong>se Ar<strong>bei</strong>t verwendete OpenSSH ist eine freie Implementierung der SSH<br />
Protokollsammlung und ist für viele Plattformen verfügbar. Die aktuelle Version 3.8 wurde<br />
am 24. Februar 2004 freigegeben und ist unter http://www.openssh.org zu finden.<br />
4.4.3.3 Konfiguration der Secure Shell (SSH)<br />
Zur Authentifikation wird das Public-Key-Verfahren verwendet. Host N hält den privaten<br />
Schlüssel vor, sämtliche entfernten Hosts haben den Public Key des Benutzers nagios in ihrer<br />
~/.ssh/authorized_keys eingetragen. Zusätzlich müssen <strong>die</strong> öffentlichen Host-Schlüssel<br />
sämtlicher entfernter Hosts in der ~/.ssh/know_hosts auf dem Nagios-Server stehen 1 . Sind<br />
<strong>die</strong>se Voraussetzungen erfüllt, ist ein passwortloser Zugriff vom Nagios Host auf <strong>die</strong><br />
entfernten Hosts möglich.<br />
Die Default-Optionen der sshd.conf sind für den Betrieb <strong>die</strong>ser Lösung bereits ausreichend.<br />
Sollten <strong>die</strong>se verändert <strong>werden</strong>, so ist darauf zu achten, folgende Einstellungen <strong>bei</strong>zubehalten:<br />
• RSAAuthentication yes<br />
Erlaubt <strong>die</strong> RSA-Authentifikation. Diese Option muss aktiviert sein, wird das alte SSH-<br />
Protokoll 1 verwendet. Für Version 2 hat <strong>die</strong>se Option keine Bedeutung.<br />
• PubkeyAuthentication yes<br />
Gibt an, ob eine Authentifikation mit dem Public-Key-Verfahren erlaubt wird.<br />
1 Durch <strong>die</strong> Deaktivierung des StrictHostKeyChecking <strong>kann</strong> <strong>die</strong> umständliche Pflege der Host-Keys umgangen<br />
<strong>werden</strong>, s. Seite 127.
- 56 -<br />
4.4.3.4 Aufruf des check_by_ssh Plugins<br />
Das aktive, indirekte Service-Check-Verfahren mit check_by_ssh wird über <strong>die</strong> vielseitigen<br />
Optionen des Plugins gesteuert.<br />
• [-f]<br />
Zwingt den SSH-Prozess in den Hintergrund, kurz bevor das übergebene Kommando<br />
ausgeführt wird.<br />
• [-4], [--use-ipv4]<br />
Gibt an, das Internet Protokoll in der Version 4 zu verwenden.<br />
• [-6], [--use-ipv6]<br />
Gibt an, das Internet Protokoll in der Version 6 zu verwenden.<br />
• [-t timeout ]<br />
Maximale Anzahl der Sekunden, <strong>die</strong> check_by_ssh auf ein Ergebnis warten soll.<br />
• [-l user], [--logname=USERNAME]<br />
SSH Benutzername auf dem entfernten Host.<br />
• -H , --hostname=ADDRESS<br />
Hostname oder IP-Adresse des entfernten Hosts.<br />
• -C , --command='COMMAND STRING'<br />
Kommando, welches auf dem entfernten Host ausgeführt <strong>werden</strong> soll.<br />
• [-n name], [--name=NAME]<br />
Name des Hosts aus der Nagios Konfiguration. Sinnvoll <strong>bei</strong>m Einsatz des check_by_ssh<br />
Plugins für passive Service-Checks.<br />
• [-s servicelist], [--services=LIST]<br />
Eine Liste der Nagios Service-Bezeichnungen, durch „:“ getrennt. Sinnvoll <strong>bei</strong>m Einsatz<br />
des check_by_ssh Plugins für passive Service-Checks.<br />
• [-O outputfile], [--output=FILE]<br />
Pfad zum External Command File von Nagios. Sinnvoll <strong>bei</strong>m Einsatz des check_by_ssh<br />
Plugins für passive Service-Checks.
- 57 -<br />
• [-p port], [--port=INTEGER]<br />
Port des SSH-Daemons, zu welchem <strong>die</strong> Verbindung aufgebaut <strong>werden</strong> soll.<br />
• [-h], [--help]<br />
Aufruf der ausführlichen Hilfe von check_by_ssh.<br />
• [-V], [--version]<br />
Information über <strong>die</strong> Version von check_by_ssh.<br />
• [-1], [--proto1]<br />
Zwingt SSH, <strong>die</strong> Protokoll-Version 1 zu verwenden.<br />
• [-2], [--proto1]<br />
Zwingt SSH, <strong>die</strong> Protokoll-Version 2 zu verwenden.<br />
• [-w], [--warning=DOUBLE]<br />
Anzahl der Sekunden, bevor der WARNING-Status zurückgegeben wird.<br />
• [-c], [--critical=DOUBLE]<br />
Anzahl der Sekunden, bevor der CRITICAL-Status zurückgegeben wird.<br />
Soll check_by_ssh im passiv-Modus verwendet <strong>werden</strong>, so können mehrere „-C“ Optionen<br />
angegeben <strong>werden</strong>. Dies setzt <strong>die</strong> Verwendung der Optionen „-O“, „-s“ und „-n“ voraus. Die<br />
Liste der Services muss der Reihenfolge der „-C“-Optionen entsprechen 1 .<br />
Ein typischer Aufruf zur Überprüfung des Auslagerungsspeichers auf dem entfernten Host A<br />
mit Hilfe des check_by_ssh Plugins sieht wie folgt aus:<br />
nagios@host-n# ./check_by_ssh -H host-a -C "./check_swap -w50% -c25%"<br />
SWAP OK: 51% free (1806 MB out of 3549 MB)|swap=1806MB;1774;887;0;3549<br />
Der Rückgabewert entspricht dem des check_swap Plugins, welchen der Nagios Prozess weiter<br />
verar<strong>bei</strong>ten <strong>kann</strong>.<br />
1 Vgl: Nagios Plugin Development Team (2003), check_by_ssh detailed help
- 58 -<br />
4.4.3.5 Zusammenfassung<br />
Zusammenfassend ergibt sich folgende Übersicht der Features:<br />
Features<br />
check_by_ssh<br />
sichere Authentifikation<br />
X<br />
IP-Restriction<br />
X<br />
Verschlüsselung<br />
X<br />
Remote-Plugins ausführbar<br />
X<br />
Software Distribution<br />
X<br />
Plugins Ausführung unter anderem User X<br />
Asynchrone Funktionalität -<br />
Externes Scheduling -<br />
Scheduling über Nagios<br />
X<br />
Zentrale Konfiguration<br />
X<br />
Lokale Konfiguration -<br />
Zwar ist das check_by_ssh Plugin sehr flexibel, jedoch bringt es einen entscheidenden<br />
Nachteil mit sich. Für jeden Check muss der SSH-Client aufgerufen <strong>werden</strong>. Dieser ist, im<br />
Vergleich zum NRPE oder NSCA, sehr ressourcenlastig. Insbesondere <strong>bei</strong> einer großen<br />
Anzahl von Service-Checks/Minute ist von dem Einsatz <strong>die</strong>ses Plugin's abzuraten. Für den<br />
gezielte Einsatz in Firewallumgebungen können <strong>die</strong> Vorteile von check_by_ssh jedoch<br />
überwiegen.
- 59 -<br />
4.4.4 Fazit<br />
Der Einsatz eines „Agenten“ (vermittelnde Instanz) ist zwingend notwendig, sollen private<br />
Ressourcen in <strong>die</strong> Überwachung aufgenommen <strong>werden</strong>. Sinnvoll ist eine Kombination der<br />
verschiedenen Möglichkeiten, um sämtliche Benefits auszunutzen. Die nachfolgende Tabelle<br />
stellt <strong>die</strong> wesentlichen Eigenschaften der einzelnen Tools dar.<br />
Features NRPE NSCA check_by_ssh<br />
sichere Authentifikation - X X<br />
IP-Restriction X X X<br />
Verschlüsselung X X X<br />
Remote-Plugins ausführbar X X X<br />
Software Distribution - - X<br />
Plugins Ausführung unter anderem User z.T. / - X X<br />
Asynchrone Funktionalität - X -<br />
Externes Scheduling - X -<br />
Scheduling über Nagios X - X<br />
Zentrale Konfiguration X - X<br />
Lokale Konfiguration X X -<br />
Da der NRPE <strong>die</strong> geringste Komplexität aufweist, empfiehlt er sich als Agent für <strong>die</strong> breite<br />
Masse. Einmal auf sämtlichen entfernten Hosts installiert, lassen sich <strong>die</strong> Schwellwerte und<br />
weitere Optionen der vorhandenen Plugins zentral auf dem Nagios Server verändern. Der<br />
NRPE ist selbst mit Verschlüsselung sehr performant. Leider ist keine ausreichende<br />
Authentifizierungsmethode vorhanden. Hier bietet der NSCA mehr Schutz.<br />
Der Einsatz von NSCA bietet sich immer dann an, wenn Longrunner ausgeführt <strong>werden</strong><br />
müssen. Das Ergebnis <strong>kann</strong>, unabhängig von Timeouts, zu jeder Zeit übermittelt <strong>werden</strong>.<br />
Dieses Feature bieten der NRPE sowie das check_by_ssh Plugin nur über Umwege.<br />
Letzteres bietet <strong>die</strong> größte Sicherheit <strong>bei</strong> schwächster Performance. In sicherheitsrelevanten<br />
Umgebungen jedoch, wie DMZ, ist das check_by_ssh Plugin das Mittel der Wahl.
- 60 -<br />
4.5 Distributed Monitoring<br />
Soll eine hohe Anzahl von Servern überwacht <strong>werden</strong>, summiert sich <strong>die</strong> Last auf dem<br />
Nagios-Server drastisch. Ein Beispiel aus der Praxis ist <strong>die</strong> IT-Umgebung der<br />
Volkswagen AG. Betriebsinterne Kalkulationen haben ergeben, dass das derzeit eingesetzte<br />
System Management Tool IBM/Tivoli etwa 1280 Service-Checks pro Minute dezentral<br />
durchführt. Da<strong>bei</strong> wurden sämtliche Service-Checks mit einer Cycle-Time von 60 bis 604800<br />
Sekunden berücksichtigt.<br />
Um mit Nagios <strong>die</strong>se Umgebung zu überwachen, müssten 1280 Checks in der Minute<br />
angestoßen, auf <strong>die</strong> Rückgabewerte gewartet, verar<strong>bei</strong>tet und eventuell eskaliert <strong>werden</strong>. Um<br />
<strong>die</strong> auftretende Last auf mehrere Server zu verteilen, empfiehlt sich das Distributed<br />
Monitoring.
- 61 -<br />
4.5.1 Architektur<br />
Nagios bietet mit eigenen Mitteln eine Lastverteilung und präsentiert in der Dokumentation<br />
folgenden Lösungsvorschlag.<br />
Abbildung 14 Distributed Monitoring<br />
Quelle: Galstad, Ethan (2003): Nagios Documentation Version 1.0
- 62 -<br />
Die wesentliche Last wird durch <strong>die</strong> Vielzahl der lokalen Plugin-Aufrufe des Nagios<br />
Prozesses erzeugt. Diese Last lässt sich durch eine 2-stufige Server-Architektur auf insgesamt<br />
n Nagios-Server verteilen (wo<strong>bei</strong> n >= 2 Server entspricht).<br />
• Central Monitoring Server<br />
Dieser primäre Monitoring Server erhält <strong>die</strong> Ergebnisse sämtlicher Checks über den<br />
NSCA-Daemon direkt in sein External Command File. Er kennt sämtliche Hosts mit ihren<br />
Services und eskaliert <strong>bei</strong> Bedarf auftretende Fehler. Der Central Monitoring Server führt<br />
keine aktiven Service-Checks aus, ausgenommen Freshness-Checks (siehe Kapitel 5.4).<br />
• Distributed Monitoring Server #n<br />
Die Distributed Monitoring Server kennen jeweils eine Untermenge der gesamten Hosts<br />
mit ihren Services und sind für <strong>die</strong>se direkt zuständig. Sie führen aktive Service-Checks<br />
durch und übergeben <strong>die</strong> Ergebnisse an den Central Monitoring Server. Für das Distributed<br />
Monitoring ist mindestens 1 Distributed Monitoring Server notwendig.<br />
4.5.2 Konfiguration<br />
Folgende Konfigurationsoptionen in der nagios.cfg sind für das Distributed Monitoring<br />
relevant:<br />
Central Monitoring Server:<br />
• enable_notifications = 1<br />
• active_service_checks = 0<br />
• exernal_command_checks = 1<br />
• passive_service_checks = 1<br />
Distributed Monitoring Server #n:<br />
• enable_notifications = 0<br />
• obsess_over_service = 1<br />
• ocsp_command =
- 63 -<br />
Ein <strong>bei</strong>spielhaftes ocsp_command zeigt <strong>die</strong> Nagios-Dokumentation:<br />
#!/bin/sh<br />
# Arguments:<br />
# $1 = host_name (Short name of host that the service is<br />
# associated with)<br />
# $2 = svc_description (Description of the service)<br />
# $3 = state_string (A string representing the status of<br />
# the given service - "OK", "WARNING", "CRITICAL"<br />
# or "UNKNOWN")<br />
# $4 = plugin_output (A text string that should be used<br />
# as the plugin output for the Service-Checks)<br />
#<br />
# Convert the state string to the corresponding return code<br />
return_code=-1<br />
case "$3" in<br />
OK)<br />
return_code=0<br />
;;<br />
WARNING)<br />
return_code=1<br />
;;<br />
CRITICAL)<br />
return_code=2<br />
;;<br />
UNKNOWN)<br />
return_code=-1<br />
;;<br />
esac<br />
# pipe the service check info into the send_nsca program, which<br />
# in turn transmits the data to the nsca daemon on the central<br />
# monitoring server<br />
/bin/printf "%s\t%s\t%s\t%s\n" "$1" "$2" "$return_code" "$4" |<br />
send_nsca central_monitoring_server -c send_nsca.cfg<br />
Nach jedem Service-Check ruft der Distributed Monitoring Server <strong>die</strong>ses Script mit folgenden<br />
Optionen auf:<br />
define command {<br />
command_name<br />
command_line<br />
}<br />
submit_check_result<br />
submit_check_result $HOSTNAME$ '$SERVICEDESC$'<br />
$SERVICESTATE$ '$OUTPUT$'<br />
Die Makro-Definitionen, welche als Optionen übergeben <strong>werden</strong>, sind wie folgt definiert:<br />
• $HOSTNAME$: Der Name des Hosts, zu welchem das Ergebnis gehört.<br />
• $SERVICEDESC$: Kurzbeschreibung des Service-Checks, wie er in services.cfg<br />
definiert ist.<br />
• $SERVICESTATE$: Ein String des bewerteten Ergebnisses, „OK“, „WARNING“,<br />
„CRITICAL“ oder „UNKNOWN“.<br />
• $OUTPUT$: Die Ausgabe des Service-Checks als String.
- 64 -<br />
4.6 Failover Monitoring<br />
Um eine höchstmögliche Verfügbarkeit der Überwachung zu gewährleisten, <strong>kann</strong> der Nagios<br />
Server redundant aufgebaut <strong>werden</strong>. Wird Distributed Monitoring verwendet, ist das in<br />
<strong>die</strong>sem Kapitel beschriebene Szenario auf <strong>die</strong> einzelnen Distributed Monitoring Server zu<br />
übertragen.<br />
4.6.1 Architektur<br />
Zur Redundanz <strong>werden</strong> zwei Nagios-Server benötigt, der Master-Host und ein Slave-Host.<br />
Beide Hosts verwenden <strong>die</strong>selbe Konfiguration, mit dem Unterschied, dass der Slave-Host <strong>die</strong><br />
aktiven Service-Checks und Notifications deaktiviert hat. Dies wird durch <strong>die</strong> Befehle<br />
STOP_EXECUTING_SERVICE_CHECKS und DISABLE_NOTIFICATIONS erreicht, welche in das External<br />
Command File zu schreiben sind. Wichtig ist hier<strong>bei</strong> <strong>die</strong> korrekte Syntax.<br />
Scheduler<br />
Ext. Command File<br />
start/stop<br />
Nagios Prozess<br />
Slave Host<br />
check-nrpe<br />
nsca<br />
Plugin<br />
nrpe<br />
Nagios Prozess<br />
check-nagios<br />
Master Host<br />
send-nsca<br />
ocsp<br />
Plugin<br />
Abbildung 15 Failover Monitoring<br />
eigene Darstellung<br />
Der Master-Host überwacht sämtliche Services. Nach jedem Service-Check wird über <strong>die</strong><br />
Funktion Obsessive Compulsive Service Processor Command (ocsp) ein Script aufgerufen,<br />
welches das Ergebnis des Service-Checks mit Hilfe des NSCA an den Slave-Host überträgt.<br />
Damit wird <strong>bei</strong> einem Ausfall des Master-Hosts garantiert, dass der Slave-Host über <strong>die</strong><br />
Status sämtlicher Services informiert ist.
- 65 -<br />
Überwacht wird der Master-Host über das Plugin check-nagios. Da auf dem Slave-Host <strong>die</strong><br />
aktiven Service-Checks deaktiviert sind, muss in <strong>die</strong>sem Falle auf einen externen Scheduler<br />
wie cron zurückgegriffen <strong>werden</strong>. Dieser stößt in regelmäßigen Abständen ein<br />
Überwachungsscript an, welches mit Hilfe des check_nrpe und dem NRPE-Daemon den<br />
Zustand des Master-Hosts überprüft. Wird festgestellt, dass der Nagios Prozess nicht mehr<br />
läuft, oder der gesamte Host down ist, aktiviert das Script <strong>die</strong> Notifications und aktiven<br />
Service-Checks auf dem Slave-Host. Diese bleiben solange aktiv, bis der Master-Host wieder<br />
erreichbar ist und das check_nagios Plugin einen OK-Status liefert. Dann übernimmt <strong>die</strong>ser<br />
<strong>die</strong> Service-Checks und der Slave-Host wird mit den genannten Methoden in einen passiven<br />
Zustand versetzt.<br />
4.6.2 Konfiguration und Voraussetzungen<br />
Das ocsp-Kommando wird in der nagios.cfg konfiguriert. Folgende Optionen sind hierfür<br />
relevant:<br />
• obsess_over_services=1<br />
Diese Option aktiviert <strong>die</strong> Obsess Over Service Funktion und veranlasst den Nagios<br />
Prozess nach jedem Service-Check das ocsp_command auszuführen.<br />
• ocsp_command=ocsp_cmd<br />
Das hier angegebene Kommando wird nach jedem Service-Check ausgeführt, sofern<br />
obsess_over_service aktiviert wurde. Das Kommando muss vorher definiert worden sein.<br />
Wird der NSCA für <strong>die</strong> Übertragung zum Slave-Host verwendet, <strong>kann</strong> das ocsp_command mit<br />
folgenden Macros 1 aufgerufen <strong>werden</strong>:<br />
define command {<br />
command_name ocsp_cmd<br />
command_line submit_result_via_nsca $HOSTNAME$ $SERVICEDESC$ \<br />
$SERVICESTATE$ $OUTPUT$<br />
}<br />
Da das Macro $SERVICESTATE$ <strong>die</strong> ASCII-Variante des Service-States substituiert, muss in<br />
dem Script submit_result_via_nsca vor der Übermittlung per send_nsca eine Konvertierung<br />
stattfinden. Das folgende Beispiel verwendet <strong>die</strong> Quellen von Ethan Galstad aus den Dateien<br />
obsessive_svc_handler und submit_check_result_via_nsca, welche dem Nagios-Archiv<br />
<strong>bei</strong>liegen.<br />
1 Vgl: Galstad, Ethan (2003): Nagios Documentation 1.0: Using Macros in Commands
- 66 -<br />
# SUBMIT_RESULT_VIA_NSCA<br />
# Sven Schaffranneck (2004.06.11)<br />
# Original from Ethan Galstad, 07-19-2001<br />
#<br />
# Arguments:<br />
# $1 = host_name (Short name of host that the service is associated with)<br />
# $2 = svc_description (Description of the service)<br />
# $3 = return_code (An integer that determines the state of the service<br />
# check, 0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN).<br />
# $4 = plugin_output (A text string that should be used as the plugin output<br />
# for the service check)<br />
case "$3" in<br />
OK)<br />
return_code=0<br />
;;<br />
WARNING)<br />
return_code=1<br />
;;<br />
esac<br />
CRITICAL)<br />
return_code=2<br />
;;<br />
UNKNOWN)<br />
return_code=3<br />
;;<br />
echocmd="/bin/echo -e"<br />
NscaBin="/usr/local/nagios/libexec/send_nsca"<br />
NscaCfg="/usr/local/nagios/etc/send_nsca.cfg"<br />
NagiosHost="nagioshost"<br />
# create the command line to add to the command file<br />
cmdline="$1;$2;$3;$4"<br />
$echocmd "$1\t$2\t$3\t$4\n" | $NscaBin $NagiosHost -c $NscaCfg<br />
# EOF
- 67 -<br />
Die Verwendung des NRPE geschieht analog zu der Beschreibung aus Kapitel 4.4.1. Der<br />
wesentliche Unterschied liegt im Aufruf des check_nrpe, der in <strong>die</strong>sem Fall indirekt durch<br />
cron getriggert wird. Das folgende Script <strong>kann</strong> in einem kurzen Intervall vom Slave-Server<br />
aufgerufen <strong>werden</strong>:<br />
#!/bin/sh<br />
# Only take action on hard service states...<br />
case "$2" in<br />
HARD)<br />
case "$1" in<br />
CRITICAL)<br />
# The master Nagios process is not running!<br />
# We should now become the master host and<br />
# take over the responsibility of monitoring<br />
# the network, so enable notifications...<br />
/usr/local/nagios/eventhandlers/enable_notifications<br />
/usr/local/nagios/eventhandlers/enable_active_service_checks<br />
;;<br />
WARNING)<br />
UNKNOWN)<br />
# The master Nagios process may or may not<br />
# be running.. We won't do anything here, but<br />
# to be on the safe side you may decide you<br />
# want the slave host to become the master in<br />
# these situations...<br />
;;<br />
OK)<br />
# The master Nagios process running again!<br />
# We should go back to <strong>bei</strong>ng the slave host,<br />
# so disable notifications...<br />
/usr/local/nagios/eventhandlers/disable_notifications<br />
/usr/local/nagios/eventhandlers/disable_active_service_checks<br />
;;<br />
esac<br />
;;<br />
esac<br />
exit 0<br />
Die hier<strong>bei</strong> verwendeten Scripte enable_notifications, disable_notifications,<br />
enable_active_service_checks und disable_active_service_checks liegen dem Nagios-<br />
Paket <strong>bei</strong> und können nach Anpassung der Pfade verwendet <strong>werden</strong>. Gemäß ihrer<br />
Beschreibung aktivieren oder deaktivieren sie über das External Command File <strong>die</strong><br />
Notifications und Service-Checks. Folgende Kommando-Zeilen <strong>werden</strong> verwendet:<br />
• [`date +%s`] ENABLE_NOTIFICATIONS;`date +%s`<br />
• [`date +%s`] DISABLE_NOTIFICATIONS;`date +%s`<br />
• [`date +%s`] START_EXECUTING_SERVICE_CHECKS<br />
• [`date +%s`] STOP_EXECUTING_SERVICE_CHECKS
5. Funktionale Details<br />
- 68 -<br />
Zur „intelligenten“ Überwachung von Servern gehört nicht nur <strong>die</strong> starre Überprüfung<br />
einzelner Services und das Benachrichtigen <strong>bei</strong> Problemen. In komplexen Umgebungen gibt<br />
es eine Vielzahl von dynamischen Komponenten, <strong>die</strong> nur mit Hilfe von flexiblen<br />
Überwachungsmechanismen sinnvoll gehandhabt <strong>werden</strong> können. Nagios bringt Features mit,<br />
welche <strong>die</strong> Überwachung von einer großen Anzahl an Servern erst möglich machen.<br />
5.1 Service- und Host-Abhängigkeiten<br />
Service- sowie Host-Abhängigkeiten (Service and Host Dependency) sind für komplexe<br />
Monitoring-Umgebungen vorgesehen. Sie ermöglichen eine statusbasierende Korrelation<br />
zwischen Services und Hosts.<br />
5.1.1 Architektur<br />
Die folgende Grafik zeigt <strong>bei</strong>spielhaft das logische Layout von Service-Abhängigkeiten und<br />
stammt aus der Nagios Online-Dokumentation. Es sind folgende Punkte zu beachten 1 :<br />
• Ein Service <strong>kann</strong> von einem oder mehreren anderen Services abhängig sein.<br />
• Ein Service <strong>kann</strong> von Services abhängig sein, <strong>die</strong> nicht mit dem gleichen Host verknüpft<br />
sind.<br />
• Service-Abhängigkeiten sind nicht vererbbar .<br />
• Service-Abhängigkeiten können genutzt <strong>werden</strong>, um <strong>die</strong> Ausführung von Service-Checks,<br />
Event Handlern und Benachrichtigungen unter bestimmten Umständen (<strong>bei</strong> OK-,<br />
WARNING-, UNKNOWN- und/oder CRITICAL-Status) zu unterdrücken.<br />
1 Vgl: Galstad, Ethan (2003): Nagios Documentation 1.0: Host and Service Dependencies
- 69 -<br />
Abbildung 16 Beispiel von Service-Abhängigkeiten<br />
Quelle: Galstad, Ethan: Nagios Documentation 1.0: Host and Service Dependencies<br />
Bevor Nagios einen Service-Check oder eine Benachrichtigung durchführt, überprüft das<br />
Programm, ob für <strong>die</strong>sen Service Abhängigkeiten bestehen. Ist <strong>die</strong>s der Fall, wird Nagios<br />
folgende Schritte durchführen (vgl: Galstad, Ethan (2003): Nagios Documentation 1.0):<br />
• Nagios erhält den aktuellen Status 1 des Services, von dem der definierte Service abhängt.<br />
• Nagios vergleicht den aktuellen Status des Services von dem er abhängig ist, mit den in der<br />
Abhängigkeits-Definition angegebenen Status-Optionen (ob der aktuelle Status relevant ist,<br />
oder nicht).<br />
1 Nagios benutzt den aktuellsten „harten“ Status des Service auf den sich der Service bezieht. Falls Nagios den<br />
aktuellsten Status des Services (egal ob harter oder weicher Status) benutzen soll, muss man <strong>die</strong><br />
soft_service_dependencies-Option aktivieren.
- 70 -<br />
• Falls der aktuelle Status des Services von dem er abhängt mit einem der in der<br />
Abhängigkeits-Definition angegebenen Status-Optionen übereinstimmt, ist <strong>die</strong><br />
Abhängigkeit fehlgeschlagen und Nagios beendet <strong>die</strong> Schleife zur Abhängigkeits-<br />
Überprüfung.<br />
• Falls der aktuelle Status des Dienstes, von dem er abhängt, nicht mit einem der in der<br />
Abhängigkeits-Definition angegebenen Status-Optionen übereinstimmt, hat <strong>die</strong><br />
Abhängigkeit bestanden und Nagios wird den nächsten Abhängigkeits-Eintrag überprüfen.<br />
Dieser Zyklus wiederholt sich, bis entweder alle Abhängigkeiten für <strong>die</strong>sen Dienst überprüft<br />
wurden, oder bis eine der Abhängigkeits-Überprüfungen fehlschlägt. In <strong>die</strong>sem Fall wird <strong>die</strong><br />
Ausführung des Service-Checks oder Event-Handlers/Benachrichtigung unterdrückt.<br />
Die Abhängigkeit für den Service F aus der Abbildung 16 liest sich wie folgt.<br />
• Abhängigkeit für <strong>die</strong> Ausführung des Service F:<br />
Nagios wird den Check für Service F nicht durchführen, wenn<br />
• Service C im State WARNING ist, und/oder<br />
• Service D im State OK ist.<br />
• Abhängigkeit für <strong>die</strong> Benachrichtigungen des Service F:<br />
Nagios wird <strong>die</strong> Benachrichtigungen für Service F nicht durchführen, wenn<br />
• Service C im Status CRITICAL ist, und/oder<br />
• Service D im Status WARNING oder UNKNOWN ist, und/oder<br />
• Service E im Status WARNING, UNKNOWN oder CRITICAL ist.<br />
Die Abhängigkeiten zwischen Hosts entsprechen den Regeln der Service-Abhängigkeiten, mit<br />
dem Unterschied, dass sie für Hosts und nicht für Services gelten und nur<br />
Benachrichtigungen, nicht jedoch <strong>die</strong> Host-Checks, unterdrücken.
- 71 -<br />
5.1.2 Konfiguration<br />
Das unter 5.1.1 genannte Beispiel für Service F wird mit folgenden Einstellungen<br />
konfiguriert:<br />
define servicedependency{<br />
host_name<br />
service_description<br />
dependent_host_name<br />
dependent_service_description<br />
execution_failure_criteria<br />
notification_failure_criteria<br />
}<br />
define servicedependency{<br />
host_name<br />
service_description<br />
dependent_host_name<br />
dependent_service_description<br />
execution_failure_criteria<br />
notification_failure_criteria<br />
}<br />
define servicedependency{<br />
host_name<br />
service_description<br />
dependent_host_name<br />
dependent_service_description<br />
execution_failure_criteria<br />
notification_failure_criteria<br />
}<br />
Host B<br />
Service D<br />
Host C<br />
Service F<br />
o<br />
w,u<br />
Host B<br />
Service E<br />
Host C<br />
Service F<br />
n<br />
w,u,c<br />
Host B<br />
Service C<br />
Host C<br />
Service F<br />
w<br />
c
- 72 -<br />
Die Konfiguration für Host-Abhängigkeiten geschieht analog zu den Service-Abhängigkeiten.<br />
Für den Host C im folgenden Layout ergeben sich somit <strong>die</strong>se Definitionen:<br />
define hostdependency{<br />
host_name<br />
dependent_host_name<br />
notification_failure_criteria<br />
}<br />
define hostdependency{<br />
host_name<br />
dependent_host_name<br />
notification_failure_criteria<br />
}<br />
Host A<br />
Host C<br />
d<br />
Host B<br />
Host C<br />
d,u<br />
Abbildung 17 Beispiel von Host-Abhängigkeiten<br />
Quelle: Galstad, Ethan: Nagios Documentation 1.0: Host and Service Dependencies
- 73 -<br />
5.2 Soft und Hard States<br />
Nagios unterscheidet nicht nur zwischen den vier auf Seite 36 genannten Service-States,<br />
sondern kennt zudem „weiche“ und „harte“ Status. Diese sind elementarer Bestandteil der<br />
Nagios Überwachungslogik.<br />
In order to prevent false alarms, Nagios allows you to define how many times a service or<br />
host check will be retried before the service or host is considered to have a real problem. 1<br />
Geregelt wird <strong>die</strong> maximale Anzahl der Wiederholungen über <strong>die</strong> max_check_attempts<br />
Direktive in der Host- bzw. Service-Check Definition.<br />
5.2.1 Soft States<br />
Laut der Nagios Dokumentation tritt ein Soft State immer dann auf, wenn:<br />
• <strong>die</strong> Überprüfung eines Dienstes oder Hosts in einem nicht-OK-Status endet und <strong>die</strong><br />
Überprüfung noch nicht so oft wie in der max_check_attempts-Option angegeben,<br />
wiederholt wurde.<br />
Wenn ein Dienst oder Host aus einem Soft State wiederhergestellt wurde, wird <strong>die</strong>s<br />
soft recovery genannt. Beim Auftreten eines Soft State oder soft recovery <strong>werden</strong> folgende<br />
Aktionen durchgeführt:<br />
• Der Fehler oder <strong>die</strong> Wiederherstellung wird in <strong>die</strong> Logdatei geschrieben, sofern <strong>die</strong><br />
log_service_retries oder log_host_retries Optionen in der Nagios Konfiguration<br />
aktiviert wurden.<br />
• Event Handler <strong>werden</strong> ausgeführt, sofern welche definiert wurden, um <strong>die</strong> Fehler oder<br />
Wiederherstellungen für einen Service oder Host zu bear<strong>bei</strong>ten. Zuvor wird das<br />
$STATETYPE$-Macro auf "SOFT" gesetzt.<br />
• Nagios sendet keine Benachrichtigungen an <strong>die</strong> Kontaktpersonen, da noch kein ernsthaftes<br />
Problem für den Service oder Host er<strong>kann</strong>t wurde.<br />
Zusammenfassend ist zu erkennen, dass primär der Eventhandler aufgerufen wird, um z.B.<br />
pro-aktive Korrekturmaßnahmen durchzuführen.<br />
1 Galstad, Ethan (2003): Nagios Documentation 1.0: State Types
- 74 -<br />
5.2.2 Hard State<br />
Ein Hard State für ein Service bzw. Host tritt laut der Nagios Dokumentation in folgenden<br />
Situationen auf:<br />
• Wenn das Ergebnis eines Service oder Host-Checks einen nicht-OK-Status zurückgibt und<br />
der Service/Host-Check bereits so oft wiederholt wurde, wie durch <strong>die</strong> max_check_attempts<br />
Option in der Service/Host Definition angegeben.<br />
• Wenn das Ergebnis eines Service-Checks einen nicht-OK-Status zurückgibt und der zu<br />
dem Service korrespon<strong>die</strong>rende Host entweder DOWN oder UNREACHABLE ist.<br />
Wird ein Service oder ein Host aus einem Hard State wiederhergestellt, so handelt es sich um<br />
ein hard recovery. Als Hard State Change wird ein Status-Wechsel in folgenden Situationen<br />
bezeichnet:<br />
• Der Status wechselt von einem harten OK-Status in einen harten nicht-OK-Status.<br />
• Der Status wechselt von einem harten nicht-OK-Status in einen harten OK-Status.<br />
• Der Status wechselt von einem harten nicht-OK-Status in einen anderen harten nicht-OK-<br />
Status.<br />
Bei einem Hard State Change wird ein Log-Eintrag erzeugt, der Event-Handler ausgeführt und<br />
<strong>die</strong> Kontaktpersonen über den Fehler oder <strong>die</strong> Wiederherstellung informiert, sofern es <strong>die</strong><br />
Konfiguration zulässt.
- 75 -<br />
5.3 State Flapping<br />
Nagios erkennt optional Status-Schwankungen (flapping), <strong>die</strong> unter Umständen auf eine<br />
Fehlkonfiguration oder Netzwerkprobleme hindeuten können.<br />
Flapping occurs when a service or host changes state too frequently, resulting in a storm of<br />
problem and recovery notifications. 1<br />
Das State Flapping tritt also immer dann auf, wenn sich der Status eines Services oder Hosts<br />
zu oft ändert und somit eine Flut an Problem- und Recovery-Benachrichtigungen auslöst.<br />
5.3.1 Implementierung<br />
Nagios speichert für jeden Service/Host das Ergebnis der letzten 21 Checks in einem Array.<br />
Bei jedem neuen Check wird der Inhalt des Arrays analysiert und festgestellt, ob der Service<br />
oder Host flappt. Dazu wird <strong>die</strong> prozentuale Anzahl von State-Changes ermittelt. Da genau 21<br />
States im Array stehen, können bis zu 20 State Changes auftreten.<br />
Abbildung 18 zeigt <strong>bei</strong>spielhaft den Inhalt des Arrays für einen Service. OK States sind grün<br />
markiert, WARNING States in gelb dargestellt, CRITICAL States in rot und UNKNOWN States<br />
in orange. Blaue Pfeile zeigen <strong>die</strong> aufgetretenden State Changes an.<br />
Abbildung 18 Service State Transitions<br />
Quelle: Galstad, Ethan: Nagios Documentation 1.0: Detection and Handling of State Flapping<br />
1 Galstad, Ethan (2003): Nagios Documentation 1.0: Detection and Handling of State Flapping
- 76 -<br />
Die Anzahl der Statusänderungen zu summieren und in Prozenten auszudrücken ist jedoch<br />
nicht aussagekräftig genug. Daher gewichtet Nagios <strong>die</strong> auftretenden State Changes<br />
unterschiedlich. Der neueste Statuswechsel wird bis zu 50% schwerer gewichtet als der<br />
älteste. Abbildung 19 zeigt <strong>die</strong> Verteilung der Gewichtung über <strong>die</strong> Zeitpunkte t1 bis t20, wo<strong>bei</strong><br />
t1 den ältesten und t20 den neuesten Status darstellt.<br />
Abbildung 19 Weighted State Transitions<br />
Quelle: Galstad, Ethan: Nagios Documentation 1.0: Detection and Handling of State Flapping<br />
Zu den Zeitpunkten t3, t4, t5, t9, t12, t16 und t19 sind Statuswechsel aufgetreten. Ohne <strong>die</strong><br />
zusätzliche Gewichtung ergibt sich ein State Flapping von 35%. Bei einer gewichteten<br />
Bewertung wird ein State Flapping von 31% erreicht. Dieser geringere Wert macht Sinn, da<br />
<strong>die</strong> gehäuften Statusänderungen am Anfang der Zeitperiode auftraten und für <strong>die</strong> Aussage<br />
über das aktuelle Flapping-Verhalten weniger relevant sind.
- 77 -<br />
5.3.2 Konfiguration<br />
Es gibt drei relevante Optionen, welche <strong>die</strong> Flapping-Logik von Nagios beeinflussen:<br />
• low_flap_threshold<br />
Unterer Threshold, ab wann ein Service/Host nicht mehr als Flapping er<strong>kann</strong>t wird.<br />
• high_flap_threshold<br />
Oberer Threshold, ab wann ein Service/Host als Flapping er<strong>kann</strong>t wird.<br />
• enable_flap_detection<br />
Aktiviert oder deaktiviert <strong>die</strong> Flap Detection.<br />
Jede der drei Optionen können zum einen in der nagios.cfg systemweit gesetzt <strong>werden</strong>, zum<br />
anderen in den Objektdefinitionen für Services und Hosts individuell festgelegt <strong>werden</strong>, was<br />
das Überschreiben der systemweiten Defaults ermöglicht.<br />
5.3.3 Auswirkungen<br />
Wenn ein Service oder Host als Flapping er<strong>kann</strong>t wird, unternimmt Nagios folgendes:<br />
• Eintrag in <strong>die</strong> Log-Datei über das Flapping schreiben.<br />
• Einen Hinweis als Kommentar zum aktuellen Service- oder Host-Eintrag erstellen.<br />
• Unterdrücken der Benachrichtigungen für <strong>die</strong>sen Service oder Host.<br />
Erkennt Nagios, dass ein Service oder Host den Flapping Status verlässt, <strong>werden</strong> <strong>die</strong><br />
entgegengesetzten Aktionen unternommen:<br />
• Eintrag in <strong>die</strong> Log-Datei über das stoppen des Flapping schreiben.<br />
• Der Kommentar zum Service oder Host über das Flapping wird entfernt.<br />
• Benachrichtigungen für den Service oder Host <strong>werden</strong> wieder freigegeben.
- 78 -<br />
5.4 Freshness-Check<br />
Nagios bietet ein Feature, welches veraltete Ergebnisse erkennt und <strong>bei</strong> Bedarf aktive Checks<br />
anstößt. Veraltete Ergebnisse können <strong>bei</strong>spielsweise <strong>bei</strong> passiv deklarierten Service-Checks<br />
auftreten, wenn das externe Tool zum Übertragen des Ergebnisses nicht erwartungskonform<br />
funktioniert oder ausgefallen ist. Mit dem Freshness-Check wird sichergestellt, dass Nagios<br />
regelmäßig <strong>die</strong> Ergebnisse von passiven Service-Checks übermittelt bekommt, bzw. ein<br />
Hinweis erzeugt wird, dass ein Ergebnis veraltet ist.<br />
Folgende globale Optionen müssen in der nagios.cfg konfiguriert <strong>werden</strong>, um Freshness-<br />
Checks zu verwenden:<br />
• check_service_freshness<br />
Bei einem Wert von 1 <strong>kann</strong> <strong>die</strong> Freshness-Überprüfung verwendet <strong>werden</strong>. Bei<br />
einer 0 <strong>werden</strong> <strong>die</strong> Freshness-Checks systemweit deaktiviert.<br />
• freshness_check_interval<br />
Diese Option gibt an, wie oft Nagios <strong>die</strong> Aktualität von Service-Überprüfungen<br />
kontrollieren soll. Falls <strong>die</strong> Freshness Checks global deaktiviert sind (siehe<br />
check_service_freshness), hat <strong>die</strong>se Option keine Bedeutung.<br />
Zu <strong>die</strong>sen globalen Konfigurationsoptionen gibt es noch einige objektbasierten Optionen.<br />
Hierzu <strong>werden</strong> zu den Service-Definitionen folgende Direktiven hinzugefügt:<br />
• check_freshness<br />
Muss den Wert 1 haben, um für den aktuellen Service <strong>die</strong> Freshness-Checks zu aktivieren.<br />
• freshness_threshold<br />
Das Anzahl der Sekunden (abhängig von der globalen Option interval_length aus der<br />
nagios.cfg), <strong>die</strong> das Ergebnis des Service alt sein darf.<br />
• check_command<br />
Ein gültiger Befehl, welcher ausgeführt <strong>werden</strong> soll, wenn das mit der Option<br />
freshness_threshold angegebene Alter überschritten wird.<br />
Hinweis: Selbst wenn für den gewählten Service <strong>die</strong> aktiven Checks deaktiviert sind, wird<br />
Nagios den Befehl hinter check_command <strong>bei</strong> Bedarf ausführen, sollte der Freshness-Check für<br />
ihn aktiviert sein.
- 79 -<br />
5.5 Scheduling mit Interleaving<br />
Ein wesentlicher Vorteil der zentralen Architektur, wie sie Nagios implementiert, ist <strong>die</strong><br />
übergreifende Steuerung des Schedulings. Da<strong>bei</strong> verteilt Nagios <strong>die</strong> konfigurierten Service-<br />
Checks anhand zweier Werte, <strong>die</strong> in der nagios.cfg festgelegt <strong>werden</strong>.<br />
5.5.1 Konfiguration<br />
Folgende Optionen sind für <strong>die</strong> Konfiguration des Interleaving relevant:<br />
• inter_check_delay_method=<br />
Die inter_check_delay Direktive <strong>die</strong>nt dem Load-Balancing auf dem zentralen Nagios<br />
Server. Sie steuert, in welchen Abständen <strong>die</strong> Service-Checks in der Queue verteilt <strong>werden</strong>.<br />
Wird <strong>die</strong> „smart delay calculation“ durch den Wert „s“ verwendet, errechnet Nagios einen<br />
durschnittlichen Check-Intervall und <strong>kann</strong> anhand dessen selbstständig einen Delay<br />
wählen. Gültige Werte sind:<br />
n: Es wird keine Verzögerung verwendet.<br />
d: Verwendung eines festen Delays von einer Sekunde.<br />
s: „Intelligente“ Berechnung eines sinnvollen Wertes durch Nagios.<br />
x.xx: Benutzung eines individuellen inter-check Delays von x.xx Sekunden.<br />
Die Berechnung für <strong>die</strong> „smart delay calculation“ erfolgt nach <strong>die</strong>ser Gleichung:<br />
inter_check_delay = (check interval for all services) / (# of all services) 2<br />
Die automatische Berechnung des Verzögerungs-Intervalls <strong>kann</strong> in manchen Fällen jedoch<br />
problematisch sein. Bei der Verwendung von extrem unterschiedlichen Check-Zyklen <strong>kann</strong> es<br />
durchaus auftreten, dass <strong>die</strong> berechnete Verzögerung zu lang ausfällt. Folgende Situation<br />
erörtert das Problem:<br />
Definition:<br />
5 Services mit je 3 Minuten Check-Cycle<br />
5 Services mit je 60 Minuten Check-Cycle<br />
[(5*180) + (5*3600)] / 10² = inter_check_delay<br />
18900 / 100 = 189<br />
Ein inter_check_delay von 189 entspricht 3,15 Minuten. In <strong>die</strong>sem Falle wird also zwischen<br />
jedem Service-Check genau 189 Sekunden gewartet. Das wiederspricht jedoch der<br />
Anforderung, einige der Services alle 3 Minuten zu überprüfen.<br />
Diese Situation tritt jedoch nur in vereinzelten Extremfällen auf, wenn sehr wenige Service-<br />
Checks definiert wurden und <strong>die</strong>se zudem eine hohe Cycle-Time Differenz aufweisen.
- 80 -<br />
• service_interleave_factor=<br />
Mit Hilfe des Interleaving-Faktors <strong>werden</strong> <strong>die</strong> Service-Checks über sämtliche Hosts<br />
„gefächert“ (verteilt), um eine Lastverteilung auf den remote Hosts und schnellere<br />
Erkennung von Host-Problemen zu erreichen.<br />
Dadurch, das Nagios parallele Ausführung von Service-Checks beherrscht, <strong>kann</strong> es ohne<br />
Interleaving passieren, dass ein Host viele Service-Checks gleichzeitig beantworten muss<br />
und dadurch unter hoher Last steht. Das Kapitel 5.5.2 erläutert <strong>die</strong> Technik des<br />
Interleavings im Detail.<br />
Gültige Werte sind:<br />
x: Eine Zahl größer oder gleich 1 gibt <strong>die</strong> Anzahl der auszulassenden<br />
Service-Checks an. Der Faktor 1 bedeutet, das kein Service ausgelassen wird.<br />
s: Benutzung eines „intelligenten“, durch Nagios berechneten Interleaving-Faktor.<br />
Die „intelligente“ Berechnung für den Interleaving-Faktor geschieht nach folgender<br />
Gleichung 1 :<br />
interleave factor = ceil ( # of services / # of hosts )<br />
1 Die Funktion ceil rundet den Wert in der Klammer auf, <strong>die</strong> Raute steht für „Gesamtsumme“.
- 81 -<br />
5.5.2 Funktionsweise des Interleaving<br />
Ohne Interleaving <strong>werden</strong> sämtliche Service-Checks der Reihe nach in <strong>die</strong> Queue einsortiert.<br />
Dieses Verhalten lässt sich über das Webfrontend beobachten und ist in den nachfolgenden<br />
Abbildungen dargestellt.<br />
Abbildung 20 Scheduling ohne Interleaving 1<br />
Quelle: Galstad, Ethan: Nagios Documentation 1.0: Service Check Scheduling<br />
Abbildung 20 zeigt <strong>die</strong> Service Details aus dem Webfrontend nach dem Start von Nagios<br />
ohne Interleaving (service_interleave_factor=1). Sämtliche Service-Checks sind<br />
hintereinander in <strong>die</strong> Queue eingereiht. Abbildung 21 zeigt <strong>die</strong> Auswirkung.<br />
Abbildung 21 Scheduling ohne Interleaving 2<br />
Quelle: Galstad, Ethan: Nagios Documentation 1.0: Service Check Scheduling<br />
Deutlich zu erkennen ist <strong>die</strong> sequenzielle Bear<strong>bei</strong>tung der Checks. Jeder Host wird innerhalb<br />
kürzester Zeit mit sämtlichen Service-Checks beauftragt, was eine erhebliche Lastspitze auf<br />
den remote Hosts erzeugen <strong>kann</strong>.
- 82 -<br />
Im Vergleich dazu <strong>die</strong> Verwendung von Interleaving. Die folgenden drei Grafiken zeigen den<br />
gefächerten Verlauf der Service-Checks. Zu Demonstrationszwecken wurde der<br />
service_interleave_factor manuell auf den Wert 4 gesetzt.<br />
Abbildung 22 Scheduling mit Interleaving, Anfang<br />
Quelle: Galstad, Ethan: Nagios Documentation 1.0: Service Check Scheduling<br />
Nach dem Start von Nagios <strong>werden</strong> <strong>die</strong> Service-Checks so in <strong>die</strong> Queue einsortiert, dass<br />
immer genau 4 Service-Checks ausgelassen <strong>werden</strong>. In Abbildung 22 sind <strong>die</strong> mit einem roten<br />
Strich markierten Service-Checks der Reihe nach einsortiert. Erwartungsgemäß <strong>werden</strong> <strong>die</strong>se<br />
als erstes überprüft und es ergibt sich <strong>die</strong> Abbildung 23.<br />
Abbildung 23 Scheduling mit Interleaving, erste Durchgang<br />
Quelle: Galstad, Ethan: Nagios Documentation 1.0: Service Check Scheduling
- 83 -<br />
Die Abbildung 24 zeigt das Ergebnis nach drei Durchläufen. Jedes Mal <strong>werden</strong> 4 Checks<br />
ausgelassen. Dadurch ergibt sich eine bessere Verteilung über <strong>die</strong> einzelnen remote Hosts.<br />
Abbildung 24 Scheduling mit Interleaving, dritter Durchgang<br />
Quelle: Galstad, Ethan: Nagios Documentation 1.0: Service Check Scheduling<br />
Anzumerken ist hier<strong>bei</strong>, das <strong>die</strong> Verteilung umso besser ist, je ähnlicher <strong>die</strong> Anzahl der<br />
Service-Checks pro Hosts sind. Existieren einige Hosts mit vielen Checks und einige mit<br />
wenigen oder nur einem Check, <strong>kann</strong> es unter Umständen wieder dazu kommen, das einige<br />
Services auf dem selben Host gleichzeitig überprüft <strong>werden</strong>.
6. Plugins<br />
- 84 -<br />
Die Nagios Distribution enthält primär <strong>die</strong> Nagios Quellen, jedoch keine Plugins. Diese<br />
<strong>werden</strong> unter der Plugin Project Page http://nagiosplug.sourceforge.net/ von einem<br />
eigenständigen Entwicklerteam gepflegt. Die 6 eingetragenen Kernentwickler sind:<br />
• Ethan Galstad<br />
• Karl DeBisschop<br />
• Subhendu Ghosh<br />
• Stanley Hopcroft<br />
• Ton Voon<br />
• Jeremy T. Bouse<br />
Neben <strong>die</strong>sen Kernentwicklern gibt es eine Reihe weiterer, aktiver Programmierer, <strong>die</strong><br />
Verbesserungen oder neue Plugins <strong>bei</strong>tragen. Eine vollständige Liste findet sich in dem<br />
Quellpaket der Nagios-Plugins in der Datei AUTHORS. Auch der Verfasser <strong>die</strong>ser Ar<strong>bei</strong>t ist<br />
darin wiederzufinden. Derzeit sind 116 Autoren eingetragen.<br />
Weiterhin gibt es drei Mailinglisten <strong>die</strong> sich mit dem Thema der Plugins beschäftigen:<br />
• nagiosplug-help@lists.sourceforge.net<br />
Allgemeine Anfragen und Hilfe zu den Plugins.<br />
• nagiosplug-devel@lists.sourceforge.net<br />
Hier tauschen Entwickler untereinander Informationen zu neuen und vorhandenen Plugins<br />
aus.<br />
• nagiosplug-checkins@lists.sourceforge.net<br />
In <strong>die</strong>se Mailingliste <strong>werden</strong> neue CVS 1 -Checkins be<strong>kann</strong>t gegeben. Nur <strong>die</strong> Kern-<br />
Entwickler haben Schreibrechte.<br />
Aktuell ist <strong>die</strong> Version 1.4.0alpha1. Die letzte stabile Version ist <strong>die</strong> 1.3.1.<br />
1 CVS steht für Concurrent Versions System. Es bezeichnet ein Software-Programm zur Versionsverwaltung<br />
von Quellcode.
- 85 -<br />
6.1 Standard Plugins<br />
Folgende Standard-Plugins liegen dem Nagios Plugin Projekt <strong>bei</strong>:<br />
• check_breeze<br />
Dieses Plugin überwacht <strong>die</strong> Signalstärke von Breezecom Funk-Hardware.<br />
Weiterführende Informationen: check_breeze --help<br />
• check_by_ssh<br />
Ruft über eine SSH-Verbindung beliebige Plugins auf entfernten Hosts auf.<br />
Weiterführende Informationen: Kapitel 4.4.3 und check_by_ssh --help<br />
• check_dig<br />
Testet den DNS-Service des angegebenen Hosts mit Hilfe von dig 1 .<br />
Weiterführende Informationen: check_dig --help<br />
• check_disk<br />
Kontrolliert den verbrauchten Speicherplatz eines eingebundenen Filesystems.<br />
Weiterführende Informationen: check_disk --help<br />
• check_disk_smb<br />
Kontrolliert den verbrauchten Speicherplatz von entfernen SMB 2 Netzlaufwerken.<br />
Weiterführende Informationen: check_disk_smb --help<br />
• check_dns<br />
Überwacht <strong>die</strong> korrekte Auflösung einer Domain zu seiner IP mit Hilfe von nslookup 3 .<br />
Weiterführende Informationen: check_dns --help<br />
• check_dummy<br />
Ein Dummy-Plugin, welches nur den übergeben Status zurückgibt.<br />
Weiterführende Informationen: check_dummy --help<br />
• check_file_age<br />
Kontrolliert ob <strong>die</strong> übergebene Datei nicht älter als n Sekunden und mindestes m Bytes<br />
lang ist.<br />
Weiterführende Informationen: check_file_age --help<br />
1 dig (domain information groper) ist ein flexibles Tool um DNS-Anfragen zu erstellen und auszuwerten.<br />
2 SMB (Server Message Block) <strong>werden</strong> von Windows für Datei- und Drucker-Freigaben verwendet. Unter<br />
Unix bietet das Programm Samba <strong>die</strong>se Funktionalität an.<br />
3 Mit Hilfe des Tools nslookup können Hostnamen aufgelöst <strong>werden</strong>. Durch Verwendung von<br />
unterschiedlichen Optionen (z.B. set type=CNAME) lassen sich weitere DNS-Spezifische Daten abfragen.
- 86 -<br />
• check_flexlm<br />
Überwacht <strong>die</strong> Erreichbarkeit des FLEXlm 1 .<br />
Weiterführende Informationen: check_flexlm --help<br />
• check_fping<br />
Ein schnelles Host-Check Plugin, welches auf fping von SAINT 2 basiert.<br />
Weiterführende Informationen: check_fping --help<br />
• check_game<br />
Unter Verwendung des Programms QStat 3 überwacht <strong>die</strong>ses Plugin Verbindungen zu<br />
aktiven Spieleservern auf angegebenen Hosts.<br />
Weiterführende Informationen: check_game --help<br />
• check_hpjd<br />
Dieses Plugin testet den Status eines HP Druckers mit einer JetDirect Karte. Zur Abfrage<br />
muss net-snmp 4 installiert sein.<br />
Weiterführende Informationen: check_hpjd --help<br />
• check_http<br />
Dieses Plugin testet den HTTP- oder HTTPS-Service eines Hosts. Es <strong>kann</strong> redirects<br />
folgen, Verbindungszeiten testen, das Auslaufen von Zertifikaten feststellen und nach<br />
Strings oder regulären Ausdrücken suchen.<br />
Weiterführende Informationen: check_http --help<br />
• check_ifoperstatus<br />
Kontrolliert den Status von speziellen Netzwerkintefaces des Zielhosts mit Hilfe von<br />
SNMP.<br />
Weiterführende Informationen: check_ifoperstatus --help<br />
• check_ifstatus<br />
Kontrolliert den Status von jedem Netzwerkintefaces des Zielhosts mit Hilfe von SNMP.<br />
Weiterführende Informationen: check_ifstatus--help<br />
1 FLEXlm ist ein kommerzieller Lizenz-Manager, siehe<br />
http://www.macrovision.com/products/legacy_products/flexlm/index.shtml<br />
2 SAINT ist ein Kommerzieller Security-Scanner, siehe http://www.saintcorporation.com/<br />
3 QStat ist ein Kommdozeilen-Tool welches Echtzeitinformationen von einer vielzahl von Spieleservern<br />
abfragen <strong>kann</strong>. Primär unterstützt sind hier<strong>bei</strong> geläufige Quake Half-Life und ähnliche First-Person-Shooter.<br />
4 Dieses Paket umfasst verschiedene Tools für das Simple Network Management Protocol
- 87 -<br />
• check_ircd<br />
Überwacht den IRC 1 -Daemon anhand der eingewählten Benutzer eines angegebenen Hosts.<br />
Weiterführende Informationen: check_ircd --help<br />
• check_load<br />
Dieses Plugin überwacht <strong>die</strong> lokale, durchschnittliche Load.<br />
Weiterführende Informationen: check_load --help<br />
• check_log<br />
Durchsucht eine Log-Datei nach einem bestimmten String.<br />
Weiterführende Informationen: check_log --help<br />
Hinweis: Das Plugin check_log2 (aus dem contrib-Verzeichnis) erlaubt auch reguläre<br />
Ausdrücke als Suchbegriff. Beide Plugins betrachten jedoch <strong>die</strong> Log-Dateien nur<br />
zeilenweise und greifen nicht auf rotierte Log-Dateien zurück. Mit Hilfe des Plugins<br />
check_logsurfer 2 können rotated-Logfiles mehrzeilig (also Kontext-Abhängig) mit<br />
regulären Ausdrücken überprüft <strong>werden</strong>.<br />
• check_mailq<br />
Überprüft <strong>die</strong> Anzahl der in der Mail-Queue wartenden eMails. Bei Verwendung von<br />
Postfix 3 als MTA 4 zeigt <strong>die</strong>ses Plugin jedoch eine schwache Performance und wird vom<br />
Autor <strong>die</strong>ser Ar<strong>bei</strong>t nicht empfohlen.<br />
Weiterführende Informationen: check_mailq --help<br />
• check_mrtg<br />
Dieses Plugin überprüft entweder den durchschnittlichen oder maximalen Wert einer der<br />
<strong>bei</strong>den Variablen, <strong>die</strong> in der MRTG 5 Log-Datei stehen.<br />
Weiterführende Informationen: check_mrtg --help<br />
• check_mrtgtraf<br />
Dieses Plugin überprüft den eingehenden/ausgehenden Traffic eines Routers, Switches,<br />
etc., dessen Daten in einer MRTG Log-Datei gespeichert sind.<br />
Weiterführende Informationen: check_mrtgtraf --help<br />
1 Das IRC (Internet Relay Chat) <strong>die</strong>nt der Online-Kommunikation als Plattform<br />
2 Die Nagios Plugins and Extensions: http://naplax.sourceforge.net/check_logsurfer.html<br />
3 Postfix ist ein MTA, welcher den be<strong>kann</strong>ten Sendmail MTA ersetzt. Postfix ist schneller, sicherer und<br />
bedeutend leichter zu konfigurieren, bewahrt aber <strong>die</strong> Kompatiblität zu Sendmail.<br />
4 Ein MTA (Mail Transfer Agent) ist ein Programm, welches den Transport und <strong>die</strong> Verteilung von eMails<br />
erledigt.<br />
5 Der Multi Router-Traffic-Grapher (MRTG) stellt den Traffic von Routern graphisch dar. Da MRTG auf<br />
SNMP basiert, lassen sich eine Vielzahl von SNMP Daten verar<strong>bei</strong>ten.
- 88 -<br />
• check_nagios<br />
Erlaubt <strong>die</strong> Überwachung des Nagios Prozesses auf dem lokalen Rechner. Da <strong>die</strong>ses Plugin<br />
auch auf das ps-Kommando zurückgreift, wird der Einsatz auf zLinux vom Autor <strong>die</strong>ser<br />
Ar<strong>bei</strong>t nicht empfohlen (siehe Kapitel 7.2.2.2).<br />
Weiterführende Informationen: check_nagios --help<br />
• check_nt<br />
Sammelt Daten von dem NSClient 1 , welcher auf Windows NT/2000/XP Servern als<br />
Service installiert <strong>werden</strong> <strong>kann</strong>.<br />
Weiterführende Informationen: http://support.tsmgsoftware.com/ und<br />
check_nt --help<br />
• check_ntp<br />
Vergleicht <strong>die</strong> lokale Zeit mit der eines entfernten Hosts. Basiert auf ntpdate 2 .<br />
Weiterführende Informationen: check_ntp --help<br />
• check_nwstat<br />
Dieses Plugin kontaktiert den auf einem Novell-Server installierten MRTGEXT NLM 3<br />
Weiterführende Informationen: check_nwstat --help<br />
• check_oracle<br />
Überprüft den Status einer Oracle-Datenbank.<br />
Weiterführende Informationen: check_oracle --help<br />
• check_overcr<br />
Dieses Plugin kontaktiert einen entfernten Over-CR 4 Daemon und sammelt über <strong>die</strong>sen<br />
lokale, private Daten.<br />
Weiterführende Informationen: check_overcr --help<br />
• check_ping<br />
Überprüft <strong>die</strong> Verbindung zu einem entfernten Host mittels ping.<br />
Weiterführende Informationen: check_ping --help<br />
1 Der NetsaintClient (NSClient) ist ein Windows Service, welcher verschiedene Systemdaten über einen Port<br />
zur Abfrage bereit stellt. Homepage: http://support.tsmgsoftware.com/<br />
2 ntpdate ist ein Standard Unix-Tool zur Zeit-Synchronisation über das Netzwerk.<br />
3 Der MRTGEXT ist ein Modul, welches MRTG und Nagios auf Novell Netware-Basis unterstützt.<br />
4 Over-CR ist ein alternativer Datensammler von privaten Ressourcen, dessen Weiterentwicklung jedoch<br />
eingestellt wurde. Siehe http://www.molitor.org/overcr/.
- 89 -<br />
• check_procs<br />
Dieses komplexe Plugin überprüft eine Vielzahl von Prozess-Informationen anhand von<br />
angegebenen Metriken und Threshold-Wertebereichen. Da es jedoch auf der Ausgabe des<br />
ps-Kommandos basiert, ist der Einsatz unter zLinux nicht empfehlenswert (siehe<br />
Kapitel 7.2.2.2).<br />
Weiterführende Informationen: check_procs --help<br />
• check_real<br />
Überprüft den REAL Streaming-Service auf dem angegeben Host.<br />
Weiterführende Informationen: check_real --help<br />
• check_rpc<br />
Überprüft, ob der angebene RPC 1 auf dem remote Host registriert und funktionsfähig ist.<br />
Weiterführende Informationen: check_rpc --help<br />
• check_sensors<br />
Dieses Plugin überprüft den lokalen Hardware-Status mit Hilfe des lm_sensors 2 Paketes.<br />
Nur unter Linux funktionsfähig.<br />
Weiterführende Informationen: check_sensors --help<br />
• check_smtp<br />
Dieses Plugin versucht eine SMTP-Verbindung zum angegebenen Host aufzubauen.<br />
Weiterführende Informationen: check_smtp --help<br />
• check_snmp<br />
Überprüft den Status eines entfernten Hosts mit Hilfe der System-Informationen des<br />
SNMP. Es verwendet das Kommando snmpget aus dem net-snmp Paket, welches installiert<br />
sein muss.<br />
Weiterführende Informationen: check_snmp --help<br />
• check_ssh<br />
Überprüft <strong>die</strong> Verbindung zu einem SSH-Daemon auf dem angegeben Host und Port.<br />
Weiterführende Informationen: check_ssh --help<br />
1 Remote Procedure Call, oder kurz RPC, ist ein Protokoll auf der fünften und sechsten Schicht des ISO/OSI-<br />
Modells. Mit der Hilfe von RPC können über ein Netzwerk Funktionsaufrufe auf entfernten Rechnern<br />
durchgeführt <strong>werden</strong>.<br />
2 Das lm_sensors Paket ermöglicht unter Linux auf unterschiedliche Überwachungs-Hardware wie z.B.<br />
Temperatur-Überwachung zuzugreifen.
- 90 -<br />
• check_swap<br />
Überprüft den verwendeten Swap-Speicher auf dem lokalen Host.<br />
Weiterführende Informationen: check_swap --help<br />
• check_tcp<br />
Dieses Plugin testet TCP-Verbindungen zum angegeben Host.<br />
Weiterführende Informationen: check_tcp --help<br />
• check_time<br />
Überprüft <strong>die</strong> Zeit auf dem angegebene Host. check_time verwendet hierzu kein ntpdate,<br />
sondern verbindet sich direkt auf den Port 37 (time-service) des entfernten Hosts.<br />
Weiterführende Informationen: check_time --help<br />
• check_udp<br />
Dieses Plugin testet UDP-Verbindungen zum angegeben Host.<br />
Weiterführende Informationen: check_udp --help<br />
• check_ups<br />
Dieses Plugin testet den UPS 1 -Services des angegebenen Hosts. Die Network UPS Tools<br />
von http://ww.exploits.org <strong>werden</strong> vorausgesetzt.<br />
Weiterführende Informationen: check_ups --help<br />
• check_users<br />
Überprüft <strong>die</strong> Anzahl der aktuell angemeldeten Benutzer.<br />
Weiterführende Informationen: check_users --help<br />
• check_wave<br />
Undokumentiert: Überprüft mit Hilfe von SNMP <strong>die</strong> Signalstärke von WaveLAN.<br />
Weiterführende Informationen: check_wave --help<br />
1 UPS steht in <strong>die</strong>sem Zusammenhang für Uninterruptible Power Supplies
- 91 -<br />
6.2 Contributed Plugins<br />
Neben den Standard-Plugins existieren eine Reihe weiterer Plugins, <strong>die</strong> es teilweise (noch)<br />
nicht in <strong>die</strong> offizielle Distribution geschafft haben oder nicht vom offiziellen Entwicklerteam<br />
gepflegt <strong>werden</strong>.<br />
Allein dem Nagios Plugin Projekt liegen bereits mehr als 60 weiterere (als contrib<br />
gekennzeichnete) Plugins <strong>bei</strong>, <strong>die</strong> Überwachungsmechanismen für Apache-Server, Citrix-<br />
Umgebungen, Raid-Systeme, MS-SQL, ORACLE oder Sockets bereitstellen.<br />
Einige interessante Plugins lassen sich auf folgenden Webseiten finden.<br />
• http://sourceforge.net/projects/nrpe/<br />
NRPE (Nagios Remote Plugin Executor) <strong>die</strong>nt zum Ausführen von Plugins auf entfernten<br />
Hosts.<br />
• http://sourceforge.net/projects/nrpent/<br />
NRPE_NT, der Nagios Remote Plugin Executor für Windows-Umgebungen.<br />
• http://sourceforge.net/projects/naplax/<br />
Nagios Plugins and Extensions. Einige Addons und Plugins für Nagios, jedoch wurde nicht<br />
auf <strong>die</strong> Verwendung des embedded Perl Nagios Rücksicht genommen. Eine Nachfrage <strong>bei</strong><br />
dem Autor Martin Schmitz zur Anpassung an ePN ergab folgendes:<br />
„nein, dazu gibt es momentan keine Pläne.<br />
Da ich noch nie mit embedded Perl gear<strong>bei</strong>tet habe, habe ich auch keine Vorstellung davon,<br />
wie lange eine Anpassung dauern würde.“ 1<br />
• http://support.tsmgsoftware.com/index.php?c=2<br />
Der Nagios NSClient ist ein Windows-Service, welcher verschiedene Systemdaten über<br />
einen Port zur Abfrage bereit stellt. Die offiziellen Nagios Plugins <strong>bei</strong>nhalten bereits das<br />
check_nt Plugin, welches zur Abfrage <strong>die</strong>ser Daten <strong>die</strong>nt.<br />
1 Vgl: Schmitz, Martin (2004): eMail-Korrespondenz Schmitz, Martin, 03.05.2004
7. Proof of Concept (PoC)<br />
- 92 -<br />
Als Aufgabe wurde <strong>die</strong> Implementierung eines heterogenen Server-Monitorings mit Nagios<br />
gestellt. In erster Linie soll <strong>die</strong> generelle Realisierbarkeit mit Standard-Monitoring-Plugins<br />
evaluiert <strong>werden</strong>. Eine wesentliche Herausforderung hier<strong>bei</strong> ist <strong>die</strong> breite Masse an Servern,<br />
welche es performant zu handhaben gilt.<br />
7.1 Zielsetzung<br />
Schon das Ergebnis der vorangegangenen Stu<strong>die</strong>nar<strong>bei</strong>t 1 hielt den Einsatz von Nagios im<br />
Unternehmen Volkswagen theoretisch für möglich, doch wurde eine nähere Evaluierung<br />
empfohlen.<br />
Dieses Proof of Concept soll den praxisnahen Einsatz des Server-Monitoring-Tools Nagios im<br />
Unternehmen Volkswagen darlegen. Da<strong>bei</strong> sollen konkrete Fragen beantwortet <strong>werden</strong>:<br />
• Lassen sich <strong>die</strong> geforderten Standard-Ressourcen überwachen? (siehe Kapitel 7.2)<br />
• In welchem Verhältnis steht der Ressourcenverbrauch von Nagios in Bezug auf <strong>die</strong> Anzahl<br />
der zu überwachenden Services?<br />
Nach der Aussage von Hans-Werner Buske stellt sich eine weitere Anforderung:<br />
„Um unseren Kunden eine Low-Cost Alternative anbieten zu können, ist es unser Ziel, ein<br />
OpenSource Betriebssystem mit einem OpenSource Server-Monitoring Tool zu überwachen.“<br />
Zitat Hans-Werner Buske (2004), Volkswagen AG, Systems Management<br />
Da für jeden überwachten Server <strong>bei</strong> dem Einsatz von IBM/Tivoli Lizenzgebühren fällig<br />
<strong>werden</strong>, stellen grosse Linux-Cluster-Installationen einen hohen Kostenfaktor dar. Sollte<br />
Nagios ausreichende oder sogar bessere Überwachungsmechanismen für Linux bereitstellen,<br />
stellt sich <strong>die</strong> Plattform Linux im produktiven Betrieb als noch attraktiver, da günstiger, dar.<br />
1 Vgl: Schaffranneck, Sven (2004): Stu<strong>die</strong>nar<strong>bei</strong>t
- 93 -<br />
7.2 Anforderungen an das Server-Monitoring<br />
Die Realisierbarkeit soll anhand der folgenden Eckdaten aufgezeigt <strong>werden</strong>. Diese spiegeln<br />
<strong>die</strong> <strong>bei</strong> der Volkswagen AG eingesetzte IT-Umgebung wieder.<br />
7.2.1 Plattformen<br />
Um eine möglichst praxisnahe Umgebung zu realisieren, wurden folgende, mit der<br />
betreuenden Fachabteilung abgestimmten, Plattformen für das PoC gewählt.<br />
• Sun Solaris 8<br />
• HP-UX 11.11<br />
• IBM AIX 5.1 und 5.2<br />
• iLinux 1 2.2 und 2.4 (GNU/Debian Woody und Sid)<br />
• zLinux 2 2.4 (SuSE SLES 7.0)<br />
Als Windows-Plattformen kommen Windows NT4, 2000 und 2003 zum Einsatz. Das hier<br />
vorgestellte PoC beschränkt sich jedoch aus Zeitgründen auf <strong>die</strong> Unix-Plattformen.<br />
7.2.2 Service-Überwachung<br />
Die Basis des großflächigen Server-Monitorings bezieht sich auf eine Untermenge der zur<br />
Verfügung stehenden Plugins. Dem Autor <strong>die</strong>ser Ar<strong>bei</strong>t wurden folgende Vorgaben zur<br />
Überwachung gemacht:<br />
7.2.2.1 Filesystem-Überwachung<br />
Verzeichnisse und Mountpoints sollen anhand von prozentualen Grenzwerten überwacht<br />
<strong>werden</strong>.<br />
Diese Anforderung lässt sich mit dem check_disk Plugin aus dem Nagios Plugin Projekt in<br />
der Version 1.3.1 erfüllen. Der Einsatz des check_disk Plugins aus dem Nagios Plugin Projekt<br />
Release 1.4.0alpha1 ist hier<strong>bei</strong> problematisch, denn es überprüft nur reelle Mountpoints. Dazu<br />
kontrolliert es anhand der /etc/mtab, ob das angegebene Verzeichnis ein Mountpoint ist. Ist<br />
<strong>die</strong>s nicht der Fall, beendet das Plugin seinen Aufruf mit der Fehlermeldung, dass der<br />
angegebene Mountpoint nicht existiert, obwohl das Verzeichnis als ein Unterverzeichnis eines<br />
anderen Mountpoints sehr wohl bestehen <strong>kann</strong>.<br />
1 Das „i“ steht für Intel und beschreibt ein Linux, welches auf Intel-basierender Hardware läuft.<br />
2 zLinux bezeichnet <strong>die</strong> Implementierung des freien Betriebssystems Linux auf IBM zSeries Hardware.
- 94 -<br />
Beispiel:<br />
Host A:<br />
/dev/hda1 /<br />
/dev/hda2 /boot<br />
Ausgabe des Plugins aus dem Release 1.3.1:<br />
nagios@host-a: ./check_disk -w15% -c10% -p /usr<br />
DISK OK [464372 kB (16%) free on /dev/hda1]<br />
nagios@host-a: ./check_disk -w15% -c10% -p /usr<br />
DISK OK [464372 kB (16%) free on /dev/hda1]<br />
Ausgabe des Plugins aus dem Release 1.4.0alpha1:<br />
nagios@host-a: ./check_disk -w15% -c10% -p /<br />
DISK OK - free space: / 453 MB (16%);| /=453MB;1689;1971;0;2816<br />
nagios@host-a: ./check_disk -w15% -c10% -p /usr<br />
DISK CRITICAL - free space:| [/usr not found]<br />
Obwohl /usr als Verzeichnis, jedoch nicht als Mountpoint, existiert, wird der Status<br />
CRITICAL zurückgegeben.<br />
Ist man auf Performance-Daten angewiesen, steht derzeit jedoch nur das check_disk Plugin<br />
aus dem Release 1.4.0alpha1 zur Verfügung.<br />
7.2.2.2 Prozess-Überwachung<br />
Die Überwachung der Prozesse ist eine weitere Anforderung. Folgende Aspekte sind zu<br />
berücksichtigen:<br />
• Minimale und maximale Anzahl eines Prozesses.<br />
Es <strong>werden</strong> sämtliche Prozesse gezählt, <strong>die</strong> dem übergebenen Prozessnamen (mit oder ohne<br />
Argumente) entspricht.<br />
• Anzahl der Zombie 1 -Prozesse.<br />
• CPU-Last einzelner Prozesse.<br />
Gelöst <strong>werden</strong> <strong>die</strong>se Anforderungen mit dem check_procs Plugin. Es verwendet das ps<br />
Systemkommando, um <strong>die</strong> relevanten Prozessinformationen zu sammeln und auszuwerten.<br />
Leider stellt der Aufruf von ps in der Version 2.0.7 der eingesetzten<br />
SuSE Linux Enterprise Server Distribution 7 unter zLinux ein Performance-Problem dar.<br />
1 Ein Zombie ist ein beendeter Kindprozess, dessen Vaterprozess es versäumt hat, den Exitstatus des<br />
Kindprozesses mit einem wait()-Call abzufragen. Bis <strong>die</strong>ses geschehen ist (oder der Vaterprozess beendet<br />
wurde), bleibt der Zombie-Prozess in der Prozesstabelle bestehen.
- 95 -<br />
Das Kommando ps greift auf das proc-Filesystem zu, um Prozessinformationen zu ermitteln.<br />
Da<strong>bei</strong> wird (bezogen auf <strong>die</strong> genannte Version) für jeden Prozess auch <strong>die</strong> „Datei“<br />
/proc//meminfo geöffnet und ausgelesen, auch wenn <strong>die</strong> darin enthaltene Information<br />
von dem (durch Optionen erweiterten) ps-Aufruf nicht benötigt wird.<br />
Gerade <strong>die</strong>ser Aufruf verbraucht jedoch erhebliche CPU-Zeit, was insbesondere <strong>bei</strong> hoher<br />
Prozessanzahl auffällig wird. Die mit time 1 gemessene Zeit eines ps Aufrufes <strong>bei</strong> 340 aktiven<br />
Prozessen dauert mehr als 3 Sekunden:<br />
root@lnx12: time /bin/ps -weo 'stat uid ppid vsz rss pcpu comm args' |wc -l<br />
340<br />
real 0m3.268s<br />
user 0m0.040s<br />
sys 0m3.190s<br />
Zu <strong>die</strong>sem Zweck wurde im Rahmen <strong>die</strong>ser Ar<strong>bei</strong>t ein auf Perl basierendes ps-Kommando<br />
entwickelt, welches im Anhang auf Seite 153 zu finden ist.<br />
root@lnx12: time ./ps.pl | wc -l<br />
340<br />
real 0m0.279s<br />
user 0m0.160s<br />
sys 0m0.090s<br />
Dieses Plugin benötigt nur einen Bruchteil der CPU-Zeit des ursprünglichen ps-Kommandos,<br />
stellt jedoch alle (mit Ausnahme der verwendeten, prozentualen CPU-Last, s. Seite 153) für<br />
das check_procs notwendigen Informationen bereit.<br />
Auf HP-UX-Plattformen (HP-UX 11.11) gab es ebenfalls ein Problem im check_proc-Plugin<br />
(1.4.0alpha1), welches jedoch mittlerweile im CVS behoben wurde. 2 Hier<strong>bei</strong> handelte es sich<br />
um eine fehlerhafte Auswertung des ps-Kommandos. Berichtet wurde der Fehler vom Autor<br />
<strong>die</strong>ser Ar<strong>bei</strong>t am 29.04.2004 in der nagios-user Mailingliste 3 . Einen Tag später wurde der<br />
Fehler durch den Entwickler Von Toon beseitigt.<br />
1 time misst unter Linux <strong>die</strong> Laufzeit eines einfachen Kommandos.<br />
2 Vgl: Voon, Ton (2004): eMail-Korrespondenz Voon, Ton, 30.04.2004<br />
3 Vgl: Mailingliste nagios-users, Message-ID: 8138925, 29.04.2004
- 96 -<br />
7.2.2.3 Auslagerungsspeicher-Überwachung<br />
Der Verbrauch des Auslagerungsspeichers <strong>kann</strong> mit Hilfe des check_swap Plugins überwacht<br />
<strong>werden</strong>. Hierzu <strong>kann</strong> das Plugin mit der Option --allswaps <strong>die</strong> angegebenen Thresholds<br />
gegen den gesamten, zur Verfügung stehenden Auslagerungsspeicher (oder jede einzelne<br />
Swap-Partition) testen. Der Aufruf von check_swap --help erläutert <strong>die</strong>s wie folgt:<br />
-a, --allswaps<br />
Conduct comparisons for all swap partitions, one by one<br />
Auf den HP-UX-Plattformen ist <strong>die</strong> Erkennung des swap-Befehls jedoch fehlerhaft. Das<br />
Problem liegt in der Datei configure.in und wurde nach einem Bugfix durch den Autor <strong>die</strong>ser<br />
Ar<strong>bei</strong>t am 10.05.2004 korrigiert. Die neue Revision >=1.110 der configure.in <strong>kann</strong> im<br />
WebCVS unter http://cvs.sourceforge.net/viewcvs.py/nagiosplug/nagiosplug/configure.in<br />
eingesehen <strong>werden</strong>. Weitreichender sind <strong>die</strong> Modifikationen an dem Quellcode von<br />
check_swap.c, welcher im Anhang auf Seite 146 einzusehen ist.<br />
Erst <strong>die</strong> Verwendung des configure.in ab der Revision 1.110 und dem angehängten<br />
check_swap.c ermöglicht den Einsatz des check_swap-Plugins auf HP-UX Plattformen.
- 97 -<br />
7.3 Beschreibung des PoC<br />
Es soll ein möglichst einfaches Szenario aufgebaut <strong>werden</strong>, welches <strong>die</strong> in Kapitel 4.5<br />
genannten ~1280 Service-Checks/Minute bewältigt. Dazu stellt VW teils dedizierte Test-<br />
Server, teils Server aus dem Produktionsumfeld zur Verfügung, um ein realistisches Testfeld<br />
zu ermöglichen.<br />
Der (alleinige) Nagios-Server wird auf einer Sun-Fire-280R installiert.<br />
• Prozessoren: 2x UltraSPARC-III CPU 750MHz<br />
• Ar<strong>bei</strong>tsspeicher: 2GB RAM<br />
• Betriebssystem: Sun Solaris 8<br />
Um <strong>die</strong> hohe Anzahl von Checks/Minute zu erreichen, <strong>werden</strong> 49 Hosts mit je 20 minütlich<br />
zu überprüfende Services in <strong>die</strong> Überwachung genommen. Damit ergeben sich<br />
980 Checks/Minute. Folgende Plattformen <strong>werden</strong> auf den remote Hosts eingesetzt.<br />
• 1x AIX 5.1<br />
• 1x AIX 5.2<br />
• 1x HP-UX 11.11<br />
• 1x iLinux 2.4 (Debian Sarge)<br />
• 2x zLinux 2.4 (Suse Linux Enterprise Server 7)<br />
• 43x Sun Solaris 8<br />
Von den 49 Hosts stehen 47 (inkl. Nagios-Server) direkt im Intranet und 2 in einer DMZ<br />
(hinter einer „weichen“ Firewall 1 ), um auch den Zugriff durch eine Firwall experimentell zu<br />
demonstrieren.<br />
Die verbleibenden 47 Hosts stehen zum einen in Wolfsburg, wo auch der Nagios-Server<br />
präsent ist, zum anderen in Emden (3), Kassel (3), Braunschweig (1) und Salzgitter (1). Damit<br />
<strong>kann</strong> <strong>die</strong> Funktionalität auch über WAN-Strecken getestet <strong>werden</strong>.<br />
Um <strong>die</strong> Komplexität der Konfiguration für den PoC gering zu halten, <strong>werden</strong> <strong>bei</strong> sämtlichen<br />
Hosts identische Services mit identischen Tresholds überwacht.<br />
1 Zugriffe vom Intranet in <strong>die</strong> DMZ sind erlaubt, entgegengesetzt nur bestehende Verbindungen,<br />
s. Kapitel 7.10.
- 98 -<br />
7.4 Installation des Nagios Servers<br />
Der Kern des PoC besteht aus dem Nagios-Server. Um <strong>die</strong> hohe, zu erwartende Last<br />
verar<strong>bei</strong>ten zu können, wird ein Doppelprozessor Sun-Server eingesetzt. Als Betriebssystem<br />
kommt Solaris 8 zum Einsatz.<br />
Vor der Installation müssen <strong>die</strong> Pre-Requirements festgestellt und erfüllt <strong>werden</strong>. Danach<br />
können <strong>die</strong> Quellen kompiliert und installiert, sowie <strong>die</strong> Konfiguration für das PoC angepasst<br />
<strong>werden</strong>.<br />
7.4.1 Voraussetzung<br />
Folgende zusätzlichen Systempakete <strong>werden</strong> für <strong>die</strong> Installation des Nagios Servers benötigt.<br />
Als Quelle wird <strong>die</strong> kostenlose Software-Sammlung http://www.sunfreeware.com gewählt.:<br />
• OpenSSH 3.7.1p2 (openssh-3.7.1p2-sol8-sparc-local.gz)<br />
Freie Implementierung des Secure Shell Systems. Wird unter anderem für das<br />
check_by_ssh Plugin verwendet.<br />
Prereq-Check erfolgreich: pkginfo -l SMCossh ergibt Version 3.7.1.p2<br />
• gd 2.0.12 (gd-2.0.12-sol8-sparc-local)<br />
Die GD Graphics Library <strong>die</strong>nt dem dynamischen Erstellen von JPEG, PNG sowie anderen<br />
Bildern und wird von dem Nagios Webinterfache verwendet.<br />
Prereq-Check erfolgreich: pkginfo -l SMCgd ergibt Version 2.0.12<br />
• xpm 3.4k (xpm-3.4k-sol8-sparc-local)<br />
XPM Graphic Library, wird von GD benötigt.<br />
Prereq-Check erfolgreich: pkginfo -l SMCxpm ergibt Version 3.4k<br />
• libpng 1.2.4 (libpng-1.2.4-sol8-sparc-local)<br />
PNG Graphic Labrary, wird von GD benötigt.<br />
Prereq-Check erfolgreich: pkginfo -l SMClpng ergibt Version 1.2.4<br />
• libiconv 1.8 (libiconv-1.8-sol8-sparc-local)<br />
GNU iconv() Implementierung, wird von GD benötigt.<br />
Prereq-Check erfolgreich: pkginfo -l SMCliconv ergibt Version 1.8<br />
• libgcc 3.3 (libgcc-3.3-sol8-sparc-local.gz)<br />
Dieses Paket enthält <strong>die</strong> wesentlichen gcc-Librarys, welche zur Laufzeit von GD<br />
notwendig sind.<br />
Prereq-Check: libgcc wird nicht benötigt, da gcc zum kompilieren installiert wird.
• jpeg 6b (jpeg-6b-sol8-sparc-local)<br />
- 99 -<br />
JPEG Graphics Library, wird von GD benötigt.<br />
Prereq-Check erfolgreich: pkginfo -l SMCjpeg ergibt Version 6b<br />
• freetype 2.1.2 (freetype-2.1.2-sol8-sparc-local)<br />
Software Font Engine, wird von GD benötigt.<br />
Prereq-Check erfolgreich: pkginfo -l SMCfreetp ergibt Version 2.1.2<br />
• gcc 3.3.2 (gcc-3.3.2-sol8-sparc-local.gz)<br />
Der GNU C Compiler wird zum Kompilieren, jedoch nicht zur Laufzeit, von Nagios und<br />
dessen Plugins verwendet. Wird das gcc-Paket installiert, sind <strong>die</strong> gcc-Libraries implizit<br />
enthalten und es <strong>kann</strong> auf <strong>die</strong> Installation des libgcc verzichtet <strong>werden</strong>.<br />
Prereq-Check erfolgreich: pkginfo -l SMCgcc ergibt Version 3.3.2<br />
Hinweis: Das gcc-Paket benötigt zum Entpacken temporär etwa 350MB in /var/tmp und<br />
nach erfolgreicher Installation dauerhaft etwa 350MB in /usr/local. Es ist darauf zu<br />
achten, ausreichend Speicherplatz bereit zu halten.<br />
• mcrypt library 2.4.11 (libmcyrpt-2.4.11)<br />
Die mcrypt-Library wird zum Übersetzen und zur Laufzeit des NSCA benötigt. Sie <strong>kann</strong><br />
unter http://mcrypt.hellug.gr/ herunter geladen <strong>werden</strong>.<br />
Prereq-Check FEHLER: find / | grep libmcrypt ergibt 0 Dateien<br />
Daraus folgt, das <strong>die</strong> mcrypt-Library installiert <strong>werden</strong> muss, bevor der NSCA-Daemon<br />
kompiliert <strong>werden</strong> <strong>kann</strong>. Dieser Vorgang wird in Kapitel 7.4.2.5 beschrieben.<br />
Mit dem Befehl pkgadd -d können <strong>die</strong> einzelnen Pakete über den Solaris<br />
Paketmanager installiert <strong>werden</strong>.<br />
pkgadd -d gcc-3.3.2-sol8-sparc-local.gz<br />
Sollte es <strong>bei</strong> der Installation der Pakete zu Komplikationen kommen, ist eventuell bereits eine<br />
(ältere) Version installiert. Diese <strong>kann</strong> mit pkgrm deinstalliert <strong>werden</strong>.<br />
pkgrm SMCgcc<br />
Für den Einsatz des Webfrontends von Nagios wird ein Apache (Version 1.3.29) Web-Server 1<br />
installiert.<br />
Hinweis: Für <strong>die</strong> Verwendung von SSH und SSL wird ein SunOS Patch (ID: 112438)<br />
benötigt, welcher /dev/random und /dev/urandom bereitstellt. 2<br />
1 Der Apache Webserver ist einer der verbreitesten Webserver weltweit und <strong>kann</strong> von<br />
http://httpd.apache.org/download.cgi herunter geladen <strong>werden</strong>.<br />
2 Der SunOS Patch 112438-03 <strong>kann</strong> unter<br />
http://sunsolve.sun.com/pub-cgi/retrieve.pl?type=0&doc=fpatches%2F112438&display=plain gefunden
- 100 -<br />
7.4.2 Installation<br />
Damit der Aufwand für <strong>die</strong> evtl. Portierung der Installation in ein HA-Cluster zu einem<br />
späteren Zeitpunkt geringer ausfällt, wird das ursprüngliche Installationsverzeichnis<br />
/usr/local/nagios auf /global/nagios abgeändert. Der Mountpoint /global entspricht den in<br />
dem Cluster gespiegelten Festplatten.<br />
Folgende Verzeichnisstruktur wird verwendet:<br />
/global/nagios/<br />
/global/nagios/client/<br />
/global/nagios/nagios/<br />
/global/nagios/nagios/bin/<br />
/global/nagios/nagios/etc/<br />
/global/nagios/nagios/lib/<br />
/global/nagios/nagios/libexec/<br />
/global/nagios/nagios/sbin/<br />
/global/nagios/nagios/share/<br />
/global/nagios/nagios/var/<br />
/global/nagios/nagios/var/rw/<br />
/global/nagios/nsca/<br />
/global/nagios/src/<br />
/global/nagios/src/apache_1.3.29<br />
/global/nagios/src/libmcrypt-2.5.7<br />
/global/nagios/src/nagios-1.2<br />
/global/nagios/src/nagios-plugins-1.4.0aplha1<br />
/global/nagios/src/nrpe-2.0<br />
/global/nagios/src/nsca-2.4<br />
/global/nagios/apache/<br />
/global/nagios/local/<br />
Wurzelverzeichnis der Nagios-Umgebung<br />
Wurzel der Client-Binaries und -Quellen<br />
Nagios Server Installation<br />
Nagios Binaries<br />
Nagios Konfigurationen<br />
Für Nagios benötigte Libraries<br />
Plugin-Sammlung<br />
CGI-Verzeichnis<br />
Basis der Stylsheets, Dokumentation, etc.<br />
Wurzel für <strong>die</strong> Log-Daten und<br />
Statusinformationen<br />
Basis für das External Command File<br />
Basis des NSCA-Daemons<br />
Wurzelverzeichnis der Quellen<br />
Wurzelverzeichnis für <strong>die</strong> dedizierte<br />
Apache-Installation<br />
Wurzelverzeichnis für sonstige Programme<br />
und Libraries<br />
Der Benutzername sowie Gruppe heisst nagios und muss zuvor manuell angelegt <strong>werden</strong>.<br />
root@tivoli-1: groupadd nagios<br />
root@tivoli-1: useradd -g nagios nagios<br />
Die nachfolgenden Schritte <strong>werden</strong> weitestgehend als User nagios durchgeführt.<br />
<strong>werden</strong>
- 101 -<br />
7.4.2.1 Apache Installation<br />
Die verwendete Apache-Version stammt von http://httpd.apache.org und wird nach dem<br />
Entpacken mit nachfolgenden Befehlen für Nagios vorbereitet.<br />
nagios@tivoli-1: cd /global/nagios/src<br />
nagios@tivoli-1: gunzip < apache_1.3.29.tar.gz | tar xf -<br />
nagios@tivoli-1: cd apache_1.3.29<br />
nagios@tivoli-1: ./configure --prefix=/global/nagios/apache\<br />
--server-uid=nagios --server-gid=nagios<br />
nagios@tivoli-1: make; make install<br />
Hier<strong>bei</strong> wird dem Apache schon <strong>bei</strong>m Kompilieren seine UID und GID mitgeteilt.<br />
Die Standardkonfiguration muss um einige Direktiven erweitert <strong>werden</strong>. Um <strong>die</strong><br />
Übersichtlichkeit zu waren, <strong>werden</strong> sämtliche Nagios-spezifischen Konfigurationsmerkmale<br />
in nagios.conf ausgelagert. Die Datei httpd.conf wird um eine Include-Anweisung erweitert:<br />
nagios@tivoli-1: echo „Include /global/nagios/apache/conf/nagios.conf“ >>\<br />
/global/nagios/apache/conf/httpd.conf<br />
Die Datei /global/nagios/apache/conf/nagios.conf enthält folgende Daten:<br />
# BEGIN<br />
ScriptAlias /cgi-bin/nagios /global/nagios/nagios/sbin<br />
ScriptAlias /nagios/cgi-bin /global/nagios/nagios/sbin<br />
<br />
Options ExecCGI<br />
AllowOverride AuthConfig<br />
Order Allow,Deny<br />
Allow From All<br />
AuthName "Nagios Access"<br />
AuthType Basic<br />
AuthUserFile /global/nagios/nagios/etc/htpasswd.users<br />
require valid-user<br />
<br />
# Where the stylesheets (config files) reside<br />
Alias /nagios/stylesheets /global/nagios/nagios/share/stylesheets<br />
# Where the HTML pages live(d)<br />
Alias /nagios /global/nagios/nagios/share
- 102 -<br />
<br />
Options FollowSymLinks<br />
AllowOverride AuthConfig<br />
Order Allow,Deny<br />
Allow From<br />
AuthName "Nagios Access"<br />
AuthType Basic<br />
AuthUserFile /global/nagios/nagios/etc/htpasswd.users<br />
require valid-user<br />
<br />
# EOF<br />
Nachdem daraufhin <strong>die</strong> Benutzer in <strong>die</strong> angegebene htpasswd.users eingetragen wurden, <strong>kann</strong><br />
der Apache gestartet <strong>werden</strong>.<br />
nagios@tivoli-1: cd /global/nagios/apache/bin<br />
nagios@tivoli-1: ./htpasswd -c /global/nagios/nagios/etc/htpasswd.users nagios<br />
nagios@tivoli-1: ./htpasswd -c /global/nagios/nagios/etc/htpasswd.users hansi<br />
nagios@tivoli-1: ./htpasswd -c /global/nagios/nagios/etc/htpasswd.users sven<br />
nagios@tivoli-1: ./apachectl start<br />
./apachectl start: httpd started<br />
Damit der Apache auch <strong>bei</strong> einem Reboot des Servers wieder gestartet wird, <strong>kann</strong> das im<br />
Anhang auf Seite 145 dokumentierte init-Script nach /etc/init.d/nag-apache installiert<br />
<strong>werden</strong>. Daraufhin sollte noch ein passender Symlink in den Runlevel 3 (Multiuser) und<br />
Runlevel 0 (Shutdown) gesetzt.<br />
nagios@tivoli-1: ln -s /etc/init.d/nag-apache /etc/rc3.d/S99nag-apache<br />
nagios@tivoli-1: ln -s /etc/init.d/nag-apache /etc/rc0.d/K50nag-apache
- 103 -<br />
7.4.2.2 Nagios Installation<br />
Wurde das benötigte Installationspaket von<br />
http://prdownloads.sourceforge.net/nagios/nagios-1.2.tar.gz?download herunter geladen, <strong>kann</strong><br />
es wie folgt installiert <strong>werden</strong>.<br />
nagios@tivoli-1: cd /global/nagios/src<br />
nagios@tivoli-1: gunzip < nagios-1.2.tar.gz | tar xf -<br />
nagios@tivoli-1: cd nagios-1.2<br />
nagios@tivoli-1: ./configure --enable-embedded-perl\<br />
--with-perlcache\<br />
--prefix=/global/nagios/nagios<br />
Durch <strong>die</strong> Optionen --enable-embedded-perl und --with-perlcache profitiert Nagios von den<br />
Vorteilen seines embedded Perl-Interpreters (siehe S. 31) sowie Perl-Caches.<br />
nagios@tivoli-1: make all<br />
nagios@tivoli-1: make install<br />
nagios@tivoli-1: make install-commandmode<br />
nagios@tivoli-1: make install-config<br />
Die Installation der Init-Scripte erfolgt im nächsten Schritt als User root, da nur <strong>die</strong>ser<br />
schreibenden Zugriff auf das systemweite init-Verzeichnis hat.<br />
root@tivoli-1: make install-init<br />
Hinweis: Wird Nagios über das init-Script aufgerufen, müssen <strong>die</strong> zusätzlichen Library-Pfade<br />
be<strong>kann</strong>t gemacht <strong>werden</strong>. Dies geschieht durch Hinzufügen der folgenden <strong>bei</strong>den Zeilen<br />
in /etc/init.d/nagios.<br />
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib:/global/nagios/local/lib<br />
export LD_LIBRARY_PATH<br />
Auf <strong>die</strong> Konfiguration von Nagios wird im Kapitel 7.4.3 eingegangen.
- 104 -<br />
7.4.2.3 Installation der Plugins<br />
Da das Nagios Quellpaket keine Plugins enthält, müssen <strong>die</strong>se zusätzlich nachinstalliert<br />
<strong>werden</strong>. Wurden <strong>die</strong> Plugins von<br />
http://sourceforge.net/project/showfiles.php?group_id=29880 herunter geladen, können <strong>die</strong>se<br />
wie gewohnt installiert <strong>werden</strong>.<br />
nagios@tivoli-1: cd /global/nagios/src<br />
nagios@tivoli-1: gunzip < nagios-plugins-1.4.0alpha1.tar.gz | tar xf -<br />
nagios@tivoli-1: cd nagios-plugins-1.4.0alpha1.tar<br />
nagios@tivoli-1: ./configure --prefix=/global/nagios/nagios<br />
nagios@tivoli-1: make; make install<br />
Daraufhin sind <strong>die</strong> Plugins einsatzbereit und in dem Verzeichnis<br />
/global/nagios/nagios/libexec zu finden.<br />
7.4.2.4 Installation des check_nrpe<br />
Das Plugin check_nrpe ist unabhängig von dem Nagios Plugin Projekt und <strong>kann</strong> über <strong>die</strong><br />
Nagios Homepage bezogen <strong>werden</strong> (http://www.nagios.org/download/extras.php). Um von<br />
der Komfortabilität der variablen Parameter profitieren zu können, wird der NRPE mit<br />
--enable-command-args kompiliert. Mit der Option --enable-ssl <strong>werden</strong> <strong>die</strong> SSL-<br />
Verschlüsselungsmechanismen berücksichtigt.<br />
nagios@tivoli-1: cd /global/nagios/src<br />
nagios@tivoli-1: gunzip < nrpe-2.0.tar.gz | tar xf -<br />
nagios@tivoli-1: cd nrpe-2.0.tar<br />
nagios@tivoli-1: ./configure --enable-ssl --enable-command-args<br />
nagios@tivoli-1: make all<br />
Nach dem Kompilieren liegt der NRPE-Daemon und der check_nrpe im Unterverzeichnis<br />
./src. Von dort aus können sie manuell in das Zielverzeichniss kopiert <strong>werden</strong>. Da für <strong>die</strong>se<br />
Nagios-Server-Installation nur das check_nrpe Plugin von Interesse ist, wird <strong>die</strong>ses in das<br />
libexec-Verzeichnis der Nagios-Installation kopiert.<br />
nagios@tivoli-1: cp -p src/check_nrpe /global/nagios/nagios/libexec<br />
Der check_nrpe <strong>kann</strong> jetzt verwendet <strong>werden</strong>.
- 105 -<br />
7.4.2.5 Installation des NSCA<br />
Der NSCA soll auf dem Nagios Server als Daemon laufen und seine empfangenen Check-<br />
Results in das External Command File schreiben. Bevor jedoch der NSCA kompiliert <strong>werden</strong><br />
<strong>kann</strong>, muss <strong>die</strong> mcrypt-Library installiert <strong>werden</strong>.<br />
nagios@tivoli-1: cd /global/nagios/src<br />
nagios@tivoli-1: gunzip < libmcrypt-2.5.7.tar.gz | tar xf -<br />
nagios@tivoli-1: cd libmcrypt-2.5.7<br />
nagios@tivoli-1: ./configure --prefix=/global/nagios/local<br />
nagios@tivoli-1: make; make install<br />
Damit das configure-Script des NSCA <strong>die</strong> mcrypt-Installation findet, <strong>werden</strong> manuell <strong>die</strong><br />
Umgebungsvariablen verändert.<br />
nagios@tivoli-1: export PATH=$PATH:/global/nagios/local/bin<br />
nagios@tivoli-1: export LD_LIBRARY_PATH=/global/nagios/local/lib<br />
Jetzt <strong>kann</strong> das NSCA Paket entpackt und kompiliert <strong>werden</strong>. Als Prefix wird in <strong>die</strong>sem Fall<br />
der Installationspfad der Nagios-Installation angegeben.<br />
nagios@tivoli-1: cd /global/nagios/src<br />
nagios@tivoli-1: gunzip < nsca-2.4.tar.gz | tar xf -<br />
nagios@tivoli-1: cd nsca-2.4<br />
nagios@tivoli-1: ./configure --prefix=/global/nagios/nagios<br />
nagios@tivoli-1: make all<br />
Die Installation des NSCA-Daemons erfolgt manuell durch kopieren.<br />
nagios@tivoli-1: cp nsca.cfg ./src/nsca /global/nagios/nsca<br />
Die generierte Konfiguration ist bereits lauffähig. Einzig <strong>die</strong> Option password wird auf den<br />
Wert tivnag gesetzt. Nach dem Starten des NSCA-Daemons erscheint <strong>die</strong>ser<br />
erwartungsgemäß in der Prozessliste.<br />
nagios@tivoli-1: cd /global/nagios/nsca<br />
nagios@tivoli-1: ./nsca -c nsca.cfg<br />
nagios@tivoli-1: ps -Af|grep nsca<br />
nagios 12266 1 0 15:13:59 ? 0:00 ./nsca -c nsca.cfg<br />
Zu <strong>die</strong>sem Zeitpunkt sind nur Verbindungen von der IP 127.0.0.1 (localhost) erlaubt. Im<br />
Verlauf des PoC <strong>werden</strong> weitere IPs für jeden Host, welcher send_nsca nutzt, hinzugefügt.
- 106 -<br />
Um nach einem Reboot des Servers den Start des NSCA-Daemons zu gewährleisten, wird das<br />
init-Script (s. Anhang, Seite 144) manuell in /etc/init.d/nsca erstellt und mit folgenden<br />
Befehlen eingebunden.<br />
nagios@tivoli-1: ln -s /etc/init.d/nsca /etc/rc3.d/S99nsca<br />
nagios@tivoli-1: ln -s /etc/init.d/nsca /etc/rc0.d/K50nsca<br />
7.4.3 Konfiguration von Nagios<br />
Das Konfigurationsverzeichnis /global/nagios/nagios/etc <strong>bei</strong>nhaltet bereits Beispiele.<br />
Sämtliche Dateien wurden <strong>bei</strong> der Installation automatisch im Namen durch -sample erweitert,<br />
um auf notwendige Anpassungen hinzuweisen. Die einzelnen Konfigurationsoptionen können<br />
der Nagios-Dokumentation 1 entnommen <strong>werden</strong>. In <strong>die</strong>ser Ar<strong>bei</strong>t wird auf sämtliche<br />
modifizierten Optionen eingegangen. Zu Formatierungszwecken wurden in <strong>die</strong>ser Ar<strong>bei</strong>t zum<br />
Teil Zeilenumbrüche hinzugefügt. Diese sind durch Backslashs „\“ gekennzeichnet und<br />
müssen vor Übernahme in <strong>die</strong> Konfigurationsdateien entfernt <strong>werden</strong>.<br />
7.4.3.1 Modifikationen an cgi.cfg<br />
Die Datei cgi.cfg <strong>bei</strong>nhaltet Konfigurationsmerkmale für das Webinterface. Es ermöglicht,<br />
Statusinformationen der Service-Checks abzurufen und Einfluss auf den Nagios Prozess zu<br />
nehmen. Um zu erkennen, ob der Nagios Prozess noch läuft, wird folgende Option<br />
auskommentiert.<br />
• nagios_check_command=/global/nagios/nagios/libexec/check_nagios\<br />
/global/nagios/nagios/var/status.log 5 '/global/nagios/nagios/bin/nagios'<br />
Hauptsächlich <strong>werden</strong> <strong>die</strong> authorisierten Benutzer mit ihren globalen Berechtigungen in<br />
cgi.cfg definiert.<br />
• authorized_for_system_information=nagios,hansi,sven<br />
Zugriff auf <strong>die</strong> Nagios Prozess-Informationen über das Webinterfache für <strong>die</strong> User nagios,<br />
hansi und sven.<br />
• authorized_for_configuration_information=nagios,hansi,sven<br />
Lesenden Zugriff auf Konfigurationsinformationen (Hosts, Services, Check-Befehle, ...)<br />
über das Webinterface für <strong>die</strong> angegebenen Benutzer erlauben.<br />
• authorized_for_system_commands=nagios<br />
Der angegebene Benutzer darf über das Webinterface den Nagios Prozess starten und<br />
stoppen.<br />
1 Vgl: Galstad Ethan (2003): Nagios Documentation Version 1.0: Template-Based Object Data Configuration<br />
File Options
- 107 -<br />
• authorized_for_all_services=nagios<br />
Der angegebene Benutzer <strong>kann</strong> <strong>die</strong> Information sämtlicher Services abrufen. Alle anderen<br />
Benutzer sehen nur <strong>die</strong> Services, zu denen sie als Kontaktperson eingetragen sind.<br />
• authorized_for_all_hosts=nagios<br />
Der angegebene Benutzer <strong>kann</strong> <strong>die</strong> Information sämtlicher Hosts abrufen. Alle anderen<br />
Benutzer sehen nur <strong>die</strong> Hosts, zu denen sie als Kontaktperson eingetragen sind.<br />
• authorized_for_all_service_commands=nagios<br />
Der angegebene Benutzer <strong>kann</strong> Service-Kommandos für sämtliche Services über das<br />
Webinterface ausführen. Alle anderen Benutzer haben nur Zugriff auf <strong>die</strong> Service-<br />
Kommandos, zu deren Service sie als Kontaktperson eingetragen sind.<br />
• authorized_for_all_host_commands=nagios<br />
Der angegebene Benutzer <strong>kann</strong> Host-Kommandos für sämtliche Hosts über das<br />
Webinterface ausführen. Alle anderen Benutzer haben nur Zugriff auf <strong>die</strong> Host-<br />
Kommandos, zu deren Hosts sie als Kontaktperson eingetragen sind.<br />
Wurden <strong>die</strong> Änderungen vorgenommen, <strong>kann</strong> cgi.cfg-sample in cgi.cfg umbenannt <strong>werden</strong>.<br />
nagios@tivoli-1: mv cgi.cfg-sample cgi.cfg
- 108 -<br />
7.4.3.2 Modifikationen an checkcommands.cfg<br />
In checkcommands.cfg <strong>werden</strong> sämtliche vom Nagios Prozess aufzurufenden Plugins mit<br />
einem beschreibenden Namen und der Kommandozeile festgelegt. Um <strong>die</strong> in <strong>die</strong>sem PoC<br />
verwendeten Plugins verwenden zu können, muss <strong>die</strong> Datei um folgende Einträge erweitert<br />
<strong>werden</strong>.<br />
define command {<br />
command_name check_nrpe_ssl_args<br />
command_line $USER1$/check_nrpe -t 120 -H $HOSTADDRESS$ -c check_args\<br />
-a „$ARG1$ $ARG2$“<br />
}<br />
define command {<br />
command_name check_nrpe_ssl_alive<br />
command_line $USER1$/check_nrpe -t 120 -H $HOSTADDRESS$<br />
}<br />
define command {<br />
command_name check_nrpe_args<br />
command_line $USER1$/check_nrpe -n -t 120 -H $HOSTADDRESS$\<br />
-c check_args -a „$ARG1$ $ARG2$“<br />
}<br />
define command {<br />
command_name check_nrpe_alive<br />
command_line $USER1$/check_nrpe -n -t 120 -H $HOSTADDRESS$<br />
}<br />
Diese vier Einträge für den NRPE gelten für Hosts, auf denen der NRPE-Daemon mit oder<br />
ohne SSL kompiliert wurde (erkennbar an der Option -n). Zusätzlich wurde der Timeout auf<br />
120 Sekunden erhöht, um <strong>die</strong> in der Praxis auftretenden Performanceschwankungen des<br />
Netzwerkes oder remote Hosts zu kompensieren.<br />
Wurden <strong>die</strong> Änderungen durchgeführt, lässt sich <strong>die</strong> Beispielkonfiguration durch umbenennen<br />
aktivieren.<br />
nagios@tivoli-1: mv checkcommands.cfg-sample checkcommands.cfg
- 109 -<br />
7.4.3.3 Modifikationen an contactgroups.cfg<br />
Die in contactgroups.cfg definierten Objekte fassen <strong>die</strong> in contact.cfg angelegten Benutzer<br />
zu Gruppen zusammen. Da <strong>die</strong> vorgegebenen Beispiele nicht auf das PoC übertragbar sind,<br />
wird <strong>die</strong> bestehende Konfiguration aus contactgroups.cfg-sample verworfen und stattdessen<br />
mit nachfolgenden Objekten neu erstellt.<br />
define contactgroup{<br />
contactgroup_name<br />
alias<br />
members<br />
}<br />
define contactgroup{<br />
contactgroup_name<br />
alias<br />
members<br />
}<br />
unix-admins<br />
Unix Administratoren<br />
hansi<br />
linux-admins<br />
Linux Administratoren<br />
hansi,sven
- 110 -<br />
7.4.3.4 Modifikationen an contacts.cfg<br />
Die vorgegeben Benutzer in contact.cfg-sample <strong>werden</strong> verworfen und durch folgende<br />
Objektdefinitionen ersetzt.<br />
define contact{<br />
contact_name<br />
alias<br />
service_notification_period<br />
host_notification_period<br />
service_notification_options<br />
host_notification_options<br />
service_notification_commands<br />
host_notification_commands<br />
email<br />
pager<br />
}<br />
nagios<br />
Nagios Admin<br />
none<br />
none<br />
n<br />
n<br />
notify-by-email<br />
host-notify-by-email<br />
sven.schaffranneck@volkswagen.de<br />
sven.schaffranneck@volkswagen.de<br />
Der Kontakt Nagios Admin wird aufgrund des n (none) hinter den Optionen<br />
host_notification_options und service_notification_options keine Meldungen von<br />
Nagios erhalten. Er <strong>die</strong>nt lediglich administrativen Zwecken.<br />
define contact{<br />
contact_name<br />
alias<br />
service_notification_period<br />
host_notification_period<br />
service_notification_options<br />
host_notification_options<br />
service_notification_commands<br />
host_notification_commands<br />
email<br />
pager<br />
}<br />
define contact{<br />
contact_name<br />
alias<br />
service_notification_period<br />
host_notification_period<br />
service_notification_options<br />
host_notification_options<br />
service_notification_commands<br />
host_notification_commands<br />
email<br />
pager<br />
}<br />
hansi<br />
Hans Fricke<br />
workhours<br />
workhours<br />
c,r<br />
d,r<br />
notify-by-email<br />
host-notify-by-email<br />
hans.fricke@volkswagen.de<br />
hans.fricke@volkswagen.de<br />
sven<br />
Sven Schaffranneck<br />
24x7<br />
24x7<br />
c,w,r<br />
d,r<br />
notify-by-email<br />
host-notify-by-email<br />
sven.schaffranneck@volkswagen.de<br />
sven.schaffranneck@volkswagen.de
- 111 -<br />
7.4.3.5 Modifikationen an dependencies.cfg<br />
Service- und Host-Abhängigkeiten sind in komplexen Umgebungen sinnvoll einsetzbar. Von<br />
ihrer Verwendung wird in <strong>die</strong>sem PoC jedoch abgesehen, da sie für großflächige Lasttests<br />
keinen aussagekräftigen Mehrwert sondern nur zusätzlichen Konfigurationsaufwand mit sich<br />
bringen.<br />
Die Datei dependencies.cfg-sample wird gelöscht und in <strong>die</strong> entsprechende<br />
cfg_file-Direktive aus der nagios.cfg entfernt (s. Kapitel 7.4.3.10).<br />
nagios@tivoli-1: rm dependencies.cfg-sample<br />
7.4.3.6 Modifikationen an escalations.cfg<br />
Laut der Nagios Dokumentation sind <strong>die</strong> Host,- Hostgroup-, Service- und Servicegroup- (erst<br />
ab Nagios Version 2.0) Escalations „completely optional“. Mit ihnen lassen sich<br />
Benachrichtigungen für spezifische Hosts oder Services (oder Gruppen) regeln. In <strong>die</strong>sem<br />
PoC <strong>werden</strong> <strong>die</strong>se optionalen Direktiven nicht verwendet.<br />
nagios@tivoli-1: rm escalations.cfg-sample<br />
7.4.3.7 Modifikationen an hostgroups.cfg<br />
Die Objekte <strong>die</strong>ser Konfigurationsdatei fassen <strong>die</strong> Hosts aus hosts.cfg in Gruppen<br />
zusammen. Für <strong>die</strong> Unix-Hosts wird in <strong>die</strong>sem PoC zwischen SSL-fähigen und nicht-SSLfähigen<br />
NRPE-Hosts unterschieden.<br />
define hostgroup{<br />
hostgroup_name<br />
alias<br />
contact_groups<br />
members<br />
}<br />
define hostgroup{<br />
hostgroup_name<br />
alias<br />
contact_groups<br />
members<br />
}<br />
define hostgroup{<br />
hostgroup_name<br />
alias<br />
contact_groups<br />
members<br />
}<br />
unix-nrpe-ssl-servers<br />
Unix-Server mit NRPE-SSL<br />
unix-admins<br />
tivoli-40<br />
unix-nrpe-servers<br />
Unix Server mit NRPE<br />
unix-admins<br />
l11tiv01m,l11tiv03m<br />
linux-nrpe-ssl-servers<br />
Linux Server mit NRPE-SSL<br />
linux-admins<br />
s390linux07,lnx5
- 112 -<br />
Zusätzlich gibt es noch eine Hostgroup unix, welche sämtliche Unix und Linux Hosts enthält.<br />
Die in hostgroups.cfg-sample vordefinierten Objekte sind für <strong>die</strong> verwendete Konfiguration<br />
überflüssig und <strong>werden</strong> entfernt.<br />
7.4.3.8 Modifikationen an hosts.cfg<br />
In hosts.cfg <strong>werden</strong> sämtliche zu überwachenden Hosts definiert. Durch <strong>die</strong> Verwendung<br />
von Templates lassen sich viele Optionen zusammenfassen. Zuerst wird ein generisches Host-<br />
Objekt für Unix-Server definiert.<br />
define host {<br />
name<br />
generic-unix-host<br />
register 0<br />
max_check_attempts 3<br />
process_perf_data 0<br />
notification_interval 0<br />
notification_period 24x7<br />
notification_options d,r<br />
check_command<br />
check-host-alive<br />
}<br />
Mit dem Wert 0 (Null) der Option register wird <strong>die</strong> Host-Definition als generisch deklariert.<br />
Andere Host-Definition können nun mit der Direktive use von generic-unix-host erben.<br />
define host{<br />
use<br />
generic-unix-host<br />
host_name<br />
tivoli-40<br />
alias Tivoli 40<br />
address 10.115.215.115<br />
}<br />
define host{<br />
use<br />
generic-unix-host<br />
host_name<br />
s390linux07<br />
alias<br />
s390linux07<br />
address 10.113.213.113<br />
}<br />
Sämtliche weiteren Hosts <strong>werden</strong> analog zu <strong>die</strong>sen <strong>bei</strong>den Beispielen angelegt. Die vorhande<br />
hosts.cfg-sample wird verworfen.
- 113 -<br />
7.4.3.9 Modifikationen an misccommands.cfg<br />
Kommandodefinitionen für <strong>die</strong> Notifications und Performance-Processing sind typischer<br />
Inhalt der Datei misccommands.cfg. Unter SunOS 5.8 besteht ein Problem mit dem<br />
vorgegebenen mail-Kommando. Die Option -s für das Subjekt ist nicht mit /usr/bin/mail<br />
kompatibel. Abhilfe schafft hier das Programm /usr/bin/mailx. Die korrekte Zeile für das<br />
Kommando notify-by-email lautet demnach:<br />
define command{<br />
command_name notify-by-email<br />
command_line /usr/bin/printf "%b" "***** Nagios *****\n\n \<br />
Notification Type: $NOTIFICATIONTYPE$\n\n \<br />
Service: $SERVICEDESC$\nHost: $HOSTALIAS$\n \<br />
Address: $HOSTADDRESS$\nState: $SERVICESTATE$\n\n \<br />
Date/Time: $DATETIME$\n\nAdditional Info:\n\n \<br />
$OUTPUT$" | \<br />
/usr/bin/mailx -s "** $NOTIFICATIONTYPE$ alert - \<br />
$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" \<br />
$CONTACTEMAIL$<br />
}<br />
Die Kommandodefinition für host-notify-by-email wird dementsprechend angepasst.<br />
Besteht <strong>die</strong> Anforderung, weitere Macros zu verwenden, können <strong>die</strong>se in der Nagios-<br />
Dokumentation unter dem Abschnitt „Using Macros In Commands“ 1 nachgelesen <strong>werden</strong>. In<br />
misccommands.cfg existieren noch weitere, <strong>bei</strong>spielhafte Objektdefinitionen, <strong>die</strong> jedoch für<br />
<strong>die</strong>ses PoC nicht relevant sind und entfernt <strong>werden</strong> können.<br />
nagios@tivoli-1: mv misccommands.cfg-sample misccommands.cfg<br />
1 Vgl: Galstad Ethan (2003): Nagios Documentation Version 1.0: Using Macros In Commands
- 114 -<br />
7.4.3.10 Modifikationen an nagios.cfg<br />
Zuerst <strong>werden</strong> <strong>die</strong> nicht benutzten cfg_file-Direktiven zum Einbinden von dependencies.cfg<br />
und escalations.cfg auskommentiert.<br />
#cfg_file=/global/nagios/nagios/etc/dependencies.cfg<br />
#cfg_file=/global/nagios/nagios/etc/escalations.cfg<br />
Als nächstes wird <strong>die</strong> Verar<strong>bei</strong>tung von externen Befehlen aktiviert. Erst dadurch lassen sich<br />
über das Webinterface Kommandos an den Nagios Prozess übergeben. Auch für passive<br />
Service-Checks ist <strong>die</strong>se Option notwendig.<br />
check_external_commands=1<br />
Um später <strong>die</strong> Möglichkeit offen zu halten, <strong>die</strong> von Nagios produzierten Logdateien mit<br />
anderen Programm zu verar<strong>bei</strong>ten, empfiehlt es sich, <strong>die</strong> initialen Service-States zu sichern.<br />
Folgende Option ist hierfür relevant.<br />
log_initial_states=1<br />
Damit Nagios nach einem Neustart <strong>die</strong> alten (zuletzt gespeicherten) Service-States aus der<br />
status.sav einliest, wird <strong>die</strong> nachfolgende Option aktiviert. Sie verhindert, das vorhande<br />
Probleme nach dem Neustart fälschlicherweise als neu er<strong>kann</strong>t und eskaliert <strong>werden</strong>.<br />
use_retained_program_state=1<br />
Die Standart-Timeouts von Nagios sind für <strong>die</strong> Praxis zu restriktiv definiert. Um Fehlalarme<br />
zu minimieren, <strong>werden</strong> <strong>die</strong> vorgegebenen Werte verdoppelt.<br />
service_check_timeout=120<br />
host_check_timeout=60<br />
event_handler_timeout=60<br />
notification_timeout=60<br />
ocsp_timeout=10<br />
perfdata_timeout=10<br />
Das Feature Flap Detection muss explizit aktiviert <strong>werden</strong>. Da es sich da<strong>bei</strong> um ein als<br />
experimentell ausgewiesenes Feature handelt, ist es in der Default-Konfiguration deaktiviert.<br />
enable_flap_detection=1
- 115 -<br />
Zuletzt wird noch <strong>die</strong> eMail- und Pager-Adresse des Administrators definiert. Diese lassen<br />
sich über <strong>die</strong> Macros $ADMINEMAIL$ und $ADMINPAGER$ weiterverwenden.<br />
admin_email=sven.schaffranneck@volkswagen.de<br />
admin_pager=sven.schaffranneck@volkswagen.de<br />
Damit sind <strong>die</strong> Modifikationen an nagios.cfg bzw. nagios.cfg-sample abgeschlossen.<br />
nagios@tivoli-1: mv nagios.cfg-sample nagios.cfg<br />
7.4.3.11 Modifikationen an ressource.cfg<br />
Die Datei ressource.cfg <strong>bei</strong>nhaltet <strong>die</strong> frei definierbaren Macros und Datenbank-spezifischen<br />
Konfigurationsoptionen. Letztere <strong>werden</strong> in <strong>die</strong>sem PoC jedoch nicht eingesetzt, da <strong>die</strong> DB-<br />
Unterstützung in zukünftigen Nagios-Versionen ohnehin entfernt wird 1 .<br />
Das vorhandene Macro $USER1$ ist bereits korrekt definiert, <strong>die</strong> weiteren 31 zur Verfügung<br />
stehenden Macrodefinitionen <strong>werden</strong> nicht genutzt.<br />
nagios@tivoli-1: mv ressource.cfg-sample ressource.cfg<br />
7.4.3.12 Modifikationen an services.cfg<br />
Die Konfiguration der Services profitieren stark von festgelegten Templates. Die existierende<br />
services.cfg-sample <strong>bei</strong>nhaltet Beispieldefinitionen, welche in <strong>die</strong>ser Ar<strong>bei</strong>t jedoch neu<br />
definiert <strong>werden</strong>. Damit <strong>kann</strong> <strong>die</strong> Beispiel-Datei verworfen <strong>werden</strong>.<br />
nagios@tivoli-1: rm service.cfg-sample<br />
Zuerst wird ein globales Template-Objekt definiert.<br />
define service {<br />
name<br />
generic-unix<br />
register 0<br />
contact_groups<br />
unix-admins,linux-admins<br />
check_period<br />
24x7<br />
max_check_attempts 3<br />
normal_check_interval 1<br />
retry_check_interval 1<br />
notification_interval 0<br />
notification_period 24x7<br />
notification_options c,r<br />
}<br />
Anzumerken ist hier<strong>bei</strong>, das normal_check_interval sowie retry_check_interval auf den<br />
Wert 1 gesetzt sind. In Kombination mit der Option interval_length=60 aus der nagios.cfg<br />
bedeutet <strong>die</strong>s, das jeder Service-Check jede Minute ausgeführt wird. In der Regel <strong>werden</strong><br />
<strong>die</strong>se zwar nur alle 5 bis 15 Minuten notwendig <strong>werden</strong>. Um jedoch <strong>die</strong> geforderten ~1280<br />
Service-Checks/Minute zu simulieren, wird <strong>die</strong>se sehr kurze Intervallzeit gewählt.<br />
1 Vgl: Galstad, Ethan (2004): Upcoming Version Information
- 116 -<br />
Es folgen <strong>die</strong> einzelnen Servicedefinitionen. Der Aufbau der Objekte sind ähnlich. Wichtig ist<br />
<strong>die</strong> Direktive use, um von generic-unix zu erben.<br />
define service {<br />
name<br />
use<br />
service_description<br />
hostgroup_name<br />
check_command<br />
}<br />
define service {<br />
name<br />
use<br />
service_description<br />
hostgroup_name<br />
check_command<br />
}<br />
define service {<br />
name<br />
use<br />
hostgroup_name<br />
check_command<br />
}<br />
telnet<br />
generic-unix<br />
TCP Telnet<br />
unix-servers<br />
check_tcp_telnet<br />
nrpe_disk_var<br />
generic-unix<br />
Disk /var<br />
unix-nrpe-servers<br />
check_nrpe_args!disk!-w5% -c2% -p/var<br />
nrpe_ssl_disk_var<br />
nrpe_disk_var<br />
unix-nrpe-ssl-servers,linux-nrpe-ssl-servers<br />
check_nrpe_ssl_args!disk!-w5% -c2% -p/var<br />
Die Servicedefinitionen nrpe_ssl_disk_var erbt in <strong>die</strong>sem Fall nicht von generic-unix,<br />
sondern von nrpe_disk_var. Da<strong>bei</strong> <strong>werden</strong> hostgroup_name und check_command überschrieben.<br />
7.4.3.13 Modifikationen an timeperiods.cfg<br />
Die vorgegebenenZeiträume sind für <strong>die</strong>se PoC bereits optimal gewählt, daher <strong>werden</strong> keine<br />
Änderungen an timeperiods.cfg vorgenommen, sondern <strong>die</strong> Beispieldatei übernommen.<br />
nagios@tivoli-1: mv timeperiods.cfg-sample timeperiods.cfg
- 117 -<br />
7.4.4 Start des Nagios Servers<br />
Nachdem <strong>die</strong> Konfiguration abgeschlossen ist, müssen noch <strong>die</strong> Umgebungvariablen für den<br />
Benutzer nagios angepasst <strong>werden</strong>, damit sämtliche notwendigen Bibliotheken und<br />
Programme gefunden <strong>werden</strong>. Dazu sind folgende Zeilen zu ~/.profile hinzuzufügen.<br />
PATH=$PATH:/usr/local/bin:/global/nagios/local/bin<br />
LD_LIBRARY_PATH=/global/nagios/local/lib:/usr/local/lib:/usr/local/ssl/lib<br />
export LD_LIBRARY_PATH<br />
Jetzt <strong>kann</strong> der Nagios Server gestartet <strong>werden</strong>. Zuvor sollte jedoch unbedingt ein Check der<br />
Konfiguration vorgenommen <strong>werden</strong>. Dieser sogenannte „pre-flight check“ lässt sich mit der<br />
Option -v <strong>bei</strong>m Aufruf von Nagios erreichen.<br />
nagios@tivoli-1: # pwd<br />
/global/nagios/nagios/etc
- 118 -<br />
nagios@tivoli-1: # ../bin/nagios -v nagios.cfg<br />
Nagios 1.2<br />
Copyright (c) 1999-2004 Ethan Galstad (nagios@nagios.org)<br />
Last Modified: 02-02-2004<br />
License: GPL<br />
Reading configuration data...<br />
Running pre-flight check on configuration data...<br />
Checking services...<br />
Checked 640 services.<br />
Checking hosts...<br />
Checked 49 hosts.<br />
Checking host groups...<br />
Checked 3 host groups.<br />
Checking contacts...<br />
Warning: Contact 'nagios' is not a member of any contact groups!<br />
Checked 3 contacts.<br />
Checking contact groups...<br />
Checked 2 contact groups.<br />
Checking service escalations...<br />
Checked 0 service escalations.<br />
Checking host group escalations...<br />
Checked 0 host group escalations.<br />
Checking service dependencies...<br />
Checked 0 service dependencies.<br />
Checking host escalations...<br />
Checked 0 host escalations.<br />
Checking host dependencies...<br />
Checked 0 host dependencies.<br />
Checking commands...<br />
Checked 22 commands.<br />
Checking time periods...<br />
Checked 4 time periods.<br />
Checking for circular paths between hosts...<br />
Checking for circular service execution dependencies...<br />
Checking global event handlers...<br />
Checking obsessive compulsive service processor command...<br />
Checking misc settings...<br />
Total Warnings: 1<br />
Total Errors: 0<br />
Things look okay - No serious problems were detected during the pre-flight check<br />
Das der Benutzer nagios keiner Gruppe angehört, ist beabsichtigt. Die aufgetretene Warnung<br />
<strong>kann</strong> somit ignoriert <strong>werden</strong>.
- 119 -<br />
Über das installierte init-Script /etc/init.d/nagios <strong>kann</strong> Nagios gestartet <strong>werden</strong>. Dazu ist es<br />
<strong>die</strong> Berechtigung des Users root erforderlich.<br />
root@tivoli-1: # /etc/init.d/nagios start<br />
Starting network monitor: nagios<br />
PID TTY TIME CMD<br />
3629 ? 0:00 nagios<br />
Nagios wurde erfolgreich gestartet. Ein Blick auf <strong>die</strong> Tactical Overview des Nagios<br />
Webfrontends unter http://tivoli-1:8080/nagios bestätigt <strong>die</strong>ses (Abbildung 25).<br />
Abbildung 25 Nagios Webfrontend: Tacticel Overview nach erstem Start<br />
Quelle: Screenshot
- 120 -<br />
7.5 Vorbereitung der Agenten für <strong>die</strong> remote Hosts<br />
Um <strong>die</strong> remote Hosts einzubinden, <strong>werden</strong> für sämtliche Plattformen kompilierte Binaries der<br />
Plugins, des NRPE-Daemons sowie send_nsca benötigt. Um eine semi-automatische<br />
Softwareverteilung vorzubereiten, <strong>werden</strong> <strong>die</strong> Quellen der einzelnen Plugins und Daemons in<br />
definierte Verzeichnisse kopiert:<br />
/global/nagios/client//<br />
[...]/src<br />
[...]/distrib<br />
[...]/distrib/ssh<br />
Wurzelverzeichnis der Client-Files (im weiteren<br />
Verlauf durch [...] substituiert)<br />
Verzeichnis der Quellen für <strong>die</strong> remote Hosts<br />
Distributionsverzeichnis für <strong>die</strong> remote Hosts<br />
Public Keys (für check_by_ssh)<br />
Die Unterverzeichnisse distrib sowie src unterteilen sich identisch nach Plattformen und<br />
Versionen. Für jede Software existiert ein symbolischer Link latest, welcher auf <strong>die</strong><br />
aktuellste Version zeigt. Der Vorteil <strong>die</strong>ser Struktur liegt in der automatischen Verar<strong>bei</strong>tung.<br />
So lässt sich in dem folgenden Beispiel „SunOS“ automatisch mit uname ermitteln und <strong>die</strong><br />
Version 5.8 mit uname -r. Anhand der symbolischen Links latest wird immer <strong>die</strong> neuste<br />
Version erreicht.<br />
[...]/src/SunOS/5.8/nrpe/nrpe-2.0<br />
[...]/src/SunOS/5.8/nrpe/latest -> nrpe-2.0<br />
[...]/distrib/SunOS/5.8/plugins/nagios-plugins-1.4.0alpha1<br />
[...]/distrib/SunOS/5.8/plugins/latest -> nagios-plugins-1.4.0alpha1
- 121 -<br />
Nachdem <strong>die</strong> benötigte Verzeichnisstruktur angelegt wurde, <strong>werden</strong> <strong>die</strong> Quellen an <strong>die</strong><br />
entsprechenden Orte kopiert. Für <strong>die</strong> Plattform SunOS 5.8 besteht demnach folgende<br />
Verzeichnisstruktur.<br />
SunOS/<br />
SunOS/5.8<br />
SunOS/5.8/src<br />
SunOS/5.8/src/plugins<br />
SunOS/5.8/src/plugins/latest -> nagios-plugins-1.4.0alpha1<br />
SunOS/5.8/src/plugins/nagios-plugins-1.4.0alpha1<br />
SunOS/5.8/src/libmcrypt<br />
SunOS/5.8/src/libmcrypt/latest -> libmcrypt-2.5.7<br />
SunOS/5.8/src/libmcrypt/libmcrypt-2.5.7<br />
SunOS/5.8/src/nrpe<br />
SunOS/5.8/src/nrpe/latest -> nrpe-2.0<br />
SunOS/5.8/src/nrpe/nrpe-2.0<br />
SunOS/5.8/src/nsca<br />
SunOS/5.8/src/nsca/latest -> nsca-2.4<br />
SunOS/5.8/src/nsca/nsca-2.4<br />
SunOS/5.8/distrib<br />
SunOS/5.8/distrib/plugins<br />
SunOS/5.8/distrib/plugins/latest -> nagios-plugins-1.4.0alpha1<br />
SunOS/5.8/distrib/plugins/nagios-plugins-1.4.0alpha1<br />
SunOS/5.8/distrib/nsca<br />
SunOS/5.8/distrib/nsca/latest -> nsca-2.4<br />
SunOS/5.8/distrib/nsca/nsca-2.4<br />
SunOS/5.8/distrib/nrpe<br />
SunOS/5.8/distrib/nrpe/latest -> nrpe-2.0<br />
SunOS/5.8/distrib/nrpe/nrpe-2.0<br />
SunOS/5.8/distrib/lib<br />
Nach dem Kompilieren, welches analog zum Kapitel 7.4.2 geschieht, können <strong>die</strong> einzelnen<br />
Binaries in <strong>die</strong> vorbereiteten Distributionsverzeichnisse kopiert <strong>werden</strong>.<br />
nagios@tivoli-1: # cd plugins/latest/plugins<br />
nagios@tivoli-1: # find ./ -perm 755 -name "check_*" -exec\<br />
cp '{}' /global/nagios/client/SunOS/5.8/distrib/plugins/latest \;<br />
nagios@tivoli-1: # cd /global/nagios/client/SunOS/5.8/src/nrpe/latest<br />
nagios@tivoli-1: # cp nrpe.cfg /global/nagios/client/sunOS/5.8/distrib/nrpe/latest<br />
nagios@tivoli-1: # cp src/nrpe /global/nagios/client/sunOS/5.8/distrib/nrpe/latest
- 122 -<br />
Der NRPE-Daemon wird anhand der Datei nrpe.cfg wie folgt konfiguriert:<br />
server_port=5666<br />
allowed_hosts=127.0.0.1,10.153.253.153,10.101.202.101<br />
nrpe_user=tivadmin<br />
nrpe_group=tivadmin<br />
dont_blame_nrpe=1<br />
debug=0<br />
command_timeout=120<br />
command[check_args]=/opt/Tivoli/nagios/libexec/check_$ARG1$ $ARG2$<br />
Zusätzlich empfiehlt es sich, ein init-Script hinzuzufügen, welches im Anhang auf Seite 143<br />
zu finden ist. Dieses wird als nrpe.sh im NRPE-Distributionsverzeichnis abgelegt.<br />
Die Konfiguration des send_nsca beschränkt sich auf das Festlegen des Passwortes. Die<br />
encryption_method wird belassen.<br />
password=tivnag<br />
encryption_method=1<br />
Daraufhin <strong>kann</strong> auch send_nsca mit seiner Konfiguration ins Distributionsverzeichnis kopiert<br />
<strong>werden</strong>.<br />
nagios@tivoli-1: # cd /global/nagios/client/SunOS/5.8/src/nsca/latest<br />
nagios@tivoli-1: # cp -p send_nsca.cfg\<br />
/global/nagios/client/sunOS/5.8/distrib/nsca/latest<br />
nagios@tivoli-1: # cp -p src/send_nsca\<br />
/global/nagios/client/sunOS/5.8/distrib/nsca/latest<br />
Um den nrpe mit SSL-Unterstützung auch auf remote Hosts nutzen zu können, <strong>die</strong> kein SSH<br />
und SSL installiert haben, <strong>werden</strong> <strong>die</strong> SSL-Libraries mit in das Distributionsverzeichnis<br />
aufgenommen. Zusätzlich <strong>werden</strong> noch von einigen Plugins <strong>die</strong> iconv-Libraries benötigt.<br />
nagios@tivoli-1: # mkdir -p /global/nagios/client/SunOS/5.8/distrib/lib<br />
nagios@tivoli-1: # cp -p /usr/local/ssl/lib/libssl.so.0.9.7\<br />
/usr/local/ssl/lib/libcrypto.so.0.9.7\<br />
/usr/local/lib/libiconv.so.2<br />
/global/nagios/client/SunOS/5.8/distrib/lib
- 123 -<br />
Mit Hilfe des folgenden Installationsscriptes install.sh, welches von der festgelegten<br />
Verzeichnisstruktur gebrauch macht, können <strong>die</strong> Binärpakete später komfortabel auf den<br />
remote Hosts installiert <strong>werden</strong>.<br />
#!/bin/sh<br />
nfs_dir="/net/tivoli-1/global/nagios/client"<br />
nfs_distrib="$nfs_dir/`uname`/`uname -r`/distrib"<br />
local_dir="/opt/Tivoli/nagios"<br />
echo "lege verzeichnisse an"<br />
mkdir -p $local_dir/nrpe<br />
mkdir -p $local_dir/nsca<br />
mkdir -p $local_dir/libexec<br />
mkdir -p $local_dir/lib<br />
echo "setze rechte auf tivadmin:tivadmin"<br />
chown -R tivadmin:tivadmin $local_dir<br />
echo "installiere distribution `uname`/`uname -r`"<br />
su - tivadmin -c "cp $nfs_distrib/nrpe/latest/* $local_dir/nrpe"<br />
su - tivadmin -c "cp $nfs_distrib/nsca/latest/* $local_dir/nsca"<br />
su - tivadmin -c "cp $nfs_distrib/plugins/latest/* $local_dir/libexec"<br />
su - tivadmin -c "cp $nfs_distrib/lib/* $local_dir/lib"<br />
su - tivadmin -c "mkdir .ssh"<br />
su - tivadmin -c "cp $nfs_dir/ssh/* .ssh"<br />
ln -s $local_dir/nrpe/nrpe.sh /etc/rc3.d/S99nrpe<br />
ln -s $local_dir/nrpe/nrpe.sh /etc/rc0.d/K50nrpe<br />
Dieses Script wird, leicht angepasst, auch für <strong>die</strong> anderen Architekturen verwendet und setzt<br />
den Einsatz von NFS 1 voraus.<br />
Als Wurzelverzeichnis wird plattformübergreifend /opt/Tivoli/nagios gewählt. Diese<br />
Bezeichnung hat betriebsinterne Gründe und ist für <strong>die</strong> Funktionalität irrelevant. Es sollte<br />
lediglich darauf geachtet <strong>werden</strong>, auf sämtlichen Hosts das gleiche Verzeichnis zu nutzen.<br />
Dies erleichtert <strong>die</strong> Konfiguration und Pflege enorm. Neben dem gleichlautenden<br />
Verzeichnisnamen wird auch ein gleichlautender Benutzer sowie Gruppe verwendet. In der<br />
Regel ist <strong>die</strong>s der Benutzer nagios mit der Gruppe nagios. In <strong>die</strong>ser Ar<strong>bei</strong>t wird jedoch der<br />
Benutzer tivadmin mit der Gruppe tivadmin genutzt, was wiederum betriebsinterne<br />
Hintergründe hat.<br />
1 Mit dem NFS (Network File System) können Verzeichnisse über das Netzwerk freigegeben <strong>werden</strong>.
- 124 -<br />
7.6 Installation der Agenten auf den remote Hosts<br />
Ein Grossteil der zu überwachenden Server laufen unter dem Betriebssystem Solaris 8. Dieser<br />
Artikel beschreibt <strong>die</strong> notwendigen Prerequirements, <strong>die</strong> Installation sowie Konfiguration der<br />
Überwachungsmechanismen.<br />
7.6.1 Voraussetzung und Vorbereitung<br />
Auf dem remote Host muss anhand folgender Tabelle sichergestellt sein, das <strong>die</strong> notwendigen<br />
Voraussetzungen erfüllt sind (Patch 112438 nur für Solaris 8):<br />
Voraussetzung NRPE (SSL) NRPE NSCA NSCA (XOR) check_by_SSH<br />
Solaris-Patch 112438 X - X - -<br />
SSH 3.7.1p2 - - - - X<br />
Soll der NRPE ohne SSL oder der NSCA ohne mcrypt-Unterstützung verwendet <strong>werden</strong>,<br />
muss der NRPE ohne <strong>die</strong> configure-Option --enable-ssl kompiliert <strong>werden</strong> und das<br />
configure-Script des NSCA darf <strong>die</strong> mcrypt-Library nicht im Pfad finden.<br />
7.6.2 Installation<br />
Wurde <strong>die</strong> Installation gemäß Kapitel 7.5 vorbereitet, können <strong>die</strong> Binaries an <strong>die</strong><br />
entsprechenden Stellen kopiert <strong>werden</strong>. Der verwendete Benutzer tivadmin ist im NIS 1 -<br />
Verzeichnis eingetragen und somit auf vielen der remote Hosts bereits be<strong>kann</strong>t. Sollte ein<br />
Server keinen NIS-Client besitzen, muss <strong>die</strong> Gruppe sowie Benutzer tivadmin angelegt<br />
<strong>werden</strong>:<br />
root@tivoli-40 # groupadd tivadmin<br />
root@tivoli-40 # useradd -g tivadmin -d /opt/Tivoli/nagios tivadmin<br />
1 Network Information Service: Bei NIS handelt es sich um Sun Microsystems YP (yellow pages) client-server<br />
Protokoll für <strong>die</strong> Verteilung von Systemkonfigurationen wie Benutzer und Hostnames.
- 125 -<br />
Anhand des PAP (Programmablaufplan / flow chart) aus Abbildung 26 lässt sich <strong>die</strong><br />
Installation der Agenten nachvollziehen.<br />
Abbildung 26 PAP zur Installation eines remote Hosts<br />
Quelle: Eigene Darstellung<br />
Soll der NRPE-Daemon nach einem Neustart des Servers automatisch mitgestartet <strong>werden</strong>, so<br />
muss das korrespon<strong>die</strong>rende init-Script nrpe.sh als root installiert <strong>werden</strong>.<br />
root@tivoli-40 # ln -s /opt/Tivoli/nagios/nrpe/nrpe.sh /etc/rc3.d/S99nrpe<br />
root@tivoli-40 # ln -s /opt/Tivoli/nagios/nrpe/nrpe.sh /etc/rc0.d/K50nrpe<br />
Hinweis: Nur <strong>bei</strong> manueller Installation notwendig, das Script install.sh erstellt <strong>die</strong> Links<br />
selbstständig.<br />
Nach der Installation <strong>kann</strong> der NRPE gestartet <strong>werden</strong><br />
tivadmin@tivoli-40 # /opt/Tivoli/nagios/nrpe/nrpe.sh start<br />
Starting /opt/Tivoli/nagios/nrpe/nrpe
- 126 -<br />
7.6.3 Einsatz von send_nsca<br />
Der NSCA-Daemon übergibt passive Resultate an den Nagios Prozess. Das Kapitel 4.4.2 hat<br />
sich bereits auführlich mit der Theorie beschäftigt. Um einen Service-Check vom remote Host<br />
über den NSCA zum Nagios Prozess zu übertragen, muss Nagios passive Service-Checks<br />
akzeptieren. Des Weiteren sollte der korrespon<strong>die</strong>rende Service-Check als passiv deklariert<br />
sein.<br />
Für das Proof of Concept wird ein Beispielscript erstellt, welches einen generischen<br />
Longrunner mit der Laufzeit von 360 Sekunden darstellt. Im Anschluss übermittelt es ein<br />
Dummy-Ergebnis mit Datum und Uhrzeit an Nagios.<br />
#!/bin/sh<br />
sleep 360<br />
echo „debian[tab]Longrunner via NSCA[tab]0[tab]OK Übertragung mit NSCA\<br />
erfolgreich am `date`“ | ./send_nsca -H tivoli-1 -c send_nsca.cfg<br />
Dieses wird zyklisch 17 Minuten nach jeder vollen Stunde per cron aufgerufen.<br />
tivadmin@debian # crontab -e<br />
17 * * * * /opt/Tivoli/nagios/nsca/longrunner.sh<br />
Damit der NSCA-Daemon <strong>die</strong>se Nachricht auch akzeptiert, muss <strong>die</strong> IP des Hosts debian in<br />
nsca.cfg be<strong>kann</strong>t gemacht <strong>werden</strong>. Hierzu wird <strong>die</strong> Option allowed_hosts um <strong>die</strong> IP des<br />
remote Hosts debian erweitert:<br />
allowed_hosts=127.0.0.1,10.105.205.105<br />
Der Host debian sowie der Service longrunner müssen in der Nagios-Konfiguration als<br />
Objekte definiert <strong>werden</strong>.<br />
define host{<br />
use<br />
generic-unix-host<br />
host_name<br />
debian<br />
alias<br />
debian<br />
address 10.105.205.105<br />
}<br />
define service {<br />
name<br />
longrunner<br />
use<br />
generic-unix<br />
active_checks_enabled 0<br />
passive_checks_enabled 1<br />
check_freshness 0<br />
service_description Longrunner via NSCA<br />
check_command<br />
check_ping!100.0,20%!500.0,60%<br />
}
- 127 -<br />
Die erfolgreiche Übertragung <strong>kann</strong> anhand der Datei status.log überprüft <strong>werden</strong>.<br />
[1089356332] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;debian;Longrunner via<br />
NSCA;0;OK Übertragung mit NSCA erfolgreich am Fri Jul 9 07:24:50 CEST 2004<br />
Erscheint daraufhin keine Fehlermeldung in der status.log, wurde der Service-Check<br />
erfolgreich verar<strong>bei</strong>tet und ist umgehend im Webinterface einzusehen.<br />
Hinweis: Die Option normal_check_interval (Konfiguration der Services) hat keine<br />
Auswirkung auf <strong>die</strong> Verar<strong>bei</strong>tung von externen bzw. passiven Resultaten.<br />
7.6.4 Einsatz von check_by_ssh<br />
Die Funktionsweise des check_by_ssh lehnt sich eng an check_nrpe an. Als Vorausetzung<br />
muss auf dem remote Host ein SSH-Daemon laufen und der Public-Key des Benutzers nagios<br />
vorliegen. Wurde der remote-Host mit Hilfe des install-Scriptes aufgesetzt, liegen <strong>die</strong> Public-<br />
Keys bereits an der richtigen Stelle (~/.ssh).<br />
Wird nun mit dem check_by_ssh-Plugin eine Verbindung aufgebaut, wird <strong>die</strong> manuelle<br />
Bestätigung des remote Host Keys erwartet. Durch den Host-Key-Check können man-in-themiddle-Attacken<br />
er<strong>kann</strong>t <strong>werden</strong>. Da der Aufwand jedoch zu hoch wäre, für jeden entfernten<br />
Host <strong>die</strong> Host-Keys zu pflegen, wird eine benutzerspezifische<br />
SSH-Konfigurationsdatei mit folgender Direktive angelegt:<br />
nagios@tivoli-1: # cat ~/.ssh/config<br />
StrictHostKeyChecking no<br />
Dadurch wird auf manuelle Bestätigungen <strong>bei</strong>m Check des Host-Keys verzichtet.
- 128 -<br />
Als nächstes wird ein checkcommand definiert, welcher von check_by_ssh Gebrauch macht:<br />
define command {<br />
command_name check_by_ssh_args<br />
command_line $USER1$/check_by_ssh -l tivadmin -t 120\<br />
-H $HOSTADDRESS$ -C '/opt/Tivoli/nagios/libexec/check_$ARG1$ $ARG2$'<br />
}<br />
Ergänzend wird ein Service definiert, welcher den Mountpoint / auf dem Host debian<br />
überwachen soll.<br />
define service {<br />
name<br />
use<br />
host_name<br />
service_description<br />
check_command<br />
}<br />
ssh_disk_root<br />
generic-unix<br />
debian<br />
Disk / by ssh<br />
check_by_ssh_args!disk!-w5% -c2% -p/<br />
Die Datei status.log präsentiert den erfolgreichen Check anhand folgender Zeile:<br />
[1089361446] SERVICE ALERT: debian;Disk / by ssh;WARNING;HARD;3;DISK WARNING<br />
[151860 kB (5%) free on /dev/hda1]<br />
Deutlich zu sehen ist <strong>die</strong> Service-Description und Status, in <strong>die</strong>sem Falle WARNING.
- 129 -<br />
7.7 Besonderheiten und Hinweise für AIX<br />
Für das PoC standen zwei remote Hosts mit AIX 5.1 und 5.2 zur Verfügung. Um <strong>die</strong> Plugins,<br />
NRPE und send_nsca zu kompilieren, <strong>werden</strong> mindestens der gcc und gettext benötigt. Diese<br />
GNU-Tools sind bereits vorkompiliert auf der IBM-Seite<br />
http://www-1.ibm.com/servers/aix/products/aixos/linux/download.html zu finden. Folgende<br />
Versionen <strong>werden</strong> installiert:<br />
root@l11tiv03m # rpm -U gettext-0.10.40-1.aix5.1.ppc.rpm<br />
root@l11tiv03m # rpm -U gcc-2.9.aix51.020209-4.aix5.2.ppc.rpm<br />
Da <strong>die</strong> SSL-Unterstützung des NRPE unter AIX fehlerhaft ist, wird der Daemon ohne SSL<br />
kompiliert.<br />
tivadmin@l11tiv03m # cd /net/tivoli-1/global/nagios/client/AIX/2/src/nrpe/latest<br />
tivadmin@l11tiv03m # ./configure --enable-command-args --disable-ssl\<br />
--with-nrpe-user=tivadmin --with-nrpe-group=tivadmin<br />
tivadmin@l11tiv03m # make<br />
Der NSCA wird aus Performancegründen generell nur mit XOR-Verschlüsselung betrieben.<br />
Daher <strong>kann</strong> der send_nsca ohne mcrypt-Unterstützung kompiliert <strong>werden</strong>.<br />
tivadmin@l11tiv03m # cd /net/tivoli-1/global/nagios/client/AIX/2/src/nsca/latest<br />
tivadmin@l11tiv03m # ./configure --with-nsca-user=tivadmin --with-nsca-grp=tivadmin<br />
tivadmin@l11tiv03m # make<br />
Die Plugins <strong>werden</strong> wie gewohnt mit einem einfachen ./configure und make kompiliert.<br />
Hinweis: Wird das Plugin check_by_ssh eingesetzt, muss der SSH-Daemon installiert sein.
- 130 -<br />
Auf den Seiten 121ff ist das Kopieren der Binaries in <strong>die</strong> Distributionsverzeichnisse für<br />
SunOS beschrieben, was sich weitestgehend auf AIX und weitere Plattformen übetragen lässt.<br />
Das install.sh-Script muss jedoch etwas modifiziert <strong>werden</strong>:<br />
#!/bin/sh<br />
nfs_dir="/net/tivoli-1/global/nagios/client"<br />
nfs_distrib="$nfs_dir/`uname`/`uname -r`/distrib"<br />
local_dir="/opt/Tivoli/nagios"<br />
echo "lege verzeichnisse an"<br />
mkdir -p $local_dir/nrpe<br />
mkdir -p $local_dir/nsca<br />
mkdir -p $local_dir/libexec<br />
echo "setze rechte auf tivadmin:tivadmin"<br />
chown -R tivadmin:tivadmin $local_dir<br />
echo "installiere distribution `uname`/`uname -r`"<br />
su - tivadmin -c "cp $nfs_distrib/nrpe/latest/* $local_dir/nrpe"<br />
su - tivadmin -c "cp $nfs_distrib/nsca/latest/* $local_dir/nsca"<br />
su - tivadmin -c "cp $nfs_distrib/plugins/latest/* $local_dir/libexec"<br />
su - tivadmin -c "mkdir .ssh"<br />
su - tivadmin -c "cp $nfs_dir/ssh/* .ssh"<br />
ln -s $local_dir/nrpe/nrpe.sh /etc/rc.d/rc2.d/S99nrpe
- 131 -<br />
7.8 Besonderheiten und Hinweise für HP-UX<br />
Beim Kompilieren der Plugins auf HP-UX 11.11 sind einige Randbedingungen zu beachten. 1<br />
• Der GCC für HP-UX 11.0 <strong>kann</strong> nicht verwendet <strong>werden</strong>, es wird der GCC für<br />
HP-UX 11.11 PA-RISC benötigt. Dieser ist auf den Seiten von HP zu finden:<br />
http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,4682,<br />
00.html<br />
• Das ursprüngliche make von HP ist veraltet und wird primär zum Kompilieren des HP-<br />
Kernels verwendet. Es empfiehlt sich <strong>die</strong> Verwendung des GNU make 3.8, zu finden unter<br />
http://www.gnu.org/software/make. Andreas Ericsson von OP5 (www.op5.se) gab einen<br />
entscheidenen Hinweis auf <strong>die</strong> Probleme <strong>bei</strong>m Kompilieren:<br />
It's not so much a requirement for GNU make as it is a requirement for<br />
something else than HP's make, which is old, ugly and more than a little<br />
incompetent. 2<br />
• Zusätzlich wird GNU flex (schnelles Text-Analyse-Tool) ab der Version 2.5.4 benötigt.<br />
Dieses ist unter http://www.gnu.org/software/flex/flex.html zu finden.<br />
Das configure-Script für <strong>die</strong> Erkennung des ps-Kommandos aus nagios-plugins-1.4.0alpha1<br />
ist fehlerhaft. Abhilfe schafft <strong>die</strong> Verwendung der CVS-Version<br />
(http://nagiosplug.sourceforge.net/snapshot), in welcher der Fehler behoben wurde (siehe auch<br />
Kapitel 7.2.2.2). 3<br />
Selbst im CVS noch immer fehlerhaft ist das check_swap-Plugin. Dieses muss anhand des<br />
Kapitels 7.2.2.3 ersetzt <strong>werden</strong>. Des Weiteren ist darauf zu achten, dass das Verzeichnis<br />
/usr/sbin im Pfad des Benutzers tivadmin ist, damit das Tool<br />
/usr/sbin/swapinfo vom configure-Script und später von check_swap gefunden <strong>werden</strong> <strong>kann</strong>.<br />
Anhand <strong>die</strong>ser Voraussetzungen können der NRPE (ohne SSL), NSCA (ohne mcrypt) und <strong>die</strong><br />
Nagios Plugins (CVS) analog zum vorhergehenden Kapitel kompiliert sowie installiert<br />
<strong>werden</strong>.<br />
1 Vgl: Mailingliste nagios-users, Message-ID: 8138913, 29.04.2004<br />
2 Vgl: Mailingliste nagios-users, Message-ID: 8138879, 28.04.2004<br />
3 Vgl: Mailingliste nagios-users, Message-ID: 8138988, 30.04.2004
- 132 -<br />
7.9 Besonderheiten und Hinweise für Linux (Intel/s390)<br />
Da Nagios primär für Linux entwickelt wurde, funktionieren <strong>die</strong> Plugins erwartungsgemäß<br />
zuverlässig. Der NRPE <strong>kann</strong> problemlos mit SSL kompiliert und betrieben <strong>werden</strong>. Als<br />
Voraussetzung zum Kompilieren gelten folgende Libraries und Tools:<br />
• OpenSSL 0.9.6 (für <strong>die</strong> SSL-Unterstützung des NRPE - Version 0.9.7 ebenfalls erfolgreich<br />
getestet)<br />
• SSH 2.9.9p2 (notwendig für das check_by_ssh-Plugin - Version 3.6.1p2 ebenfalls<br />
erfolgreich getestet)<br />
• GCC 2.95.3 (GNU C Compiler - zusätzlich Version 3.3.3 erfolgreich getestet)<br />
• GNU make 3.8 (Werkzeug zum Kompilieren - Version 3.79.1 ebenfalls erfolgreich getestet)<br />
Zur Laufzeit <strong>werden</strong> <strong>die</strong> SSL-Libraries und SSH benötigt, sofern der NRPE mit SSL-<br />
Unterstützung kompiliert wurde und check_by_ssh verwendet wird.<br />
Unter SuSE Linux Enterprise Server 7 sollte jedoch aus Gründen der Performance das ps-<br />
Kommando gemäß Kapitel 7.2.2.2 verwendet <strong>werden</strong>. Dies gilt insbesondere für zLinux.<br />
Hinweis: Neuere procps-Versionen (z.B. procps Version 3.1.14) ar<strong>bei</strong>ten bedeutend<br />
performanter, da sie nur <strong>bei</strong> Bedarf auf /proc//statm zugreifen.
- 133 -<br />
7.10 Remote Hosts hinter einer Firewall<br />
Eine Firewall grenzt zwei Netzwerke logisch voneinander ab. Dadurch wird es potenziellen<br />
Angreifern erschwert, von einem Subnet ins Nächste zu gelangen. Es <strong>werden</strong> für <strong>die</strong>se Ar<strong>bei</strong>t<br />
2 unterschiedliche Typen von Firewalls definiert,weiche und harte.<br />
• Weiche Firewalls<br />
• Verbindungen aus dem Intranet in <strong>die</strong> DMZ <strong>werden</strong> generell erlaubt.<br />
• Wenige, festgelegte Verbindungen aus der DMZ ins Intranet <strong>werden</strong> (wenn möglich<br />
über Application-Proxies) erlaubt.<br />
• Bestehende Verbindungen <strong>werden</strong> zugelassen.<br />
• Harte Firewalls<br />
• Wenige, festgelegte Verbindungen aus dem Intranet in <strong>die</strong> DMZ <strong>werden</strong> erlaubt.<br />
• Verbindungen aus der DMZ ins Intranet <strong>werden</strong> nur über Application-Proxies erlaubt.<br />
• Bestehende Verbindungen <strong>werden</strong> zugelassen.<br />
Das hat zur Folge, dass öffentliche Ressourcen von Nagios über weiche Firewalls hinweg<br />
problemlos überwacht <strong>werden</strong> können. Private Ressourcen sind mit Hilfe des NRPE und<br />
check_by_ssh abzufragen. Das Tool send_nsca <strong>kann</strong> nur dann eingesetzt <strong>werden</strong>, wenn dafür<br />
eine explizite Firewallregel definiert wird.<br />
Firewall-Typ NRPE NSCA check_by_ssh öffentliche Ressourcen<br />
weich X (-) X X<br />
hart - - X -<br />
Restrikivere, harte Firewalls, <strong>die</strong> eine SSH-Verbindung aus dem Intranet in <strong>die</strong> DMZ<br />
zulassen, können mit dem check_by_ssh-Plugin überwunden <strong>werden</strong>. Ist auch <strong>die</strong>ses nicht<br />
erlaubt, empfiehlt es sich, einen eigenen Nagios-Server in der DMZ aufzubauen, für den<br />
explizite Firewallregeln definiert <strong>werden</strong>, sodass <strong>die</strong>ser seine Resultate an einen im Intranet<br />
stehenden Nagios-Server weitergeben <strong>kann</strong>.
- 134 -<br />
7.11 Performance<br />
Im Gegensatz zu der bestehenden Lösung IBM/Tivoli Systems and Applications Monitoring<br />
ist <strong>die</strong> Performance kaum davon abhängig, wie viele Events bzw. Fehler innerhalb kurzer Zeit<br />
auftreten, sondern <strong>die</strong> Last steigt proportional zu den überwachten Services/Minute. Dieses<br />
Kapitel wird <strong>die</strong> Machbarkeit und Grenzen einer grossflächigen Installation deutlich machen.<br />
Um festzustellen, wie viele remote Hosts in der Praxis mit einem Nagios-Server überwacht<br />
<strong>werden</strong> können, wird eine identische Installation der 49 zur Verfügung stehenden Hosts<br />
realisiert und mit hohem Check-Intervall abgefragt. Dazu wird auf jedem remote Host ein<br />
NRPE-Daemon und <strong>die</strong> Plugins check_disk, check_swap sowie check_procs installiert.<br />
Da primär <strong>die</strong> privaten Ressourcen überwacht <strong>werden</strong> sollen und der NRPE <strong>die</strong> beste<br />
Performance liefert, <strong>werden</strong> 20 verschiedene, auf NRPE basierende, Services pro Host<br />
definiert. Damit ergeben sich insgesamt 980 Service-Checks:<br />
20 Checks * 49 Hosts = 980 Service-Checks gesamt<br />
Bei einem Check-Intervall von einer Minute, <strong>werden</strong> 980 Service-Checks/Minute ausgeführt,<br />
was den berechneten ~1280 Checks/Minute bereits nahe kommt. Da <strong>die</strong> Last des Nagios-<br />
Servers proportional zu den Service-Checks/Minute steigt, können theoretische Berechnung<br />
für unterschiedliche IT-Umgebungen anhand der ermittelten Ergebnisse durchgeführt <strong>werden</strong>.<br />
Nagios bringt selber eine, wenn auch sehr rudimentäre, Performance-Information mit. Im<br />
Webinterface unter dem Menüpunkt Performance Info lässt sich folgende Tabelle finden.<br />
Abbildung 27 Nagios Performance Info<br />
Quelle: Screenshot, Nagios Webinterface
- 135 -<br />
• Die Check Execution Time entspricht der Zeit, welche <strong>die</strong> letzten Plugins zur Ausführung<br />
benötigten. In <strong>die</strong>sem Beispiel benötigten <strong>die</strong> Plugins im Durchschnitt 0,297 Sekunden,<br />
bevor sie ein Ergebnis lieferten.<br />
• Die Zeile Check Latency sagt etwas darüber aus, um wie viele Sekunden sich <strong>die</strong><br />
Ausführung der Service-Checks verzögert hat. Steigt <strong>die</strong>ser Wert erheblich<br />
(Erfahrungswert: Average > 15sec), lässt sich darauf schliessen, dass der Nagios-Server<br />
überlastet ist und <strong>die</strong> Warteschlage der Service-Checks nicht schnell genug abar<strong>bei</strong>ten<br />
<strong>kann</strong>.<br />
• Die Zeile Percent State Change zeigt <strong>die</strong> Anzahl der Statusänderungen (prozentual). Ein<br />
hoher Wert <strong>kann</strong> auf Netzwerkprobleme hinweisen.<br />
Es empfiehlt sich, das Performanceverhalten von Nagios ständig zu überwachen, um<br />
Probleme und Fehler schnellstmöglich erkennen zu können.<br />
7.11.1 Systemauslastung <strong>bei</strong> 980 Checks/Minute<br />
Um aussagekräftige Messwerte zu erhalten, <strong>werden</strong> <strong>die</strong> CPU-Load und CPU-Usage per<br />
SNMP in 5 Minuten Abständen abgefragt und über das Tool Cacti 1 grafisch aufbereitet.<br />
Folgende Diagramme zur Auslastung der Sun-Fire-280R ergeben sich <strong>bei</strong> 980 Checks/Minute:<br />
Abbildung 28 CPU-Usage <strong>bei</strong> 980 Checks/Minute<br />
Quelle: Screenhost Cacti<br />
Die durchschnittliche Last von 93,86% CPU-Usage macht deutlich, das der Nagios-Server<br />
unter Volllast läuft. Trotz der hohen Auslastung fällt <strong>die</strong> Verzögerung der Service-Checks aus<br />
Abbildung 27 jedoch gering aus.<br />
1 Cacti ist ein Frontend für das Network Monitoring Tool RRDTool und ist unter<br />
http://www.raxnet.net/products/cacti/ zu finden.
- 136 -<br />
Abbildung 29 CPU Load <strong>bei</strong> 980 Checks/Minute<br />
Quelle: Screenhost Cacti<br />
Auch <strong>die</strong> CPU-Load suggeriert eine hohe Last des Nagios-Servers. Durchschnittlich warten<br />
mehr als 5 Prozesse auf Abar<strong>bei</strong>tung. Dies resultiert jedoch primär daher, das der Nagios<br />
Prozess für jeden Service-Check zuerst sich selbst aufspaltet (fork) und danach das Plugin<br />
aufruft. Bei 980 Checks/Minute sind das somit 1960 Prozesse, welche pro Minute gestartet<br />
<strong>werden</strong> müssen. Das sind mehr als 30 Prozesse/Sekunde.<br />
Hinweis: Für Nagios Version 3 ist geplant, <strong>die</strong> Multiprozess-Technik gegen Threads zu<br />
tauschen, was der Performance immens zu gute kommen dürfte. 1<br />
1 Vgl: Ruzicka, Dietmar (2004): Linux-Magazin 03/2004, S. 121
- 137 -<br />
7.11.2 Systemauslastung <strong>bei</strong> 490 Checks/Minute<br />
Da <strong>die</strong> Last proportional zu den Checks/Minute steigt, wird eine Halbierung der CPU-<br />
Auslastung <strong>bei</strong> Halbierung der Checks/Minute erwartet. Diese theoretische Überlegung wird<br />
praktisch überprüft, indem der check_intervall von einer Minute auf zwei erhöht wird.<br />
Abbildung 30 CPU-Usage <strong>bei</strong> 490 Checks/Minute<br />
Quelle: Screenshot Cacti<br />
Die um 11:45 Uhr eingebrochene Auslastung ist deutlich erkennbar. Der Wert von 45.90%<br />
entspricht etwas weniger als <strong>die</strong> Hälfte von den vorherigen 93,86% CPU-Usage. Auch <strong>die</strong><br />
CPU-Load verhält sich nahezu proportional. Nach Halbierung der Checks/Minute sind aus<br />
den 5.69 Prozessen in der run queue nur noch 2.26 Prozesse geworden. Trotz der Load-<br />
Schwankungen lässt sich auch für <strong>die</strong> CPU-Load ein direkt proportionales Verhalten<br />
approximieren.<br />
Abbildung 31 CPU-Load <strong>bei</strong> 490 Checks/Minute<br />
Quelle: Screenshot Cacti
- 138 -<br />
7.11.3 Skalierbarkeit durch Veränderung der Prozessoranzahl<br />
Das <strong>die</strong> von Nagios produzierte Last proportional zu der Anzahl der Checks/Minute steigt,<br />
wurde in den vorangegangenen Kapiteln deutlich. Wird im Laufe einer produktiven Nagios-<br />
Installation <strong>die</strong> Anzahl der zu überwachenden Hosts größer, muss eventuell <strong>die</strong> Server-<br />
Hardware erweitert <strong>werden</strong>, um <strong>die</strong> auftretende Last bewältigen zu können. Aufgrund der<br />
nahezu liniearen Skalierbarkeit von Nagios, erhöht sich <strong>die</strong> Anzahl der Checks/Minute<br />
proportional zur Anzahl der Prozessoren.<br />
Um <strong>die</strong>se These praktisch zu belegen, wird <strong>die</strong> Nagios-Konfiguration aus Kapitel 7.11.2<br />
verwendet, jedoch einer der <strong>bei</strong>den UltraSPARC Prozessoren deaktiviert.<br />
root@tivoli-34 # psradm -f 0<br />
root@tivoli-34 # psrinfo<br />
0 on-line since 05/17/04 11:35:48<br />
1 off-line since 07/08/04 10:53:53<br />
Das Deaktivieren eines Prozessors um 16:00 Uhr lässt sich in der Abbildung 32 deutlich<br />
erkennen. Wie erwartet hat sich <strong>die</strong> Last auf dem Server verdoppelt.<br />
Abbildung 32 CPU-Load <strong>bei</strong> 490 Checks/Minute (1 Prozessor)<br />
Quelle: Screenshot Cacti
- 139 -<br />
Auch <strong>die</strong> CPU-Load verhält sich proportional zur der Anzahl der Prozessoren. Wenn nur noch<br />
<strong>die</strong> Hälfte der Prozessoren zur Verfügung stehen, müssen <strong>die</strong> übrig gebliebenen Prozessoren<br />
<strong>die</strong> doppelte Anzahl der Prozesse bear<strong>bei</strong>ten.<br />
Abbildung 33 CPU-Load <strong>bei</strong> 490 Checks/Minute (1 Prozessor)<br />
Quelle: Screenshot Cacti<br />
Die gezeigten Abbildungen belegen <strong>die</strong> nahezu lineare Skalierbarkeit von Nagios, was den<br />
Umfang der auftretenden Kosten für <strong>die</strong> Hardware kalkulierbar macht; ein wesentlicher<br />
Vorteil gegenüber einer dezentralen Architektur.
8. Ergebnis<br />
- 140 -<br />
Das Proof of Concept macht deutlich, dass Nagios <strong>die</strong> gestellten Anforderungen erfüllt und<br />
sich insbesondere in Enterprise-Umgebungen durch hohe Skalierbarkeit und praxisnahe<br />
Features auszeichnet. Die Schwächen in der Unterstützung der Plattformen AIX und HP-UX<br />
<strong>werden</strong> durch den offenen Quelltext und das hohe Engagement der Entwickler kompensiert.<br />
Für den Einsatz von Nagios <strong>bei</strong> Volkswagen stellen sich folgende Argumente in den<br />
Vordergrund:<br />
• Erfüllt <strong>die</strong> gestellten Anforderungen des heterogenen Server-Monitorings<br />
• Kostengünstiges und herstellerunabhängiges Produkt<br />
• Flexibilität und einfache Erweiterbarkeit durch offene Standards und Schnittstellen<br />
• Direkte Ansprechpartner, um in den Entwicklungsprozess der Software einzugreifen<br />
• Schnelle Fehlerkorrektur durch freien Zugriff auf den Quellcode (GPL 1 )<br />
9. Ausblick<br />
Derzeit konzentriert sich <strong>die</strong> Entwicklung von Nagios auf das kommende Release 2.0. Neben<br />
der Möglichkeit, Services in Gruppen zusammenzufassen, gibt es sehr viele<br />
Detailverbesserungen. Dazu gehören unter anderem <strong>die</strong> Auswertung von regulären<br />
Ausdrücken 2 in Objektdefinitionen sowie passive Host-Checks, was dem Distributed<br />
Monitoring zugute kommt. Für <strong>die</strong> Version 3.0 ist es geplant, <strong>die</strong> Service-Checks unter<br />
einzelnen Threads zu starten, anstatt fork zu nutzen. Des Weiteren denkt Galstad darüber<br />
nach, <strong>die</strong> Logfiles im XML-Format abzulegen.<br />
1 Die GNU General Public Licenses (GPL) erlaubt legales kopieren, verbreiten und/oder Veränderungen der<br />
Quellen. Einzusehen unter http://www.gnu.org/copyleft/gpl.html<br />
2 Die Linuxfibel (http://www.linuxfibel.de/regex.htm) beschreibt reguläre Audrücke wie folgt: Ein regulärer<br />
Ausdruck ist nichts anderes als ein Suchmuster, um übereinstimmende Muster in einer Eingabe zu finden.
- 141 -<br />
Anhang<br />
eMail-Korrespondenz: Schmitz, Martin, 03.05.2004<br />
Hallo,<br />
nein, dazu gibt es momentan keine Pläne.<br />
Da ich noch nie mit embedded Perl gear<strong>bei</strong>tet habe, habe ich auch keine<br />
Vorstellung davon, wie lange eine Anpassung dauern würde.<br />
--<br />
Mit freundlichem Gruß<br />
Martin Schmitz<br />
On Monday 03 May 2004 10:14, you wrote:<br />
> Hallo,<br />
> ich evaluiere seit > 2 Monaten Nagios und bin auf Euer Eventlog-Addon<br />
> gestossen. Leider bekomm ich es nicht mit embedded Perl Nagios zum Laufen<br />
> (no output). Ist geplant (oder überhaupt möglich) das Perl-Script<br />
> ePN-kompatibel zu machen?><br />
> Mit freundlichen Grüssen,<br />
> Sven Schaffranneck<br />
> K-DOI-5/4<br />
> Volkswagen AG<br />
> Brieffach 1883<br />
> 38436 Wolfsburg><br />
> Telefon: +49 (5361) 9-3 88 58<br />
> http://www.volkswagen.de
- 142 -<br />
eMail-Korrespondenz: Voon, Ton, 30.04.2004<br />
Hi Ton,<br />
> I<br />
> have found a bug in the configure script for ps -el (AIX 4.1<br />
> style) where it<br />
> is expecting the wrong number of columns. Can you try the snapshot at<br />
> http://nagiosplug.sourceforge.net/snapshot when it next<br />
> updates and let me<br />
> know what the configure output is for ps. I am guessing it<br />
> will say ps -ef (AIX 4.1).<br />
Hit. Now it works. Thanks!<br />
One problem anymore, but i'll make a new thread.<br />
Greets Sven
- 143 -<br />
Quellcode: Init-Script /opt/Tivoli/nagios/nrpe/nrpe.sh<br />
#!/bin/sh<br />
LD_LIBRARY_PATH=/opt/Tivoli/nagios/lib<br />
export LD_LIBRARY_PATH<br />
PROG="/opt/Tivoli/nagios/nrpe/nrpe"<br />
CONF="/opt/Tivoli/nagios/nrpe/nrpe.cfg"<br />
OPTION="-d"<br />
case "$1" in<br />
start)<br />
echo "Starting $PROG"<br />
$PROG -c $CONF $OPTION<br />
;;<br />
stop)<br />
PID=`ps -A|awk '($4 == "nrpe")||($4 == "nrpe_ssl"){print $1}'`<br />
if [ ! "$PID" ]; then<br />
echo "no running NRPE Daemon found!"<br />
else<br />
echo "Stopping PID: $PID"<br />
kill $PID<br />
fi<br />
;;<br />
restart)<br />
$0 stop<br />
$0 start<br />
;;<br />
*)<br />
echo "try $0 ||";<br />
;;<br />
esac<br />
exit 0
- 144 -<br />
Quellcode: Init-Script /etc/init.d/nsca<br />
#!/bin/sh<br />
LD_LIBRARY_PATH=/global/nagios/local/lib<br />
export LD_LIBRARY_PATH<br />
PROG="/global/nagios/nsca/nsca"<br />
CONF="/global/nagios/nsca/nsca.cfg"<br />
case "$1" in<br />
start)<br />
echo "Starting $PROG"<br />
$PROG -c $CONF $OPTION<br />
;;<br />
stop)<br />
PID=`ps -A|awk '($4 == "nsca"){print $1}'`<br />
if [ ! "$PID" ]; then<br />
echo "no running NSCA Daemon found!"<br />
else<br />
echo "Stopping PID: $PID"<br />
kill $PID<br />
fi<br />
;;<br />
restart)<br />
$0 stop<br />
$0 start<br />
;;<br />
*)<br />
echo "Try $0 start || stop || restart";<br />
;;<br />
esac<br />
exit 0
- 145 -<br />
Quellcode: Init-Script /etc/init.d/nag-apache<br />
# BEGIN<br />
APACHE_HOME=/global/nagios/apache<br />
CONF_FILE=/global/nagios/apache/conf/httpd.conf<br />
PIDFILE=/global/nagios/apache/logs/httpd.pid<br />
if [ ! -f ${CONF_FILE} ]; then<br />
exit 0<br />
fi<br />
case "$1" in<br />
start)<br />
/bin/rm -f ${PIDFILE}<br />
cmdtext="starting"<br />
;;<br />
restart)<br />
cmdtext="restarting"<br />
;;<br />
stop)<br />
cmdtext="stopping"<br />
;;<br />
*)<br />
echo "Usage: $0 {start|stop|restart}"<br />
exit 1<br />
;;<br />
esac<br />
echo "httpd $cmdtext."<br />
status=`${APACHE_HOME}/bin/apachectl $1 2>&1`<br />
if [ $? != 0 ]; then<br />
echo "$status"<br />
exit 1<br />
fi<br />
exit 0<br />
# EOF
- 146 -<br />
Quellcode: check_swap.c für HP-UX-Plattformen<br />
/****************************************************************************<br />
*<br />
* Program: Swap space plugin for Nagios<br />
* License: GPL<br />
*<br />
* License Information:<br />
*<br />
* This program is free software; you can redistribute it and/or<br />
* modify it under the terms of the GNU General Public License as<br />
* published by the Free Software Foundation; either version 2 of the<br />
* License, or (at your option) any later version.<br />
*<br />
* This program is distributed in the hope that it will be useful,<br />
* but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br />
* GNU General Public License for more details.<br />
*<br />
* You should have received a copy of the GNU General Public License<br />
* along with this program; if not, write to the Free Software<br />
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.<br />
*<br />
* Copyright (c) 2000 Karl DeBisschop<br />
* (kdebisschop@users.sourceforge.net)<br />
*<br />
* $Id: check_swap.c,v 1.24 2003/11/12 05:37:19 kdebisschop Exp $<br />
*<br />
****************************************************************************/<br />
#include "common.h"<br />
#include "popen.h"<br />
#include "utils.h"<br />
const char *progname = "check_swap";<br />
const char *revision = "$Revision: 1.24 $";<br />
const char *copyright = "2000-2003";<br />
const char *email = "nagiosplug-devel@lists.sourceforge.net";<br />
int check_swap (int usp, long unsigned int free_swap);<br />
int process_arguments (int argc, char **argv);<br />
int validate_arguments (void);<br />
void print_usage (void);<br />
void print_help (void);<br />
int warn_percent = 0;<br />
int crit_percent = 0;<br />
long unsigned int warn_size = 0;<br />
long unsigned int crit_size = 0;<br />
int verbose;<br />
int allswaps;<br />
int<br />
main (int argc, char **argv)<br />
{<br />
int percent_used, percent;<br />
long unsigned int total_swap = 0, used_swap = 0, free_swap = 0;<br />
long unsigned int dsktotal, dskused, dskfree;<br />
int result = STATE_OK;<br />
char input_buffer[MAX_INPUT_BUFFER];<br />
char *perf;<br />
#ifdef HAVE_PROC_MEMINFO<br />
FILE *fp;<br />
#else<br />
# ifdef HAVE_SWAP<br />
int conv_factor; /* Convert to MBs */<br />
char *temp_buffer;<br />
char *swap_command;<br />
char *swap_format;<br />
char total_str[32];<br />
# endif<br />
#endif<br />
char str[32];
- 147 -<br />
char *status;<br />
setlocale (LC_ALL, "");<br />
bindtextdomain (PACKAGE, LOCALEDIR);<br />
textdomain (PACKAGE);<br />
status = strdup("");<br />
perf = strdup("");<br />
if (process_arguments (argc, argv) != OK)<br />
usage (_("Invalid command arguments supplied\n"));<br />
#ifdef HAVE_PROC_MEMINFO<br />
fp = fopen (PROC_MEMINFO, "r");<br />
while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, fp)) {<br />
if (sscanf (input_buffer, " %s %lu %lu %lu", str, &dsktotal, &dskused,<br />
&dskfree) == 4 &&<br />
strstr (str, "Swap")) {<br />
dsktotal = dsktotal / 1048576;<br />
dskused = dskused / 1048576;<br />
dskfree = dskfree / 1048576;<br />
total_swap += dsktotal;<br />
used_swap += dskused;<br />
free_swap += dskfree;<br />
if (allswaps) {<br />
percent = 100 * (((double) dskused) / ((double) dsktotal));<br />
result = max_state (result, check_swap (percent, dskfree));<br />
if (verbose)<br />
asprintf (&status, "%s [%lu (%d%%)]", status, dskfree,<br />
100 - percent);<br />
}<br />
}<br />
}<br />
fclose(fp);<br />
#else<br />
# ifdef HAVE_SWAP<br />
asprintf(&swap_command, "%s", SWAP_COMMAND);<br />
asprintf(&swap_format, "%s", SWAP_FORMAT);<br />
conv_factor = SWAP_CONVERSION;<br />
/* These override the command used if a summary (and thus ! allswaps) is\<br />
required. The summary flag returns more accurate information about<br />
swap usage on these OSes */<br />
# ifdef _AIX<br />
if (!allswaps) {<br />
asprintf(&swap_command, "%s", "/usr/sbin/lsps -s");<br />
asprintf(&swap_format, "%s", "%d%*s %d");<br />
conv_factor = 1;<br />
}<br />
# else<br />
# ifdef sun<br />
if (!allswaps) {<br />
asprintf(&swap_command, "%s", "/usr/sbin/swap -s");<br />
asprintf(&swap_format, "%s", "%*s %*dk %*s %*s + %*dk %*s = %dk<br />
%*s %dk %*s");<br />
conv_factor = 2048;<br />
}<br />
# else<br />
# ifdef __hpux<br />
asprintf(&swap_format, "%s", "%s %d %d %d %*d");<br />
conv_factor = 1;<br />
if (allswaps) {<br />
asprintf(&swap_command, "%s", "/usr/sbin/swapinfo -mt");<br />
} else {<br />
asprintf(&swap_command, "%s", "/usr/sbin/swapinfo -mtdf");<br />
}<br />
# endif<br />
# endif<br />
# endif<br />
if (verbose >= 2)<br />
printf (_("Command: %s\n"), swap_command);<br />
if (verbose >= 3)
- 148 -<br />
printf (_("Format: %s\n"), swap_format);<br />
child_process = spopen (swap_command);<br />
if (child_process == NULL) {<br />
printf (_("Could not open pipe: %s\n"), swap_command);<br />
return STATE_UNKNOWN;<br />
}<br />
child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r");<br />
if (child_stderr == NULL)<br />
printf (_("Could not open stderr for %s\n"), swap_command);<br />
sprintf (str, "%s", "");<br />
/* read 1st line */<br />
fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process);<br />
if (strcmp (swap_format, "") == 0) {<br />
temp_buffer = strtok (input_buffer, " \n");<br />
while (temp_buffer) {<br />
if (strstr (temp_buffer, "blocks"))<br />
sprintf (str, "%s %s", str, "%f");<br />
else if (strstr (temp_buffer, "dskfree"))<br />
sprintf (str, "%s %s", str, "%f");<br />
else<br />
sprintf (str, "%s %s", str, "%*s");<br />
temp_buffer = strtok (NULL, " \n");<br />
}<br />
}<br />
/* If different swap command is used for summary switch, need to read format<br />
differently */<br />
# ifdef _AIX<br />
if (!allswaps) {<br />
fgets(input_buffer, MAX_INPUT_BUFFER - 1, child_process); /* Ignore first<br />
line */<br />
sscanf (input_buffer, swap_format, &total_swap, &used_swap);<br />
free_swap = total_swap * (100 - used_swap) /100;<br />
used_swap = total_swap - free_swap;<br />
if (verbose >= 3)<br />
printf (_("total=%d, used=%d, free=%d\n"), total_swap, used_swap,<br />
free_swap);<br />
} else {<br />
# else<br />
# ifdef sun<br />
if (!allswaps) {<br />
sscanf (input_buffer, swap_format, &used_swap, &free_swap);<br />
used_swap = used_swap / 1024;<br />
free_swap = free_swap / 1024;<br />
total_swap = used_swap + free_swap;<br />
} else {<br />
# else<br />
# ifdef __hpux<br />
fgets(input_buffer, MAX_INPUT_BUFFER - 1, child_process);<br />
sscanf (input_buffer, swap_format, total_str, &total_swap, &used_swap,<br />
&free_swap);<br />
while (strcmp(total_str, "total")) {<br />
fgets(input_buffer, MAX_INPUT_BUFFER - 1, child_process);<br />
sscanf (input_buffer, swap_format, total_str, &total_swap, &used_swap,<br />
&free_swap);<br />
}<br />
total_swap, used_swap, free_swap);<br />
# endif<br />
# endif<br />
# endif<br />
while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {<br />
sscanf (input_buffer, swap_format, &dsktotal, &dskfree);<br />
dsktotal = dsktotal / conv_factor;<br />
/* AIX lists percent used, so this converts to dskfree in MBs */<br />
# ifdef _AIX<br />
dskfree = dsktotal * (100 - dskfree) / 100;<br />
# else<br />
dskfree = dskfree / conv_factor;<br />
# endif
- 149 -<br />
if (verbose >= 3)<br />
printf (_("total=%d, free=%d\n"), dsktotal, dskfree);<br />
dskused = dsktotal - dskfree;<br />
total_swap += dsktotal;<br />
used_swap += dskused;<br />
free_swap += dskfree;<br />
if (allswaps) {<br />
percent = 100 * (((double) dskused) / ((double) dsktotal));<br />
result = max_state (result, check_swap (percent, dskfree));<br />
if (verbose)<br />
asprintf (&status, "%s [%lu (%d%%)]", status, dskfree, 100 - percent);<br />
}<br />
}<br />
# ifdef _AIX<br />
}<br />
# else<br />
# ifdef sun<br />
}<br />
# endif<br />
# endif<br />
/* If we get anything on STDERR, at least set warning */<br />
while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr))<br />
result = max_state (result, STATE_WARNING);<br />
/* close stderr */<br />
(void) fclose (child_stderr);<br />
/* close the pipe */<br />
if (spclose (child_process))<br />
result = max_state (result, STATE_WARNING);<br />
# endif /* HAVE_SWAP */<br />
#endif /* HAVE_PROC_MEMINFO */<br />
}<br />
percent_used = 100 * ((double) used_swap) / ((double) total_swap);<br />
result = max_state (result, check_swap (percent_used, free_swap));<br />
asprintf (&status, _(" %d%% free (%lu MB out of %lu MB)%s"),<br />
(100 - percent_used), free_swap, total_swap, status);<br />
asprintf (&perf, "%s", perfdata ("swap", (long) free_swap, "MB",<br />
TRUE, (long) max (warn_size/1024, warn_percent/100.0*total_swap),<br />
TRUE, (long) max (crit_size/1024, crit_percent/100.0*total_swap),<br />
TRUE, 0,<br />
TRUE, (long) total_swap));<br />
printf ("SWAP %s:%s |%s\n", state_text (result), status, perf);<br />
return result;<br />
int<br />
check_swap (int usp, long unsigned int free_swap)<br />
{<br />
int result = STATE_UNKNOWN;<br />
free_swap = free_swap * 1024; /* Convert back to bytes as warn and crit<br />
specified in bytes */<br />
if (usp >= 0 && crit_percent != 0 && usp >= (100.0 - crit_percent))<br />
result = STATE_CRITICAL;<br />
else if (crit_size > 0 && free_swap = 0 && warn_percent != 0 && usp >= (100.0 - warn_percent))<br />
result = STATE_WARNING;<br />
else if (warn_size > 0 && free_swap = 0.0)<br />
result = STATE_OK;<br />
return result;<br />
}<br />
/* process command-line arguments */<br />
int<br />
process_arguments (int argc, char **argv)<br />
{
- 150 -<br />
int c = 0; /* option character */<br />
int option = 0;<br />
static struct option longopts[] = {<br />
{"warning", required_argument, 0, 'w'},<br />
{"critical", required_argument, 0, 'c'},<br />
{"allswaps", no_argument, 0, 'a'},<br />
{"verbose", no_argument, 0, 'v'},<br />
{"version", no_argument, 0, 'V'},<br />
{"help", no_argument, 0, 'h'},<br />
{0, 0, 0, 0}<br />
};<br />
if (argc < 2)<br />
return ERROR;<br />
while (1) {<br />
c = getopt_long (argc, argv, "+?Vvhac:w:", longopts, &option);<br />
if (c == -1 || c == EOF)<br />
break;<br />
switch (c) {<br />
case 'w': /* warning size threshold */<br />
if (is_intnonneg (optarg)) {<br />
warn_size = atoi (optarg);<br />
break;<br />
}<br />
else if (strstr (optarg, ",") && strstr (optarg, "%") &&<br />
sscanf (optarg, "%lu,%d%%", &warn_size, &warn_percent) == 2)<br />
{ break; }<br />
else if (strstr (optarg, "%") &&<br />
sscanf (optarg, "%d%%", &warn_percent) == 1) {<br />
break; }<br />
else {<br />
usage (_("Warning threshold must be integer or percentage!\n"));<br />
}<br />
case 'c': /* critical size threshold */<br />
if (is_intnonneg (optarg)) {<br />
crit_size = atoi (optarg);<br />
break;<br />
}<br />
else if (strstr (optarg, ",") && strstr (optarg, "%") &&<br />
sscanf (optarg, "%lu,%d%%", &crit_size, &crit_percent) == 2)<br />
{ break; }<br />
else if (strstr (optarg, "%") &&<br />
sscanf (optarg, "%d%%", &crit_percent) == 1)<br />
{ break; }<br />
else {<br />
usage (_("Critical threshold must be integer or percentage!\n"));<br />
}<br />
case 'a': /* all swap */<br />
allswaps = TRUE;<br />
break;<br />
case 'v': /* verbose */<br />
verbose++;<br />
break;<br />
case 'V': /* version */<br />
print_revision (progname, revision);<br />
exit (STATE_OK);<br />
case 'h': /* help */<br />
print_help ();<br />
exit (STATE_OK);<br />
case '?': /* help */<br />
usage (_("Invalid argument\n"));<br />
}<br />
}<br />
c = optind;<br />
if (c == argc)<br />
return validate_arguments ();<br />
if (warn_percent == 0 && is_intnonneg (argv[c]))<br />
warn_percent = atoi (argv[c++]);<br />
if (c == argc)
- 151 -<br />
return validate_arguments ();<br />
if (crit_percent == 0 && is_intnonneg (argv[c]))<br />
crit_percent = atoi (argv[c++]);<br />
if (c == argc)<br />
return validate_arguments ();<br />
if (warn_size == 0 && is_intnonneg (argv[c]))<br />
warn_size = atoi (argv[c++]);<br />
if (c == argc)<br />
return validate_arguments ();<br />
if (crit_size == 0 && is_intnonneg (argv[c]))<br />
crit_size = atoi (argv[c++]);<br />
}<br />
return validate_arguments ();<br />
int<br />
validate_arguments (void)<br />
{<br />
if (warn_percent == 0 && crit_percent == 0 && warn_size == 0<br />
&& crit_size == 0) {<br />
return ERROR;<br />
}<br />
else if (warn_percent < crit_percent) {<br />
usage<br />
(_("Warning percentage should be more than critical percentage\n"));<br />
}<br />
else if (warn_size < crit_size) {<br />
usage<br />
(_("Warning free space should be more than critical free space\n"));<br />
}<br />
return OK;<br />
}
- 152 -<br />
void<br />
print_help (void)<br />
{<br />
print_revision (progname, revision);<br />
printf (_(COPYRIGHT), copyright, email);<br />
printf (_("Check swap space on local server.\n\n"));<br />
print_usage ();<br />
printf (_(UT_HELP_VRSN));<br />
printf (_("\n\<br />
-w, --warning=INTEGER\n\<br />
Exit with WARNING status if less than INTEGER bytes of swap space are<br />
free\n\<br />
-w, --warning=PERCENT%%\n\<br />
Exit with WARNING status if less than PERCENT of swap space has been<br />
used\n\<br />
-c, --critical=INTEGER\n\<br />
Exit with CRITICAL status if less than INTEGER bytes of swap space<br />
are free\n\<br />
-c, --critical=PERCENT%%\n\<br />
Exit with CRITCAL status if less than PERCENT of swap space has been<br />
used\n\<br />
-a, --allswaps\n\<br />
Conduct comparisons for all swap partitions, one by one\n"));<br />
printf (_("\n\<br />
On Solaris, if -a specified, uses swap -l, otherwise uses swap -s.\n\<br />
Will be discrepencies because swap -s counts allocated swap and<br />
includes\n\ real memory\n"));<br />
printf (_("\n\<br />
On AIX, if -a is specified, uses lsps -a, otherwise uses lsps -s.\n"));<br />
printf (_(UT_SUPPORT));<br />
}<br />
void<br />
print_usage (void)<br />
{<br />
printf (_("Usage:\n\<br />
%s [-a] -w %% -c %%\n\<br />
%s [-a] -w -c \n\<br />
%s (-h | --help) for detailed help\n\<br />
%s (-V | --version) for version information\n"),<br />
progname, progname, progname, progname);<br />
}
- 153 -<br />
Quellcode: ps.pl für zLinux (S/390) Plattformen<br />
#!/usr/bin/perl<br />
#############################################################################<br />
# ps Kommando Ersatz fuer Nagios auf zOS #<br />
#############################################################################<br />
# Sven Schaffranneck (sven.schaffranneck@volkswagen.de) #<br />
# Release 2004.06.10 #<br />
#############################################################################<br />
# Todo: #<br />
# ----- #<br />
# - Prozentuale CPU-Auslastung pro Prozess berechnen. Derzeit wird nur #<br />
# Dummy-Wert von 99.9% ausgegeben #<br />
#############################################################################<br />
# Intention: #<br />
# ---------- #<br />
# Das ps-Kommando auf SuSE SLES7 (zLinux) greift <strong>bei</strong> jedem Aufruf auf #<br />
# /proc/pid/statm zu, was eine hohe Systemlast erzeugt. #<br />
# Dieses Verhalten ist <strong>bei</strong> einer Umgebung mit shared-Ressourcen #<br />
# problematisch und soll umgangen <strong>werden</strong>. #<br />
# Nachzubauendes Kommando: #<br />
# /bin/ps -weo 'stat uid ppid vsz rss pcpu comm args' #<br />
#############################################################################<br />
#STAT UID PPID VSZ RSS %CPU COMMAND COMMAND<br />
format STDOUT=@
- 154 -<br />
@uidhash{$i}=@tmp[2];<br />
} else {<br />
if ($line =~ /^PPid:/ ) {<br />
@tmp=split(/ +/, $line );<br />
@ppidhash{$i}=@tmp[1];<br />
} else {<br />
if ($line =~ /^VmSize:/ ) {<br />
@tmp=split(/ +/, $line );<br />
@vszhash{$i}=@tmp[1];<br />
} else {<br />
if ($line =~ /^VmRSS:/ ) {<br />
@tmp=split(/ +/, $line );<br />
@rsshash{$i}=@tmp[1];<br />
} else {<br />
if ($line =~ /^Name:/ ) {<br />
@tmp=split(/ +/, $line );<br />
@namehash{$i}=@tmp[1];<br />
};<br />
};<br />
};<br />
};<br />
};<br />
};<br />
};<br />
close(STATUS);<br />
# Auslesen der langen Commandline mit Argumenten<br />
if ( open(CMDLINE, "
- 155 -<br />
}<br />
if ( @rsshash{$i} == "" ) {<br />
@rsshash{$i} = 0;<br />
}<br />
# Pid ist zwischendurch gestorben, in @alivepidhash merken.<br />
} else {<br />
if ($debug) { printf "Pid: $i existiert nicht mehr\n" };<br />
@alivepidhash{$i}=0;<br />
};<br />
};<br />
# Ausgabe wie /bin/ps -weo 'stat uid ppid vsz rss pcpu comm args'<br />
# todo: (sortierung ist anders, nach was sortiert ps??)<br />
print "STAT UID PPID VSZ RSS %CPU COMMAND<br />
COMMAND\n";<br />
foreach $pid (@pids) {<br />
if ( @alivepidhash{$pid} ) {<br />
write;<br />
}<br />
}
- 156 -<br />
Literaturverzeichnis<br />
• Galstad, Ethan (2002): Sample NSCA Client Config File, [On-line], Available:<br />
http://cvs.sourceforge.net/viewcvs.py/nagios/nsca/send_nsca.cfg,<br />
Abfragedatum: 26.05.2004<br />
• Galstad, Ethan (2002), Sample NSCA Daemon Config File, [On-line], Available:<br />
http://cvs.sourceforge.net/viewcvs.py/nagios/nsca/nsca.cfg,<br />
Abfragedatum: 25.05.2004<br />
• Galstad Ethan (2003): Nagios Documentation Version 1.0, [On-line], Available:<br />
http://nagios.sourceforge.net/docs/1_0/distributed.html, Abfragedatum: 07.06.2004<br />
• Galstad Ethan (2004): Upcoming Version Information, [On-line], Available:<br />
http://www.nagios.org/upcoming.php, Abfragedatum: 02.07.2004<br />
• iETSolutions GmbH (2003): ITIL - De-Facto-Standard für Service Management,<br />
München, S. 2-6<br />
• Inverso, John (2003): IBM Corporation Tivoli Systems Management Software,<br />
Gartner Research<br />
• MASTERS Consulting GmbH (2004): Schulung ITIL Foundation, Release 3.04,<br />
Hamburg, S. 4ff<br />
• Mailingliste nagios-users, Message-ID: 8138879, 28.04.2004, [On-line], Available:<br />
https://sourceforge.net/mailarchive/message.php?msg_id=8138879,<br />
Abfragedatum: 08.07.2004<br />
• Mailingliste nagios-users, Message-ID: 8138913, 29.04.2004, [On-line], Available:<br />
https://sourceforge.net/mailarchive/message.php?msg_id=8138913,<br />
Abfragedatum: 08.07.2004<br />
• Mailingliste nagios-users: Message-ID 8138925, 29.04.2004, [On-line], Available:<br />
https://sourceforge.net/mailarchive/message.php?msg_id=8138925,<br />
Abfragedatum: 25.06.2004<br />
• Mailingliste nagios-users, Message-ID: 8138988, 30.04.2004, [On-line], Available:<br />
https://sourceforge.net/mailarchive/message.php?msg_id=8138988,<br />
Abfragedatum: 08.07.2004<br />
• Meister, Stefan (2001): Großflächiger Einsatz von Linux in einem Unternehmen,<br />
FH-Wolfenbüttel
- 157 -<br />
• Nagios Plugin Development Team (2003): check_by_ssh detailed help, [On-line],<br />
Available:<br />
http://cvs.sourceforge.net/viewcvs.py/nagiosplug/nagiosplug/plugins/check_by_ssh.c,<br />
Abfragedatum: 27.05.2004<br />
• Nagios Plugins Development Team (2004): Nagios plug-in development guidlines,<br />
[On-line], Available: http://nagiosplug.sourceforge.net/developer-guidelines.html,<br />
Abfragedatum: 17.05.2004<br />
• Nagios Plugin Requirements, rev. 1.5, [On-line], Available<br />
http://cvs.sourceforge.net/viewcvs.py/nagiosplug/nagiosplug/REQUIREMENTS,<br />
Abfragedatum: 08.07.2004<br />
• Office of Government Commerce (2000): ITIL Service Support CD-ROM Version 1.3,<br />
Norwegen<br />
• Pollmeier, Dirk (2003): Ihr IT-Powershop, PowerPoint Präsentation, 28.10.2003<br />
• Ruzicka, Dietmar (2004): Netzwerk-Monitoring mit Nagios, dem Nachfolger von Netsaint,<br />
in: Linux-Magazin 03/2004, S. 121<br />
• Schaffranneck, Sven (2004): Stu<strong>die</strong>nar<strong>bei</strong>t zum Thema „Analyse ausgewählter Event-<br />
Management-Tools auf Basis der Anforderungen der Volkswagen AG unter<br />
Berücksichtigung von OpenSource“, Fachhochschule Braunschweig/Wolfenbüttel<br />
• Schmitz, Martin (2004): eMail-Korrespondenz Schmitz, Martin, 03.05.2004,<br />
siehe Seite 141<br />
• Twele, Horst (2000): Partielle Sicherung und Wiederherstellung der Tivoli proprietären<br />
Objektorientierten Datenbank mit Hilfe einer Java Applikation, Fachhochschule<br />
Braunschweig/Wolfenbüttel<br />
• Voon, Ton (2004): eMail-Korrespondenz Voon, Ton, 30.04.2004, siehe Seite 142
- 158 -<br />
Verzeichniss der relevanten Internet Links<br />
• http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,4682,<br />
00.html<br />
Link zum GNU GCC für HP-UX 11.11 PA-RISC.<br />
• http://httpd.apache.org<br />
Webseite des OpenSource Webservers Apache.<br />
• http://mcrypt.hellug.gr<br />
Bezugsquelle für <strong>die</strong> mcrypt-Library.<br />
• http://nagiosplug.sourceforge.net<br />
Projektseite der Nagios-Plugins auf sourceforge.net.<br />
Hinweis: Unter http://nagiosplug.sourceforge.net/snapshot ist der tagesaktuelle CVS-<br />
Snapshot zu finden.<br />
• http://naplax.sourceforge.net/check_logsurfer.html<br />
Webseite der Nagios Plugins and Extensions auf sourceforge.net. Sammlung von<br />
zusätzlichen Plugins für Nagios.<br />
• http://sourceforge.net/projects/nrpe<br />
Webseite des NRPE auf sourceforge.net.<br />
• http://sunsolve.sun.com/pub-cgi/retrieve.pl?type=0&doc=fpatches%<br />
2F112438&display=plain<br />
Link zum SunOS Patch 112438, um /dev/random und /dev/urandom bereit zu stellen.<br />
• http://support.tsmgsoftware.com<br />
Forum der NSClient- und NRPE_NT-Entwicklerteams. Neben Support <strong>werden</strong> hier auch<br />
<strong>die</strong> neuesten Versionen zur Verfügung gestellt.<br />
• http://www.gnu.org/copyleft/gpl.html<br />
Inhalt der GNU General Public Licence im HTML-Format.<br />
• http://www.gnu.org/software/flex/flex.html<br />
Webseite des GNU-Tools flex.<br />
• http://www.gnu.org/software/make<br />
Webseite des GNU-Tools make.<br />
• http://www.linuxfibel.de/regex.htm<br />
Die Linuxfibel bietet Beschreibungen und Hilfestellungen rund um Linux.
- 159 -<br />
• http://www.nagios.org<br />
Webseite des Server-Monitoring-Tools Nagios von Ethan Galstad.<br />
• http://www.nagios.org/download/extras.php<br />
Sammlung einiger Zusatztools für Nagios wie NRPE. NSCA und NSClient.<br />
• http://www.openssh.org<br />
OpenSSH ist eine freie Implementierung der SSH Protokollsammlung und ist für viele<br />
Plattformen verfügbar.<br />
• http://www.openssl.org<br />
Webseite der OpenSource-Implementierung des SSL-Protokolls.<br />
• http://www.raxnet.net/products/cacti<br />
Webseite von Cacti (Frontend für das Network Monitoring Tool RRDTool).<br />
• http://www.saintcorporation.com/<br />
Webseite von dem kommerziellen Security-Scanner SAINT.<br />
• http://www.sunfreeware.com<br />
Kostenlose OpenSource Softwaresammlung für Sun Solaris.<br />
• http://www-1.ibm.com/servers/aix/products/aixos/linux/download.html<br />
Sammlung von GNU-Tools für das IBM Betriebssystem AIX.
Eidesstattliche Erklärung<br />
Hiermit erkläre ich an Eides statt, dass ich <strong>die</strong> vorliegende Ar<strong>bei</strong>t selbständig und ohne<br />
unerlaubte fremde Hilfe angefertigt habe, andere als <strong>die</strong> angegebenen Quellen nicht benutzt<br />
und <strong>die</strong> den benutzten Quellen wörtlich oder inhaltlich entnommenen Stellen als solche<br />
kenntlich gemacht habe.<br />
Wolfsburg, im August 2004<br />
______________________________<br />
Sven Schaffranneck