25.10.2014 Aufrufe

kann die Diplomarbeit heruntergeladen werden. - bei BS-NetSolutions

kann die Diplomarbeit heruntergeladen werden. - bei BS-NetSolutions

kann die Diplomarbeit heruntergeladen werden. - bei BS-NetSolutions

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!