HOWTO zu Nagios System- und Netzwerk-Überwachung

(C) 2008-2016 T.Birnthaler/H.Gottschalk <howtos(at)ostc.de>
              OSTC Open Source Training and Consulting GmbH
              www.ostc.de

$Id: nagios-HOWTO.txt,v 1.124 2019/11/26 19:37:07 tsbirn Exp $

Dieses Dokument beschreibt Grundlagen und Einsatz von Nagios unter UNIX/Linux
(Überwachung von Ressourcen, Systemparametern, Diensten und Netzwerk).

Inhaltsverzeichnis

0) Allgemein wichtig
0.1) Konfiguration
0.2) Sicherheit
0.3) Zugriffsrechte
0.4) Hinweise zur Syntax in Konfigurations-Dateien
0.5) Schnelle Bedienung auf der Kommandozeile
1) EinfÃŒhrung
2) Zweck von "Monitoring"
3) Was ist ÃŒberwachbar? -- ALLES!
4) Was bietet Nagios?
5) Vor- und Nachteile von Nagios
6) Anmerkungen zu Nagios
7) Architektur von Nagios
8) Web-GUI von Nagios
8.1) Zugriffssteuerung auf Web-GUI
9) Alarmierung (Benachrichtigungen)
10) Weitere Eigenschaften von Nagios
11) Was ist notwendig um Nagios laufen zu lassen?
12) Wie als AnfÀnger beginnen?
12.1) Nagios Dokumentation (Core Documentation)
13) Zum VerstÀndnis von Nagios wichtige Punkte
13.1) Check-Typen
13.2) Status-Typ SOFT/HARD
13.3) Host-AbhÀngigkeit ("parents")
14) Konfiguration von Nagios
15) Warum keine GUI zur Konfiguration?
16) Kommunikationsarten Nagios-Server <-> Plugins (GRAFIK)
17) Check-Agent Konfiguration
17.1) SSH (check_by_ssh)
17.2) NRPE (Nagios Remote Plugin Executor)
17.3) NSCA (Nagios Service Check Acceptor)
17.4) NSCP (Nagios Service Check Protocol)
17.5) NWSC (Nagios Windows Service Checker)
18) Was ist bei Plugins zu beachten?
18.1) Plugin-Schnittstelle
19) Auswahl von Plugins
20) Standard-Plugins
21) Nagios Objekte und ihre Beziehungen
22) Konfigurations-Dateien -- Struktur
23) Konfigurations-Dateien -- Inhalt
23.1) Haupt-Konfigurations-Datei "nagios.cfg"
23.2) Resource-Konfigurations-Datei "resource.cfg"
23.3) GUI-Konfigurations-Datei "cgi.cfg"
23.4) Objekt-Konfigurations-Dateien
23.5) Vordefinierte Objekte
24) Benachrichtigungen
25) Makros
26) Event-Handler
27) Flap Detection
28) External Commands (externe Kommandos)
29) Performance-Daten mit PNP4Nagios
30) Logging
31) Debugging
32.1) Erweiterungen von Nagios 3 (26.2.2008)
32.2) Erweiterungen von Nagios 4 (20.9.2013)
33) Glossar
34) Links
34.0) Nagios Dokumentation
34.1) Deutsche Nagios Webseiten
34.2) Englische Nagios Webseiten
34.3) Nagios BÃŒcher
34.4) Firmen mit Nagios-Expertise
34.5) Quellen fÃŒr Nagios-Plugins
34.6) GUI/Web-Interfaces fÃŒr Nagios
34.7) AddOns fÃŒr Nagios
34.8) SNMP (Simple Network Management Protocol)
34.9) Mobile Device Interfaces fÃŒr Nagios (iOS/Android Apps)
34.10) Nagios Distributionen
34.11) Nagios-Foren/Blogs
34.12) Nagios-basierte Alternativen ("Nagios Powered")
34.13) Nagios-Alternativen
34.14) Kommerzielle Monitoring-Produkte
34.15) Wikipedia Artikel zu Nagios
35) Hinweise und Tipps

0) Allgemein wichtig   (Toc)

0.1) Konfiguration   (Toc)

* Nagios-Verz.- und Kommando-Namen heißen je nach Nagios-Version:
  + nagios    # Allgemein V1/V2
  + nagios2   # V2-Plugins (auch bei V3/V4)
  + nagios3   # V3
  + nagios4   # V4

* Die Haupt-Konfigdatei "nagios.cfg" liegt unter folgendem Verz.
  (enthÀlt Verweise auf weitere einzulesende Konfig.-Dateien):
    /etc/nagios3            # Wenn aus Repository installiert
    /usr/local/nagios/etc   # Wenn aus Quellcode installiert

* VOR Änderungen IMMER aktuelle Konfigurations-Dateien SICHERN:
  + FÌr spÀteren Vergleich
  + Zum ZurÃŒckspielen funktionierender Version bei nicht behebbaren Fehlern
  + Am besten per Versionsverwaltung (RCS/CVS/SVN/GIT/...)
  + Gesamten Nagios-Konfig.Ordner "/etc/nagios3" (aus Repository inst.) oder
    "/usr/local/nagios/etc" (aus Quellcode inst.) in TAR/ZIP-Archiv sichern

      tar czvf nagios-backup.tgz /etc/nagios3
      tar czvf nagios-backup.tgz /usr/local/nagios/etc

* Nach Änderungen einen "PRE-FLIGHT CHECK" (als root!) durchfÃŒhren (-v=verify),
  da keine GUI die korrekte Syntax sicherstellt (analog "testparm" bei Samba).
  Konfiguration nach JEDER Änderung "verifizieren" (nur Syntaxcheck),
  BEVOR Nagios-Dienst neu gestartet wird --> sonst Nagios-Betrieb unterbrochen!

    sudo /usr/sbin/nagios3             -v /etc/nagios3/nagios.cfg
    sudo /usr/local/nagios/sbin/nagios -v /usr/local/nagios/etc/nagios.cfg

* Erst nach erfolgreichem Test Nagios-Dienst neu starten!
      service nagios3 restart    # Kurzzeitige Unterbrechung (einige ms)
  + Konfigurations-Datei neu einlesen genÃŒgt meist (kill -HUP bzw. reload)
      service nagios3 reload     # Keine Unterbrechung
  + "restart" macht mehr als "reload" (z.B. Dateien anlegen und verrechten)
    - Manchmal notwendig!
    - Unterbricht aber kurzzeitig Nagios-Dienst!

* Log- und Debug-Dateien unbedingt auf Fehlermeldungen von Nagios ÃŒberprÃŒfen!
    /var/log/nagios/*        # Meldungen von Nagios-Dienst V2
    /var/log/nagios3/*       # Meldungen von Nagios-Dienst V3
    /var/log/nagios4/*       # Meldungen von Nagios-Dienst V4
    /var/log/syslog          # System-Meldungen
    /var/log/system          # Alle Log-Meldungen (abhÀngig vom System)
    /var/log/messages        # Alle Log-Meldungen (abhÀngig vom System)
    /var/log/allmessages     # Alle Log-Meldungen (abhÀngig vom System)
    /var/log/localmessages   # Alle Log-Meldungen (abhÀngig vom System)
    /var/log/auth.log        # AnmeldevorgÀnge und -versuche

* Plugins IMMER auf Kommandozeile als Benutzer "nagios" austesten!
  + Per User "nagios", NICHT als "root"!
      sudo -u nagios PLUGIN ...
  + Plugin-Usage-Meldung per -h/--help lesen
  + ALLE: Standard, Download, Selbstgeschriebene

* ERST kompletten Plugin-Aufruf inkl. Aussenrum (SSH, NRPE, ...) mit Parametern
  auf Kommandozeile zum Laufen bringen (testen bis funktionsfÀhig!),
  DANN in Nagios-Konfiguration einbauen und erneut testen bis funktionsfÀhig!

0.2) Sicherheit   (Toc)

* ZWEITEN KOMMUNIKATIONSWEG fÃŒr Benachrichtigungen einrichten (z.B. per SMS
  Ìber per USB angeschlossenes GSM-Modul), da bei IdentitÀt des zu
  ÃŒberwachenden Netzwerks mit dem Versandnetzwerk der Benachrichtigungen
  Problemnachrichten nicht mehr verschickt werden können.

* "Principle of least privilege"
  + Nagios lÀuft ohne "root"-Rechte unter (normalem) Benutzer "nagios"
  + Plugins laufen somit unter Benutzer "nagios" (ohne "root"-Rechte)
  + Bei Bedarf kann per "sudo" auch Plugins das "root"-Recht gegeben werden
    (fÃŒr Zugriff auf "/proc", "/sys", "/dev",
     fÃŒr Kommando "nmap" zum Zugriff auf Netzwerkkarten,
     fÃŒr Zugriff auf die privilegierten Ports 0-1023,
     fÃŒr Kommando "smartctl" zum Zugriff auf Hardware).
    - Dazu notwendige EintrÀge in "/etc/sudoers":
        nagios ALL=(root) NOPASSWD: /usr/sbin/smartctl, /usr/bin/nmap, ...
    - Dazu notwendiger Aufruf des Plugins in Kommando-Definition:
        define command {
          command_name  check_smart
          command_line  /usr/bin/sudo \          # Zeilenumbruch maskiert
                        /usr/sbin/smartctl ...
        }

* NICHT als Benutzer "root" arbeiten, wenn nicht unbedingt notwendig!
  + Statt dessen "sudo" als normaler Benutzer verwenden
  + "/etc/sudoers" geeignet konfigurieren (Abfrage Benutzerpasswort!)
  + Eigenen Account in Gruppe "admin", "wheel" oder "sudo" aufnehmen

* Benutzer "root" KEIN Passwort geben (fehlt sowieso unter vielen Linuxen)
  (Umweg ÃŒber Anmeldung als normaler Benutzer notwendig).

* Benutzer "root" KEINE (schlÌsselbasierte) SSH-Anmeldung ermöglichen
  (Umweg ÃŒber Anmeldung als normaler Benutzer notwendig).

* BesitzverhÀltnisse und Zugriffsrechte an Verz. und Dateien (ganz. Verz.pfad)
  vor und nach folgenden Operationen prÃŒfen/vergleichen:
  + chmod
  + chown
  + chgrp
  + mv
  + cp
  + scp
  + tar
  + zip
  + ...

* VerschlÃŒsselte Kommunikation zwischen Nagios Core und GUI + Plugins einrichten
  + SSL/TLS (HTTPS)
  + SSH-Tunnel
  + OpenVPN
  + stunnel
  + NRPE
  + NSCA
  + NSCP
  + ...

0.3) Zugriffsrechte   (Toc)

* Besitzer(gruppe) und Zugriffsrechte an Verz. und Dateien (ganz. Verz.pfad)
  so einstellen, dass Benutzer oder Gruppe "nagios" zugreifen kann (lesen und
  schreiben), Verz. mÃŒssen fÃŒr "nagios" ausfÃŒhrbar sein, damit sie betreten/
  durchquert werden können.

* Set-Group-ID-Recht fÃŒr Verz. setzen (chmod g+s ...), falls eine Datei darin
  bei jedem Dienst-Start neu angelegt wird. Damit wird die Besitzer-Gruppe
  des Verz. fÃŒr die neu angelegte Datei ÃŒbernommen.

* Auf bestimmte Verz./Dateien ist Zugriff von Nagios und dem Webserver (Apache)
  nötig, der unter Benutzer "www/wwwrun" + Gruppe "www-data" lÀuft.
  Daher diesen Benutzer in Gruppe "nagios" aufnehmen oder auf Verz./Datei
  nötige Rechte fÌr "Other" setzen (chmod o+rx ... bzw. chmod o+r ...).

* HINWEIS: Nagios wird zwar mit "root"-Rechten gestartet,
  stellt aber zum Betrieb auf Benutzer "nagios" + Gruppe "nagios" um
  (siehe Variablen "nagios_user" + "nagios_group" in "nagios.cfg").
  D.h. "sudo nagios3 -v nagios.cfg" verwendet "root"-Rechte nur kurzzeitig!

0.4) Hinweise zur Syntax in Konfigurations-Dateien   (Toc)

* Mit "#" und ";" beginnende Zeilen sind KOMMENTAR und werden ignoriert
  --> Leerraum davor ist erlaubt
  --> Per "\#" bzw. "\;" schÃŒtzen, wenn an externes Kommando ÃŒbergeben
  --> Am Zeilenende nach Anweisung vermeiden (evtl. als Wert interpretiert)

* Variablennamen mÃŒssen am Zeilenanfang stehen (KEIN Leerraum davor erlaubt)

* Alle Namen sind CASE-SENSITIVE (d.h. GROSS/kleinschreibung wird beachtet)
  + Außer Objekt-Hostnamen (da DNS-Hostnamen das auch nicht machen)!

* Umlaute "ÀöÌÄÖÜß", Sonderzeichen und Leerzeichen in Service-Descriptions und
  Kommando-Namen vermeiden, da sie als externe Namen verwendet werden und der
  Aufruf von der Nagios-GUI oder vom Nagios-Kern aus fehlschlagen kann
  (Zeichensatz von Editor und Linux/Nagios kann verschieden sein: UTF-8/Latin1)
  --> Nur A-Z a-z 0-9 _ - verwenden (BEZEICHNER)
  --> Auch alle andere Objektnamen sollten nur diese Zeichen enthalten (BEZEICHNER)

* Leerzeichen in Namen werden berÃŒcksichtigt
  --> keine Leerzeichen in durch "," getrennten Listen verwenden!

* Auf Tippfehler, Quotierungsfehler mit "...", '...', Klammerfehler, LeerrÀume
  und Abschlusszeichen ";" in Konfigurations-Dateien achten.

* Die Quotierungszeichen "..." und '...' haben in Nagios KEINE Bedeutung,
  werden aber beim Aufruf externer Kommandos an diese weitergegeben.
  D.h. damit können und mÌssen Sonderzeichen vor der Shell geschÌtzt werden.
  Ebenso ist Backslash "\" evtl. notwendig zur Übergabe von Sonderzeichen.

* IMMER Hochkomma '...' um Parameter $ARG1$ in externen Kommandos setzen
  (wg. evtl. vork. Shell-Sonderzeichen)

* Lange Zeilen per "\" am Zeilenende auf mehrere Zeilen umbrechen
  + Z.B. externe Kommandos
  + Nur "Newline" (Zeilenvorschub) direkt danach erlaubt!

* Pfadnamen sind absolut oder relativ angebbar
  + Relative Pfadnamen sind relativ zum Startverz. der Haupt-Konfigdatei "nagios.cfg"

0.5) Schnelle Bedienung auf der Kommandozeile   (Toc)

* Befehle nicht stÀndig neu tippen, sondern wiederverwenden
  + History nutzen
  + Maus nutzen

* TAB-Taste zum VervollstÀndigen von Kommandos + Datei/Verz.namen nutzen!

* Versehentlichen Aufruf eines Kommandos ohne "sudo" mit "sudo" wiederholen
    sudo !!   # Bash: !! = vorheriges Kommando

* Im Editor "Vi(m)" vergessenes "sudo" nach Änderungen an Konfigurations-Datei
  "KKK" kompensieren (oder in irgend einem anderen Editor):
    sudo vi(m) /etc/KKK        # So wÀre es korrekt gewesen!
    vi(m) /etc/KKK             # So wurde Editor aufgerufen ("sudo" vergessen)
    ...                        # Datei "KKK" editiert
    :w                         # "write" (geht nicht!)
    :w!                        # "write" erzwingen (geht auch nicht!)
    :w /tmp/KKK                # "write" Kopie in Verz. "/tmp" (geht immer!)
    :q                         # "quit" (geht nicht!)
    :q!                        # "quit" erzwingen (geht immer!)
    ls -l /etc/KKK             # Zugriffsrechte+Besitzer anzeigen
    sudo mv /tmp/KKK /etc/KKK  # Neue Version an alte Stelle verschieben (sudo!)
    ls -l /etc/KKK             # Zugriffsrechte+Besitzer kontrollieren

1) EinfÃŒhrung   (Toc)

* Aufgabe: Überwachen von Netzwerken und ihren Komponenten
  + VerfÃŒgbarkeit (aktueller Zustand --> keine Historie)
  + Performanz (Messwert-Historie --> ÃŒber extra Tools)

* Nagios = Network + (H)Agios (griechisch: "Heiliger")
  + Acronym: "Nagios Ain't Gonna Insist On Sainthood"  ;-)
  + Autor: Ethan Galstad (Amerikaner)
  + 1999 begonnen (als "NetSaint") --> 15 Jahre Entwicklungszeit
  + 2003 umbenannt in "Nagios" wg. Namenskollision

* Beobachtet permanent beliebige Bestandteile eines Netzwerks und
  schlÀgt Alarm, sobald etwas "aus dem Ruder lÀuft"
  + Periodischer Aufruf von CHECK-Programm pro zu ÃŒberwachender Komponente
    -> Liefert Exit-Code + Beschreibungstext
    -> In Status-Datenbank eingetragen + in GUI angezeigt (als Farbe)

* Stellt Netzwerk-Struktur mit logischen ABHÄNGIGKEITEN dar
  Stellt auf Messdaten-Basis AKTUELLEN ZUSTAND der Netzwerk-Komponenten dar

* STATUSORIENTIERT --> Liefert QUALITATIVE Aussagen gemÀß AMPELSYSTEM
  + "Schwelle" nötig fÌr Grenzwert-Definition: OK <-> WARNING <-> CRITICAL

    +--------+-------------+------+------------------------------------------+
    | Farbe  | Status      | Code | Messwert                                 |
    +--------+-------------+------+------------------------------------------+
    | GrÃŒn   | OK          |  0   |                   ... < WARNING-Grenze   |
    | Gelb   | WARNING     |  1   | WARNING-Grenze <= ... < CRITICAL-Grenze  |
    | Rot    | CRITICAL    |  2   |                   ... >= CRITICAL-Grenze |
    +--------+-------------+------+------------------------------------------+
    | Orange | UNKNOWN     |  3   | Unbekannt (Messwert fehlt)               |
    | Grau   | UNREACHABLE |  -   | Unbekannt (wg. Ausfall eines "parents")  |
    +--------+-------------+------+------------------------------------------+

                  WARNING-     CRITICAL-
        Min        Grenze       Grenze        Max
         |     0     |      1     |      2     |
         |<--------->|<---------->|<---------->|        3          -
         |     OK    |   WARNING  |  CRITICAL  |     UNKNOWN  UNREACHABLE
         |    grÃŒn   |    gelb    |     rot    |     orange      grau

* Schwellwerte PRO CHECK flexibel einstellbar (per -w=warning, -c=critical):
  + check_smtp  -w 5.0         -c 8.0         localhost       # 1 (Antwortzeit in Sek)
  + check_disk  -w 10%         -c 5%          -p /var         # 1 (freier Plattenplatz)
  + check_procs -w 150         -c 250         --metrics=PROCS # 1 (Anz. Prozesse)
  + check_icmp  -w 200.0,40%   -c 1000.0,80%  localhost       # 2 (ms Laufzeit,Paketverlustrate)
  + check_load  -w 2.0,1.0,0.5 -c 4.0,2.0,1.0 localhost       # 3 (1/5/15 Min Durchschn.)

* Liefert KEINE QUANTITATIVEN Aussagen (zeitlicher Verlauf der Messwerte)
  + Momentansicht (Àndert sich stÀndig)
  + Live-Status = letzter Messwert
  + Kann allerdings solche Daten aufzeichnen (NDO/IDO = Nagios/Icinga Data Out)
    (z.B. NDOutils/IDOutils zeichnet alle Werte extern auf)
  + Auswertung mit Zusatztools (AddOns): NagVis, PNP4Nagios, NagiosGrapher, ...

* Fokus: FunktionalitÀt und StabilitÀt, nicht Design (d.h. "schön" ist anders!)

* Solider Monitoring BAUKASTEN (nicht bloß GUI), d.h. notwendig sind:
  + Editieren von Konfigurations-Dateien      (Editor, z.B. Vim)
  + Installation von Zusatzsoftware           (Administrieren)
  + Schreiben/Ändern/Testen von Check-Plugins (Programmieren)

2) Zweck von "Monitoring"   (Toc)

* Permanenter GesamtÃŒberblick ÃŒber Infrastruktur-Zustand

* Probleme/Fehler zeitnah erkennen
  + FrÃŒhzeitig (VOR den Anwendern ;-)
  + Auch wenn keiner vor dem Rechner sitzt
  + Nicht so offensichtliche
    - Rechenzentrums-Umzug
    - Rechner ersetzen
    - OS- oder SW-Updates
    - Zertifikat-Ablauf
    - Klimaanlage im Rechenzentrum ausgefallen --> 70 Grad!
    - Wassereinbruch
    - Kurzeitiger Stromausfall --> USV angesprungen
    - Einbruch/Diebstahl/Sabotage
    - Kabel unterbrochen/versehentlich gezogen
    - ...

* GEZIELTE Fehlersuche unterstÃŒtzen
  (nicht an falscher Stelle suchen!)

* Unnötige Nachrichten vermeiden (99.9% OK-Meldungen),
  damit wichtige Ereignisse nicht im Wust von Meldungen untergehen!

* Routineaufgaben automatisieren

* DOKUMENTATION der System- und Netzwerkstruktur!
  (Infrastruktur Àndert sich stÀndig -- wÀchst ;-)

* Dokumentation der VERFÜGBARKEIT gegenÃŒber Kunden
  (Einhaltung von SLA = Service Level Agreements)

* Langfristige Trends ermitteln --> KapazitÀtsplanung

* Monitoring (Nagios) ist nicht Graphing (MRTG, Cacti)!
  (Visualisierung von Messwerten Ìber lÀngere ZeitrÀume)
  Aufzeichnung der Messwerte ebenfalls notwendig

3) Was ist ÃŒberwachbar? -- ALLES!   (Toc)

* Hardware
  + Netzwerk-Komponenten per SNMP (Simple Network Management Protocol)
  + Server per Herstellertools (HP OpenView, IBM Director, ServerView, OpenManage, ...)
  + Physikalische Messwerte (Stromverbrauch, WÀrmeverbrauch, Helligkeit, ...)
  + Umwelt (Temperatur, Luftfeuchtigkeit, Niederschlag, WindstÀrke+richtung,
            PH-Gehalt, Durchflussmenge, ...)
  + HaushaltsgerÀte
  + Maschinen

* Betriebssystem (viele fertige Plugins vorhanden!)
  + Ressourcen: CPU, Speicher, Dateisysteme, Platten, RAID/SMART
  + Prozesse und Dienste
  + Performanz
  + Logfiles (Analyse, Mustererkennung)

* Netzwerk-Dienste (viele fertige Plugins vorhanden!)
  + Alle gÀngigen per Simulation eines Client-Zugriffs
    (DNS, FTP, HTTP, LDAP, SMTP, SSH, SMB, POP3, IMAP)
  + TCP/UDP-Ports
  + ICMP

* Anwendungen
  + SAP
  + Datenbanken (MySQL, PostgreSQL, BDB, ORACLE, DB2, SQL-Server)
  + Messaging-Systeme (Mail-Server)
  + Web- und Applikations-Server (Apache, Tomcat)
  + Verz.-Dienste (AD, LDAP, NDS)
  + Telefonieserver
  + ...

* Weiteres
  + Eigene Skripte und Plugins
    (Shell, Perl, VBScript, Java, Python, PHP, C#/.NET, PowerShell, ...)

4) Was bietet Nagios?   (Toc)

* Überwachen
  + PRIVATE Rechner-Betriebsmittel: CPU, RAM, Disk, User, Prozesse, ...
    --> Agent auf GerÀt notwendig:  SSH, NRPE, NSCA, NSCP, NWSC, SNMP, ...
  + ÖFFENTLICHE Netzwerk-Dienste:   SMTP, POP3, IMAP, HTTP, FTP, ...
  + NetzwerkfÀhige GERÄTE:          Switch, Hub, Router, Drucker, VoIP, ...

* Alle Betriebssysteme ÃŒberwachbar (Linux, UNIX, Windows, MacOS, Host, ...)
  (lÀuft aber selbst nur unter Linux/UNIX!)

* Streng MODULAR -- erweiterbar ÃŒber PLUGINS
  --> Sehr viele ERWEITERUNGEN verfÃŒgbar

* BerÃŒcksichtigt ABHÄNGIGKEITEN (Dependencies) von Netzwerk-Komponenten
  --> Nachrichten-UnterdrÌckung abhÀngig vom Zustand anderer Hosts/Services

* Alarmierung/Benachrichtigung (Notification) bei Problem-Auftreten/Behebung
  --> Ampel, Sound/Gong/Sirene, Email, SMS, Anruf, Chat, ...

* Eskalationsmanagement (falls keine Reaktion erfolgt)
  --> Information anderer/weiterer Kontaktgruppen

* Ereignisbehandlung (Event-Handler) zur automatischen Problemlösung
  --> Kleinere Problem ohne Administrator-Eingriff beheben ("Selbstheilung")
      (angenehm + GEFÄHRLICH, da Problem evtl. nicht wahrgenommen!)

* Grafische Visualisierung des aktuellen Zustandes (per Webinterface)
  --> In jedem Browser anzeigbar

* Aufzeichnung des zeitlichen Verlaufs (Logdateien)
  --> Auswertung durch andere Tools

5) Vor- und Nachteile von Nagios   (Toc)

* Vorteile
  + Textbasierte Konfiguration ;-)
  + Sehr große Verbreitung
  + Flexibel und beliebig individualisierbar
  + Viel Erfahrung auch in großen Projekten
  + Stabil und ausgetestet (Grund: langsame Entwicklungsgeschwindigkeit)
  + Konstante und konservative Weiterentwicklung
  + Einfache Erweiterbarkeit durch Plugins
  + Viele AddOns (unter GPL)
  + Professioneller Support erhÀltlich (Netways, ConSol, Heinlein, Thomas-Krenn, Mathias Kettner)
  + Große aktive deutsche Community
  + Einige Forks (Schnittstellen + Konfiguration gleich bzw. erweitert)
    - Shinken:   Nachprogrammierung in Python (POC = Proof of Concept,
                 Scaling to large environments, Dez 2009)
    - Icinga(1): Am 6.5.2009 durch Firma Netways (Quellcode-Kopie in C)
                 --> 1. stabile Version 28.10.2009
    - Icinga 2:  Okt 2012 begonnen (parallel zu Icinga 1, C++ statt C)
    - Naemon:    Okt 2013, Andreas Ericsson, Firma Op5, Mitglied Nagios Core Team
    - Kommerzielle Ableger: NetEye, Groundwork Op5, OpenITCockpit, ...
  + Keine (Lizenz)Kosten
  + Open Source (GPLv2)
  + Umfangreiche, vollstÀndige und gute Dokumentation (nur Englisch)

* Nachteile
  + Textbasierte Konfiguration 8-(
  + Schwer ÃŒberschaubare Konfiguration
    - KomplexitÀt hoch (Baukasten)
    - Syntax kompliziert
  + Grafische Darstellung "old-fashioned" --> Icinga 2, TKmon, ...
  + Performance niedrig bei vielen Checks --> Icinga 1/2, Shinken
  + Hardware/Software-Hersteller stellt kein Plugin zur VerfÃŒgung
    (z.B. nur teuren Java-Client)
    --> Suchen oder selbst schreiben --> Programmiererfahrung notwendig
  + Hardware/Software-Hersteller stellt auch keine API-Doku zur VerfÃŒgung
    --> Pech gehabt!
  + Frei verfÃŒgbare Plugins fehlerbehaftet/nicht allgemein genug (zu speziell)
    - Auswahl unter mehreren Möglichen dauert zu lange und endet unbefriedigend
  + Updates kritisch
    - Nagios-Konfiguration + Nagios-Kern + Plugins + AddOns + Datenbank +
      nötige Programmiertools, ... gleichzeitig schwierig zu aktualisieren
      --> parallel neue Version aufsetzen bis Gleichstand, dann umschalten

* Probleme
  + AusfÃŒhrung der Checks/Plugins erzeugt:
    - Prozess-Forks
    - Double-Prozess-Forks
    - Memory Overhead
  + Checkresultate auf Filebasis erzeugt I/O Last
  + Event-Handler blockieren "Dispatcher" im Nagios-Core (NERD)
    - Steuert zeitl. Reihenfolge der Plugin-Aufrufe
    - Inzwischen gegen bessere austauschbar: Bronx, DNX

6) Anmerkungen zu Nagios   (Toc)

* Nagios ist ein "FRAMEWORK/BAUKASTEN" und kann erst mal kaum etwas
  Muss zu 100% gesagt bekommen, was es tun soll (nichts automatisch!)
  --> Q: "Nagios is Not for Dummies"
  --> Q: "Nagios ist ein sehr guter SchÃŒler,
         braucht aber auch einen guten Lehrer!"

* Nagios kÃŒmmert sich NUR um
  + Plugin-Aufrufe (Check aufgrund Konfiguration)
  + Aufzeichnen + Auswerten der Plugin-Ergebnisse
  + Reaktionen darauf (Notification/Event-Handler wiederum ÃŒber Plugins!)
  --> Q: "Made im Speck"
  --> Q: "Nagios ist nur ein Scheduler/Dispatcher"

* Wenige fest eingebaute Funktionen (CORE) +
  genau festgelegte Schnittstellen (APIs)
  Rest machen Plugins (+ UNIX/Linux-Kommandos!)
  --> Streng modular + erweiterbar
  --> Skalierung durch Entkopplung der Komponenten
  --> Hoher Ressourcenverbrauch wg. Kommunikationsaufwand + viele Prozesse

* Aussagen von vergleichbarer Aussagekraft
  + Q: "Nagios kann alles ÃŒberwachen"
  + Q: "Produkt kann per XML Daten austauschen"
  + Q: "Produkt kann per SOAP Daten austauschen"
  + Q: "Produkt ist per SNMP auslesbar und steuerbar"
  + Q: "Produkt ist ein Transaktionsmonitor"
  + Q: "Produkt ist ein relationales Datenbanksystem"

7) Architektur von Nagios   (Toc)

* Saubere Trennung in
  + Nagios-Daemon (Core)
    - Zentrales Framework (API festgelegt)
    - Konfiguration (Dateien)
    - Status-Speicher (binÀr im RAM + auf Platte)
    - Command/Event-Queue (Warteschlange)
    - Scheduling (Planung und Anstoßen von Checks)
    - Notification (Benachrichtigen)
    - Event-Handling (Problembehandlung)
    - Logging (direkte Dateien + Syslog)
  + Nagios Plugins
    - Überwachung einzelner Hosts/Dienste (Checks)
    - Skripte oder BinÀrprogramme (Kommandos)
    - Zustandsmeldungen an Nagios-Daemon (OK, WARNING, CRITICAL, UNKNOWN)
    - Statusmeldungen zusÀtzlich (z.B. "0 kB (0%) free on /dev/sda1")

* Kommunikation in Nagios
  + Client-Server-Prinzip
  + Eigene Nagios-Protokolle (NRPE, NSCA, NSCP = NSClient++, NWSC)
  + Standard-Protokolle (SSH, SNMP, WMI)
  + Aktive Abfrage                 = Erst Server tÀtig, dann Plugin (synchron)
    Passive Meldungs-Entgegennahme = Erst Plugin tÀtig, dann Server (asynchron)

  +----------+
  |  Editor  |
  | GUI-Tool |
  +---^------+                www/www-data                     +---------+
      |                       +---------+                      | Externe |
      |    +----------------->| Web-GUI +-----------------+    | Befehle |
      |    |  +--------+      +----^----+                 |    +----+----+
      |    |  | AddOns |           |                      |         |
      |    |  +--^--^--+           |                      |         |
  #===|====|=====|==|==============|======================|=========|=======#
  #   |    |     |  |     +--------v------------------+   |         |       #
  #   |    |     |  +---->| Status/Log/Retention File |   |         |       #
  #   |    |     |        +--------^------------------+   |         |       #
C #   |    |     |                 | nagios               |         |       # C
O # +-v----+-----+--+      +-------v-------+      +-------v---------v-----+ # O
R # | Konfigdateien +----->| Nagios-Daemon |<-----+ External Command File | # R
E # +-------+-------+    +-+---------------+-+    +------------^----------+ # E
  #         |            | NERD Nagios Event |                 |            #
  #         |            |  Radio Dispatcher |                 |            #
  #         |            +---------^---------+                 |            #
  #=========|======================|===========================|============#
            |                Aktiv | (synchron)                |
            |                +-----v-----+              Passiv | (asynchron)
            +--------------->|  Plugins  +---------------------+
                             +--^--+--+--+
                                |  |  |
            +-------------------+  |  +----------------------+
            |                      |                         |
       +----v---+   +--------------v----------+   +----------v----------+
       | Check  |   | Notification/Escalation |   | Event-Handler       |
       | (Test) |   | (Benachrichtigung)      |   | (Problembehandlung) |
       +--------+   +-------------------------+   +---------------------+

* Editor/GUI-Tool:  Konfiguration von Nagios und Addons (Konfig.-Dateien)

* Web-GUI:          Übersicht Systemstatus
                    Reportgenerierung (URLs definieren fÌr hÀufig nötige Reports)
                    Trendanalyse
                    Tests + Benachrichtigungen ein/ausschalten
                    Wartungsfenster ein/ausschalten
                    Kommentare eintragen/löschen ("in Bearbeitung")
                    Rescheduling von Checks

* Nagios-Daemon:    FÃŒhrt periodisch (aktiv) Tests aus
                    Nimmt (passiv) Testergebnisse entgegen
                    Wertet Testergebnisse aus
                    Löst Benachrichtigungen (Alarm) aus

* NERD (Nagios      Scheduler fÃŒr Checks, Notifications, Ecalations und
  Event Radio       Event-Handler (möglichst blockierungsfrei)
  Dispatcher)

* Status File:      Speichert aktuelle ZustÀnde (fÃŒr GUI, Status-ÜbergÀnge)
  Log File:         Sammelt Plugin-Meldungen (Messwerte)
  Retention File:   Speichert Status File periodisch (fÃŒr Nagios-Restart)

* Konfigdateien:    Beschreibung zu beobachtender GerÀte/Dienste/Ressourcen
                    + ihre AbhÀngigkeiten + Plugin-Aufrufe
                    In Form von Dateien (auf Verz. verteilt)

* Plugins:          Externe Kommandos (egal in welcher Programmiersprache!)
                    Von Nagios fÃŒr bestimmte Aktionen aufgerufen
                    (Check, Notification/Escalation, Event-Handler)

* Check-Plugin:     DurchfÃŒhrung Einzeltest (direkt/indirekt, aktiv/passiv)
                    RÃŒckmeldung an Nagios-Daemon (Status + Text)

* Notification-Pl:  Versenden von Benachrichtigungen bzw.
  Escalation-Pl:    Eskalation von Benachrichtigungen

* Event-Handler:    Problembehandlung vor Benachrichtigung bzw.
                    bei fehlender Reaktion ("Self-Healing")

* External Cmdfile: Liste von Befehlen an Nagios-Daemon
                    (von GUI, Passive Checks, externen Kommandos, Benutzer)

* ADDONS:           Erweiterungen (GUI-Konfiguration, Performance-Grafik, ...)
                    Ebenfalls per Konfigurations-Dateien konfiguriert
                    (RIESENGEBIET!)

8) Web-GUI von Nagios   (Toc)

* Aufruf (URL): HOST/nagios                  # z.B. localhost, V2
                HOST/nagios3                 # V3
                HOST/nagios4                 # V4
                USER:PASSWORD@HOST/nagios    # mit Account+Passwort
                USER:PASSWORD@HOST/nagios3   # V3
                USER:PASSWORD@HOST/nagios4   # V4

* Einrichten Web-GUI Accounts + Passworte
  --> 8.1) Zugriffssteuerung auf Web-GUI

* Darstellung aktueller Zustand je Host und Service (Dienst) in GUI:

    +-------------+---+--------+---+-------------+
    | Host        |   | Farbe  |   | Service     |
    +-------------+---+--------+---+-------------+
    | UP          | 0 | GrÃŒn   | 0 | OK          |
    | -           | - | Gelb   | 1 | WARNING     |
    | DOWN        | 1 | Rot    | 2 | CRITICAL    |
    +-------------+---+--------+---+-------------+
    | UNREACHABLE | 2 | Orange | 3 | UNKNOWN     |
    | PENDING     | - | Grau   | - | PENDING     |
    +-------------+---+--------+---+-------------+

* Unterschiedliche Detail-Ebenen
  + Taktische Übersicht = Zusammenfassung (Tactical Overview)
  + Matrixansicht
  + Gruppenansicht (von Hosts oder Services, frei definierbar)
  + Detailansicht
  + Statusmap (Grafische NetzwerkÃŒbersicht mit definierbaren Bildern)
  + Topologie
  + Reports und Logdateien-Zugriff
    - StatusÀnderungen
    - Statustrends
    - Benachrichtigungen
    - VerfÃŒgbarkeit in % + Zeit
    - Performancewerte per Schnittstelle

* Steuerung des Nagios-Daemon
  + Checks ein/ausschalten
  + Benachrichtigungen ein/ausschalten
  + Störungsmeldungen quittieren (Acknowledegement = "in Bearbeitung")
  + Kommentare hinterlegen
  + SCHEDULING der Abfragen beeinflussen
  + Daemon hoch/runterfahren

* CGI-Skripte der GUI (/usr/lib/cgi-bin/nagios3/*)

  +-------------------+------------------------------------------------------+
  | CGI-Skript        | Aufgabe                                              |
  +-------------------+------------------------------------------------------+
  | avail.cgi         | VerfÃŒgbarkeitsstatistik                              |
  |*cmd.cgi           | Externe Kommandos durchfÃŒhren (etwa 160 StÃŒck)       |
  |*config.cgi        | Objekt-Konfiguration anzeigen (readonly)             |
  |*extinfo.cgi       | Erweiterte Info + Kmdo ausfÃŒhren fÃŒr H/HG/S/SG       |
  | histogram.cgi     | Ereignis-Übersicht (Anzahl eingetretener Ereignisse) |
  | history.cgi       | LogeintrÀge nach Ereignissen filtern + anzeigen      |
  | notifications.cgi | Verschickte Nachrichten anzeigen                     |
  | outages.cgi       | FÃŒr Teilnetz-Ausfall verantwortliche NW-Knoten anz.  |
  | showlog.cgi       | Logfile-EintrÀge anzeigen                            |
  |*status.cgi        | ZustÀnde anzeigen (parametrisierbar, WICHTIG!)       |
  | statusmap.cgi     | Topologische NW-Karte ("parents")                    |
  | statuswml.cgi     | Statusabfrage via Handy (WML = Wireless Access Prot.)|
  | statuswrl.cgi     | Topologische NW-Karte in 3D (VRML-Browser nötig)     |
  |*summary.cgi       | Wunschauswertungen per Auswahlmaske (H/S/Fehler/TP)  |
  | tac.cgi           | Tactical Overview (Startseite)                       |
  | trends.cgi        | ZustÀnde Ìber Zeitachse anzeigen                     |
  +-------------------+------------------------------------------------------+
  | graphs.cgi        |                                                      |
  | rrd2-graph.cgi    |                                                      |
  | rrd2-system.cgi   |                                                      |
  +-------------------+------------------------------------------------------+
  | mrtg-rrd.cgi      |                                                      |
  +-------------------+------------------------------------------------------+

* TIPP: CGI-Skript per Kommandozeile ausfÃŒhren
        (root-Recht notwendig!, vermeidet wget, curl):

    REQUEST_METHOD="GET" \                  # Art der HTTP-Abfrage
    QUERY_STRING="." \                      # Query (TODO)
    REMOTE_USER="nagiosadmin" \             # Anmeldung
      /usr/lib/cgi-bin/nagios3/status.cgi   # Abfrage-Skript
        tidy |                              # HTML normieren (verzichtbar)
        w3m \                               # HTML in Text konvertieren
            -T "text/html" \                #   Content-Type
            -I "UTF-8" \                    #   Input-Zeichensatz
            -O "latin1" \                   #   Output-Zeichensatz
            -dump |                         #   Auf STDOUT ausgeben
        grep -wi "CRITICAL" |               # Ergebnis filtern (w=word,
        grep -wi "load" |                   # Ergebnis filtern  i=ignorecase)
        less                                # Seitenweise anzeigen

* Parameter der CGI-Skripte:

  +----------------------------------------------------------------------------+
  | status.cgi                                                                 |
  +------------------------+---------------------------------------------------+
  | host=H                 | H: all, Host                                      |
  | hostgroup=HG           | HG: all, Hostgroup                                |
  | servicegroup=SG        | SG: all, Servicegroup                             |
  | style=TYP              | TYP: overview, summary, grid, detail, hostdetail  |
  | hoststatustypes=NUM    | NUM: 1 PENDING, 2 UP, 4 DOWN, 8 UNREACHABLE       |
  | servicestatustypes=NUM | 1 PENDING, 2 OK, 4 WARNING, 8 UNKNOWN, 16 CRITICAL|
  | hostprops=NUM          | NUM: 1/2 Scheduled Downtime/No ...                |
  | serviceprops=NUM       | NUM: 4/8 Acknowledgement/No ...                   |
  |                        | 16/32 Host/Service-Check deakt./aktiviert         |
  |                        | 64/128 Eventhandler deakt./aktiviert              |
  |                        | 256/512 Flap Detection deakt./aktiviert           |
  |                        | 1024/2048 Host/Service oszilliert/nein...         |
  |                        | 4096 Host/Service von Benachrichtigung ausgeschl. |
  |                        | 8192 Benachrichtigung aktiviert                   |
  |                        | 16384/32768 Passive Host/Service Check deakt./akt.|
  |                        | 65536 Host/Service mind. 1 Result aus pass. Test  |
  |                        | 131072 Host/Service mind. 1 Result aus akt. Check |
  |                        | 252144 Host/Service in Hard State (V3)            |
  |                        | 524288 Host/Service in Soft State (V3)            |
  +------------------------+---------------------------------------------------+
  | extinfo.cgi                                                                |
  +------------------------+---------------------------------------------------+
  | type=0                 | Globale Parameter anzeigen                        |
  | type=1&host=H          | Kommandos und Infos zu Host H                     |
  | type=2&service=S       | Kommandos und Infos zu Service S                  |
  | type=3                 | Vorhandene Host/Service-Kommentare anzeigen       |
  | type=4                 | Nagios-Perform.-Info (Host/Service/aktiv/passiv)  |
  | type=5&hostgroup=HG    | Kommandozentrale fÃŒr Hostgruppe HG                |
  | type=6                 | WartungszeitrÀume fÌr Hosts/Service anzeigen      |
  | type=7                 | Geplante Tasks sortiert nach AusfÃŒhrungszeitpunkt |
  | type=8&servicegroup=SG | Kommandozentrale fÃŒr Servicegruppe SG             |
  +------------------------+---------------------------------------------------+
  | cmd.cgi                                                                    |
  +------------------------+---------------------------------------------------+
  | cmdtype=NUM            | Kommando ausfÃŒhren (NUM = 1..156)                 |
  | host=H                 | Host H auswÀhlen                                  |
  | hostgroup=HG           | Hostgruppe HG auswÀhlen                           |
  | service=S              | Service S auswÀhlen                               |
  | servicegroup=SG        | Servicegruppe SG auswÀhlen                        |
  +------------------------+---------------------------------------------------+
  | statusmap.cgi                                                              |
  +------------------------+---------------------------------------------------+
  | cmdtype=NUM            | Kommando ausfÃŒhren (NUM = 1..122)                 |
  +------------------------+---------------------------------------------------+
  | histogram.cgi                                                              |
  +------------------------+---------------------------------------------------+
  | history.cgi                                                                |
  +------------------------+---------------------------------------------------+
  | host=H                 | Host H auswÀhlen                                  |
  | hostgroup=HG           | Hostgruppe HG auswÀhlen                           |
  | service=S              | Service S auswÀhlen                               |
  | servicegroup=SG        | Servicegruppe SG auswÀhlen                        |
  +------------------------+---------------------------------------------------+
  | notification.cgi                                                           |
  +------------------------+---------------------------------------------------+
  | host=H                 | Host H auswÀhlen                                  |
  | service=S              | Service S auswÀhlen                               |
  | contact=C              | Kontakt C auswÀhlen                               |
  +------------------------+---------------------------------------------------+
  | summary.cgi                                                                |
  +----------------------------------------------------------------------------+

* Beispiel fÃŒr CGI-Webabfragen (Syntax):
    localhost/nagios/cgi-bin/status.cgi?FILTER
  FILTER z.B.:
    host=all&type=detail&hoststatustypes=3&serviceprops=10&servicestatustypes=28
    ...&sorttype=1&sortoption=6

* Navigationsbereich (linke schwarze Seitenleiste)
    /usr/local/nagios/share/side.html

* In C geschrieben (Sic!)
  + Schnell
  + Schlecht wartbar/erweiterbar

8.1) Zugriffssteuerung auf Web-GUI   (Toc)

* Anmeldung
  + ZunÀchst NUR per HTTP von "localhost" erlaubt
    - Erweiterbar auf beliebige Rechner (-->
    - VerschlÌsselter Zugriff per HTTPS möglich (SSL-Zertifikat)
  + ZunÀchst nur "Basic Authentication" (per "htaccess.passwd"/"htaccess.users")
    - Standard-Account "nagiosadmin" darf alles
  + Beeinflusst
    - Sichtbarkeit und Bedienbarkeit von Hosts/Services
      (vollstÀndig, Read-Only, nur wenn im Contact)
    - Erlaubte TÀtigkeiten (Lesen, Ändern)

* Zugriff auf CGI-Interface (Web-GUI):
    localhost/nagios    # Lokal  Name V2
    127.0.0.1/nagios3   # Lokal  IP   V3
    HOSTNAME/nagios     # Remote Name V2
    IP/nagios3          # Remote IP   V3
  Anmeldung mit Account-Name + Passwort erforderlich:
    nagiosadmin + PASSWORD     # Standard-Name mit allen Zugriffsrechten
    nagiosadm   + PASSWORD     # Evtl.
    nagios      + PASSWORD     # Evtl.

* FÃŒr Standard-Account "nagiosadmin" sind in "cgi.cfg" ALLE Zugriffe erlaubt
  (weitere solche Benutzer per "," getrennt angeben):
    authorized_for_system_information        = nagiosadmin   # Systeminfo ansehen
    authorized_for_configuration_information = nagiosadmin   # Konfig. ansehen
    authorized_for_system_commands           = nagiosadmin   # Kmdos starten
    authorized_for_all_services              = nagiosadmin   # Services ansehen
    authorized_for_all_hosts                 = nagiosadmin   # Hosts ansehen
    authorized_for_all_service_commands      = nagiosadmin   # Service-Kmdo st.
    authorized_for_all_host_commands         = nagiosadmin   # Host-Kmdo starten

* Accounts die nur LESEZUGRIFF haben, aber nichts Àndern können sollen,
  als "Read Only" in "cgi.cfg" eintragen:
    authorized_for_read_only                 = user1, user2, ...

* ALLE ANDEREN im Apache in der Datei "htaccess" eingerichteten Accounts sehen
  NUR die Host/Service-Objekte, bei denen ihr Account-Name unter "contacts" bzw.
  "contact_groups" in Host/Hostgruppe/Server/Servergruppe eingetragen ist!
    contacts         user1, ...
    contact_groups   group1, ...

* Zugriffssteuerung: Apache Benutzer-Anmeldung + -Passwort einrichten
  (ohne Option "-b" wird Passwort interaktiv abgefragt --> bessere Methode):
    /etc/apache2/conf.d/nagios3.conf
      # --> /etc/nagios3/apache2.conf      # Symbol. Link
      # --> /etc/nagios3/htpasswd.users    # Account+Passwort-Datei
  + Htaccess-Datei NEU erzeugen (-c=Datei erz., -b=Passwort auf Kmdozeile):
      KMDO      OPTS HTACCESS-DATEI              USER        PASSWORD
      htpasswd -c -b /etc/nagios3/htpasswd.users nagiosadmin geheim
      chmod o+r /etc/nagios3/htpasswd.users  # Leserecht fÃŒr andere setzen!
  + Htaccess-Datei Eintrag hinzufÃŒgen (-b=password on cmdline):
      KMDO     OPT HTACCESS-DATEI              USER    PASSWORD
      htpasswd -b  /etc/nagios3/htpasswd.users visitor geheim

9) Alarmierung (Benachrichtigungen)   (Toc)

* Flexibel per Skripte definierbar
  + E-Mail
  + SMS, Pager
  + Instant Messenger (ICQ, Jabber, ...)
  + Windows-Message (NET SEND Popup)
  + VoIP-Anruf (Asterisk)
  + Echte "Ampel" am Serverschrank ;-)

* Umfangreich konfigurierbar
  + Personen + Gruppen
  + Zeitfenster + Intervalle
  + Eskalation bei fehlender Reaktion
    --> Kette definierbar

* Automatische UnterdrÌckung bei Folgefehlern und AbhÀngigkeiten

* Schnittstelle zu anderen Anwendungen

10) Weitere Eigenschaften von Nagios   (Toc)

* Distributed Monitoring
  + Mehrere Nagios-Server ÃŒberwachen Teilbereiche
  + Weitermeldung ihrer Ergebnisse an zentralen Server
  + Einsatzbereich
    - Logische Netzstruktur
    - Lastverteilung
    - GeschÃŒtzte Bereiche (DMZ, Intranet)
    - End2End-Monitoring

* High-Availability (HA) relativ einfach

* Automatische Maßnahmen per "Event-Handler" bei Zustandswechsel OK <-> Fehler
  --> Self-Healing

* Erfassung von Downtimes (Ausfallzeiten, Wartungsfenster)

* Generierung von Performancewerten

* Vermeidung von Fehlalarmen durch Re-Checks & Flap-Detection
  + "Status Flapping" = schnell wechselnde ZustÀnde (oszillierend)

* Unterscheidung Ausfall <-> Nicht-Erreichbarkeit aufgrund AbhÀngigkeiten
  --> Automatisches UnterdrÌcken unnötiger Checks

* LÀuft unter Linux-Benutzer "nagios" und Linux-Gruppe "nagios" (nicht root)
  + Evtl. auch Gruppe "nagioscmd", "ncmd", "nagcmd" (Nagios Command Group)

11) Was ist notwendig um Nagios laufen zu lassen?   (Toc)

* Mindestens
  + UNIX/Linux-Rechner -- Windows leider nicht ;-(
  + BinÀrcode von Nagios-Daemon, Nagios-Plugins und Nagios-GUI (C)
  + Quellcode von ... + C-Compiler + Bibliotheken (nur zum selbst ÃŒbersetzen)
  + Netzwerkkarte + konfiguriertes TCP/IP-Netzwerk

* FÃŒr GUI
  + Apache2 Webserver
  + gd-library

* FÃŒr Plugin-AusfÃŒhrung
  + Shell (!)
  + Perl (!)
  + Python
  + C-Compiler (BinÀr = Standalone)
  + PHP
  + nmap
  + snmpget
  + ping
  + smartctl
  + ...

* FÃŒr Benachrichtigung
  + Mailclient (mail/mailx)
  + Mailserver Postfix/Exim/Sendmail
  + SMS-Gateway
  + Instant Messenger Gateway
  + VoIP-Telefonanlage
  + Echte "Ampel" am Serverschrank ;-)

* FÃŒr einige AddOns
  + Quellcode AddOns
  + Datenbank MySQL (evtl. auch sqlite, BDB, PostgreSQL, ORACLE, RRD-DB)
  + Weitere Bibliotheken

* Lizenz ;-)
  + GNU General Public Licence V2 (GPLv2, analog Linux)
  + Open Source (sehr wichtig!)

* Zeit + Geld 8-(
  + Hardware
  + Einarbeitung
  + Konfiguration
  + Dienstleistung
  + Beobachten + Problem-Bearbeitung (!)
  + StÀndige Pflege der Konfiguration (!)
  + Updates

12) Wie als AnfÀnger beginnen?   (Toc)

* UNIX/Linux-Wissen notwendig!
  + Grundlagen Kommandozeile (Shell)
  + Systemadministration auf Kommandozeile
  + Editor auf Kmdozeile (vim, emacs, mc, gedit, ...)
  + Shell-Programmierung fÃŒr Plugin-Anpassung/eigene Plugins
  + Perl-Programmierung fÃŒr Plugin-Anpassung/eigene Plugins

* "Geduld ist eine Tugend"
  + Nagios ist mÀchtig und flexibel
  + Konfiguration wie gewÃŒnscht dauert wegen
    - Erlernen von Nagios-Begriffen / -Verhalten / -Optionen
    - Eigenes Netzwerk verstehen + beschreiben
    - Konfiguration designen + erstellen + testen
    - Plugins suchen/installieren/testen/einbinden (fremde)
              bzw.     entwickeln/testen/einbinden (eigene)

* Sinnvolle Vorgehensweise
  + Installation aus Quellen (immer gleich!)
  + ZunÀchst nur Nagios-Maschine lokal monitoren
  + Netzwerk-Dokumentation schrittweise erarbeiten
  + Überwachung schrittweise erweitern
    - Rechner fÃŒr Rechner mit seinen Diensten dazunehmen
      (Art der Kommunikation auswÀhlen)
    - AbhÀngigkeiten zw. Rechnern und Diensten dazunehmen
    - Benachrichtigungen dazunehmen
    - Event-Handler dazunehmen
    - Neue Fehler --> Neue Überwachung zur Fehlererkennung dazunehmen

* Benachrichtigungen auf WIRKLICH relevante "eindampfen"
  Q: "40.000 Benachrichtigungen in Mailbox/Ordner gesammelt und nie angesehen"

* Saubere Strukturierung gerade fÃŒr größere Umgebungen extrem wichtig
  + Aufteilung:  Dateinamen + Verz.namen gut wÀhlen
  + Hilfsmittel: Templates, Makros, Host/Service/Kontaktgruppen, ...
  + Kriterien:
    - Abstrakt: Host, Service, Contact, Timeperiod, ...
    - Konkret:  Server, Standort, Projekt, ...

* "Nagios Core Documentation" lesen --> 12.1) Nagios Core Dokumentation

12.1) Nagios Dokumentation (Core Documentation)   (Toc)

* Links
  --> Nagios V3 Core Doku
  --> Nagios V4 Core Doku
  --> Nagios V3 Core Doku

* Inhaltsverzeichnis
  + toc.html                       # Table of Contents

* Advice for Beginners
  + beginners.html                 # Advice for Beginners

* Release Notes
  + about.html                     # About Nagios Core (What is, Requirements, Licence)
  + whatsnew.html                  # What's New in Nagios Core 3.x/4.x
  + knownissues.html               # Known Issues (bekannte Probleme)

* Quickstart Installation Guide
  + quickstart.html                # Quickstart
  + quickstart-fedora.html         # Fedora
  + quickstart-opensuse.html       # OpenSuSE
  + quickstart-ubuntu.html         # Ubuntu/Debian
  + upgrading.html                 # Upgrading Nagios

* How to monitor a ...
  + monitoring-windows.html        # Windows machine
  + monitoring-linux.html          # Linux/Unix machine
  + monitoring-netware.html        # Netware server
  + monitoring-publicservices.html # Publicly available service (HTTP, FTP, SSH, etc)
  + monitoring-routers.html        # Router/Switch
  + monitoring-printers.html       # Network Printer

* Configuration Overview + Main Configuration File Options
  + config.html                    # Configuration Overview
  + configmain.html                # Main Configuration File Options

* Object Configurations Overview
  + configobject.html              # Object Configuration Overview
  + objectdefinitions.html         # Object Definitions
  + objectinheritance.html         # Object Inheritance
  + objecttricks.html              # Time-Saving Tricks for Object Definitions
  + customobjectvars.html          # Custom Object Variables (ALT)

* Verifying Your Configuration + Starting and Stopping Nagios
  + verifyconfig.html              # Verifying your Configuration
  + startstop.html                 # Starting and Stopping Nagios

* Understanding Macros and How They Work + Standard Macros in Nagios
  + macros.html                    # Understanding Macros and How They Work
  + macrolist.html                 # List of available Macros

* Nagios Plugins
  + plugins.html                   # Nagios Plugins
  + pluginapi.html                 # Nagios Plugin API
  + epnplugins.html                # Developing Plugins For Use With Embedded Perl (ALT)
  + embeddedperl.html              # Using The Embedded Perl Interpreter
  + perfdata.html                  # Performance Data

* Nagios AddOns
  + addons.html                    # Nagios AddOns (NRPE, NSCA, NSCP, NWSC, NDOUtils, ...)

* Security Considerations + Enhanced CGI Security and Authentication
  + security.html                  # Security Considerations
  + cgisecurity.html               # Enhanced CGI Security and Authentication
  + int-tcpwrappers.html           # TCP Wrapper Integration
  + int-snmptrap.html              # SNMP Trap Integration

* CGI Configuration
  + configcgi.html                 # CGI Config File
  + cgiauth.html                   # CGI-Authentication
  + cgis.html                      # Information On The CGIs
  + cgiincludes.html               # Custom CGI Headers and Footers

* Sonstige Teile der Nagios Dokumentation
  + activechecks.html              # Active Checks
  + passivechecks.html             # Passive Checks
  + servicechecks.html             # Service Checks
  + hostchecks.html                # Host Checks
  + checkscheduling.html           # Check Scheduling
  + dependencychecks.html          # Predictive Dependency Checks
  + cachedchecks.html              # Cached Checks
  + dependencies.html              # Dependencies
  + freshness.html                 # Service and Host Freshness Checks

  + statetypes.html                # State Types
  + eventhandlers.html             # Event-Handlers
  + notifications.html             # Notifications
  + escalations.html               # Escalations
  + timeperiods.html               # Time Periods (or... "Is This a Good Time?")
  + oncallrotation.html            # On-call notification rotations
  + flapping.html                  # Detection and Handling of State Flapping
  + stalking.html                  # State Stalking
  + volatileservices.html          # Volatile Services

  + adaptive.html                  # Adaptive Monitoring
  + extcommands.html               # External Commands

  + networkreachability.html       # Determining Status and Reachability of Network Hosts
  + passivestatetranslation.html   # Passive Host State Translation
  + distributed.html               # Distributed Monitoring
  + redundancy.html                # Redundant and Failover Network Monitoring

  + clusters.html                  # Monitor Service and Host Clusters
  + downtime.html                  # Scheduled Downtime

  + tuning.html                    # Tuning Nagios For Maximum Performance
  + largeinstalltweaks.html        # Large Installation Tweaks
  + faststartup.html               # Fast Startup Options
  + mrtggraphs.html                # Graphing Performance Info With MRTG
  + nagiostats.html                # Using The Nagiostats Utility   !!!

  + integration.html               # Integration Overview

* "System Requirements" in "About Nagios" lesen
  + nagios.sourceforge.net/docs/nagioscore/3/en/about.html#requirements

* Nagios Core 3.x/4.x Version History
  + www.nagios.org/projects/nagioscore/history/core-3x
  + www.nagios.org/projects/nagioscore/history/core-4x

13) Zum VerstÀndnis von Nagios wichtige Punkte   (Toc)

13.1) Check-Typen   (Toc)

  +----------+-----------------------------------------------------------------+
  | Typ      | Beschreibung                                                    |
  +----------+-----------------------------------------------------------------+
  | Active   | Plugin vom Nagios-Daemon ausgelöst.                             |
  |          | In regelmÀßigen AbstÀnden SYNCHRON ausgefÃŒhrt (einstellbar,     |
  |          | d.h. Nagios wartet auf Antwort --> Evtl. Timeout)               |
  |          | Plugin wird aufgerufen und RÃŒckgabewert ausgewertet (Timeout)   |
  | Passive  | Durch externes Programm selbstÀndig (periodisch) durchgefÌhrt.  |
  |          | Liefert Status ASYNCHRON an Nagios-Daemon (z.B. SNMPTrap).      |
  |          | Ergebnis landet im "External Command File"                      |
  +----------+-----------------------------------------------------------------+
  | Service  | RegelmÀßig Verbindungsversuch --> Service antwortet (korrekt?)  |
  |          |                               --> Impliziert Host-Check!        |
  | Host     | Nur bei Bedarf --> d.h. alle Service-Checks schlagen fehl!      |
  |          |                    Meist per Ping (ICMP) --> Host antwortet     |
  +----------+-----------------------------------------------------------------+
  | Local    | Plugin startet auf Nagios-Server (Direct)                       |
  | Agent    | Plugin startet weiteres Plugin (Helper, Vermittler, Bindeglied) |
  | Remote   | Plugin startet auf ÃŒberwachter/vermittelnder Maschine (Indir.)  |
  +----------+-----------------------------------------------------------------+

13.2) Status-Typ SOFT/HARD   (Toc)

* Alarmstatus-Typ (um falschen Alarm zu vermeiden)
  + SOFT (Übergang von OK --> WARNING/CRITICAL/...)
    Bemerkt, aber noch nicht sicher (1..N-1 Mal fehlgeschlagen)
    - JA:   In Logdatei aufgezeichnet
    - JA:   In WeboberflÀche angezeigt
    * NEIN: Benachrichtigung (vor Anwender "verborgen")
    - EVTL: Event-Handler ausfÃŒhren
    - CONFIG: check_interval     = 5   # 5 x interval_length = 5 x 60s = 300s
  + HARD = Sicher genug erkannt (mind. N Mal fehlgeschlagen, typisch: N=4)
    - JA:   In Logdatei aufgezeichnet
    - JA:   In WeboberflÀche angezeigt
    * JA:   Benachrichtigung ausfÃŒhren
    - EVTL: Event-Handler ausfÃŒhren
    - Typische max. Zeit bis Benachrichtigung: 9 Min = (5 Min + 4 x 1 Min)
    - CONFIG: retry_interval     = 1   # 1 x interval_length = 60s
              max_check_attempts = 10   # 4 x retry_interval = 4 x 60s = 240s

             |            Erste Notification (weitere können folgen)
             |            ^
             |     HARD   :                    HARD (sofort!)
          OK |---------+  :                   +----------------------- Fehlerzustand
             |         |  :                   |
     WARNING |         |  :                   |
             |         |  :HARD (verzögert!)  |
    CRITICAL |         +----------------------+
             |         SOFT
           ==#=======================================================> Zeit
             ^    ^    ^^^^    ^    ^    ^    ^    ^    ^    ^    ^
             |    |    ||||    |    |    |    |    |    |    |    |
             +----+----++++----+----+----+----+----+----+----+----+--- Checks/Tests
             0    5   10      18   23   28   33   38   43   48   53
                       11
                        12
                         13

* SOFT: Status-Typ nach Status-Wechsel "OK" --> ...
  HARD: Def. Anzahl (schneller) Checks ergeben "nicht OK"

* Status-Wechsel "HARD ..." --> "SOFT OK" gibt es nicht!
  Übergang WARNING/CRITICAL/... --> OK wird sofort als HARD akzeptiert
  (wenn Host/GerÀt/Dienst wieder funktioniert, dann sofort "OK")

13.3) Host-AbhÀngigkeit ("parents")   (Toc)

* Unterscheidung
  + Service-Check: RegelmÀßig ausgefÃŒhrt --> Impliziter Host-Check!
  + Host-Check:    ALLE Service-Checks fehlgeschlagen --> nur bei Bedarf!
  + Host nicht erreichbar
    --> Parents des Host versuchen zu erreichen
    --> Parents der Parents versuchen zu erreichen
    --> ...

* Topologische AbhÀngigkeit von Host/Services per "parents" definierbar
  --> Eltern-Kind-Beziehung
  --> Gesamte (physikalische) Netzwerk-"Topologie" daraus abgeleitet
  + Definiert PHYSIKALISCHEN Weg von Hosts zu Nagios-Host
    --> Spiegelt sich in automatisch erzeugter Grafik in GUI wider!
  + Kein MUSS, Standard ist KEINE parents-EintrÀge:
    --> Alle Hosts/Services direkt Nagios-Server untergeordnet
    --> Nur eine Ebene in GUI-Grafik (ein "Haufen" um Nagios-Server herum)
  + Definition
    - Nagios-Server = "Startpunkt" der Hierarchie (oberste Ebene)
    - Hosts OHNE "parents"-Eintrag = "Kinder" des "Nagios-Servers" (1. Ebene)
    - Hosts MIT "parents"-Eintrag = Zeigen auf ihr Eltern-Objekt
    - MEHRERE "parents" pro Objekt erlaubt (V3)
    - Zyklus NICHT erlaubt!

                 +---------------+            #
      0. Ebene:  | Nagios-Server |            # Startpunkt der Hierarchie
                 +-+-+-+-+-+-----+            #
                   | | | | |                  #
                   | | | | |    +---------+   #
      1. Ebene:    | | | | +--> | Host_1  |   # KEIN "parents"-Eintrag
                   | | | |      +----^----+   #
                   | | | |           |        #
                   | | | |      +----+----+   #
      2. Ebene:    | | | +----> | Host_2  |   # parents = Host_1
                   | | |        +----^----+   #
                   | | |             |        #
                   | | |        +----+----+   #
      3. Ebene:    | | +------> | Host_3  |   # parents = Host_2
                   | |          +----^----+   #
                   | |               |        #
                   | |          +----+----+   #
      4. Ebene:    | +--------> | Host_4  |   # parents = Host_3
                   |            +----^----+   #
                   |                 |        #
                   |            +----+----+   #
      5. Ebene:    +----------> | Service |   # Automatisch erreichbar
                                | Host_4  |   # ÃŒber Host_4
                                +---------+   #

* Aus "parents"-Angaben abgeleitet:
  + Netzwerk-Topologie (physikalische Erreichbarkeit)
  + Grafische Form der Status Map
  + UNREACHABLE-Meldungen (grau)

* AbhÀngigkeiten deaktivieren Checks bei Nichterreichbarkeit
  + Nur DIREKTE Host-AbhÀngigkeiten einzutragen --> Gesamthierarchie abgeleitet

* Schlussfolgerung "UNREACHABLE" aus Netzwerk-Topologie (physikalische Struktur)
  + Definiert mittels Child-Parents-AbhÀngigkeiten
  + UNREACHABLE-Server nicht mehr geprÃŒft + keine Fehler mehr fÃŒr sie gemeldet
    --> Status "UNKNOWN"

                      +--------+                                 # Startpunkt
                      | Nagios |                                 # Hierarchie
                      +----+---+                                 #
                           |                                     #
                      +----+---+                                 # Kein parents:
                      | Switch | UP!                             #  direkt
                      +----+---+                                 #  erreichbar!
                           |                                     #
                      +----+---+                                 # parents:
                      | Router | DOWN!                           #  Switch
                      +----+---+                                 #
                           |                                     #
          +----------------+---------------+                     #
          |                |               |                     #
    +-----+-----+    +-----+----+    +-----+-----+               # parents:
    | Server 01 |    | Firewall |    | Server 02 | UNREACHABLE!  #  Router
    +-----------+    +-----+----+    +-----------+ --> UNKNOWN   #
     UNREACHABLE!          | UNREACHABLE!                        #
     --> UNKNOWN           | --> UNKNOWN                         #
                    +------+-----+                               # parents:
                    | DMZ-Server | UNREACHABLE!                  #  Firewall
                    +------+-----+ --> UNKNOWN                   #
                           :                                     #
                           :                                     #
                     +-----+----+                                # parents:
                     | Internet | UNREACHABLE!                   #  DMZ-Server
                     +----------+ --> UNKNOWN                    #

14) Konfiguration von Nagios   (Toc)

* Abstrakte OBJEKTE bilden (zu Ìberwachende) RealitÀt ab
  + Jedes bekommt frei wÀhlbaren INTERNEN Namen --> BEZEICHNER (analog Prog.)
    --> BAUKASTEN basierend auf BEZEICHNERN
  + Muss nicht mit EXTERNEM Namen ÃŒbereinstimmen (z.B. Benutzer, Gruppe, Host)
  + 12/14 Objekttypen möglich (z.B. Host, Service, Contact, ...)
  + Jedes Objekt hat bestimmte ATTRIBUTE, die seine Eigenschaften beschreiben
    (Attribute haben FESTE Namen, z.B. "host_name", "service_description")
  Q: "In Nagios ist alles ein Objekt"  (analog "In Linux ist alles eine Datei")
  Q: "In Nagios hat alles einen Namen" (analog "Jede Datei hat einen Namen")
  --> DSL = Domain Specific Language
      Einheitliche SCHNITTSTELLE zw. Nagios, GUI, Datenbank, AddOns, ...

* Per EDITOR in Form von TEXTDATEIEN konfiguriert (ursprÃŒnglich keine GUI!)
  (z.B. aus bereits vorhandenen Inventarlisten per Skript generieren ;-)
  + NAMEN der Textdateien sind irrelevant
    (spiegeln aber oft Internen Namen oder Typ von Objekten wider)
  + Einlese-Reihenfolge und Reihenfolge der Objekt-Definitionen irrelevant
  + Entscheidend ist, dass nach dem Einlesen aller Konfigurationsdateien
    ALLE verwendeten Namen aufgelöst werden können (d.h. definiert sind)

* Konfiguration wg. Vielzahl an Einstellungsmöglichkeiten oft kritisiert
  + Objekte haben sehr viele Attribute
  + ZusammenhÀnge zwischen Objekten komplex (implizit + explizit)
  + Analoges Problem bei:
    - Samba mit "smb.conf" (SWAT = Samba Web Admin Toolkit)
    - Apache mit "httpd.conf"
    - ...

* GRÜNDLICHE PLANUNG der Konfiguration passend zur eigenen Struktur wichtig
  + "Mal schnell loslegen" fÃŒhrt ins Chaos!
  + Besser:
    - AUFTEILUNG auf Konfigurations-Dateien gut ÃŒberlegen
    - GUTE NAMEN fÃŒr alles vergeben (sprechend/intuitiv)
    - GRUPPEN von Hosts/Services bilden und gemeinsam behandeln
    - TEMPLATES fÌr gleichartige GerÀte/Dienste einsetzen + vererben
    - MAKROS fÌr oft verwendete Werte verwenden --> Ànderungsfreundlich!
    - Check-Kommandos generisch definieren
    - ...

* VORHER nachdenken ÃŒber
  + Netzwerkstruktur?             # Bandbreite, Firewall, Kundenanbindung, ...
  + Was ÃŒberwachen?               # Server, Router, Switches, Measures, ...
  + Wie detailliert ÃŒberwachen?   # Erreichbarkeit, OS-Daten, Spez. Aufgaben, ...
  + WorÃŒber kommunizieren         # SSH, NRPE, NSCA, NSCP, SNMP, ...
  + Womit Ìberwachen?             # Plugins suchen, auswÀhlen, programmieren ...
  + Wann ÃŒberwachen?              # Servicezeiten, Service Level Agreements, ...
  + Wen wann wie benachrichtigen? # Contact, Contactgroup, Escalation, ...
  + Wo ÃŒberwachen?                # lokal, agent, remote, verteilt, ...
  + PrioritÀten?                  # Services, Dependencies, Escalations, ...
  + SonderfÀlle und Ausnahmen     # ...

* Schlanke Konfiguration sinnvoll --> Weniger Text --> Templates + Gruppen!
  + Erleichtert Übersicht
  + Spart Zeit und Arbeit
  + Weniger fehleranfÀllig
    --> Konfiguration entschlacken -- Ballast auslagern!

* Stellt gleichzeitig System- und Netzwerk-DOKUMENTATION dar!
  --> Rechner neu aufsetzen!
  --> Rechenzentrumsumzug!

* Konfiguration von Nagios hört NIE auf!
  --> Man kann nicht alles voraussehen!
  --> Genug Zeit/Geld zum Planen und Sammeln der Daten nehmen!

* Makros einsetzen
  +---------------------------+-------------------------------+----------------+
  | Bedeutung                 | Syntax                        | Einsatzort     |
  +---------------------------+-------------------------------+----------------+
  | Installationsspezifisch   | $USER1$ .. $USER32$           | Pfad, Account  |
  |            (resource.cfg) |                               | Passwort, ...  |
  +---------------------------+-------------------------------+----------------+
  | Standard                  | $HOSTNAME$, $HOSTADDRESS$,    | Aus Objekt     |
  | (Host/Service/Contact/...)| $SERVICEDESC$, $SERVICESTATE$ | automatisch    |
  +---------------------------+-------------------------------+----------------+
  | Argument/Parameter        | $ARG1$ .. $ARG32$             | DatenÃŒbergabe  |
  |        (command argument) |                               | Cmd --> Plugin |
  +---------------------------+-------------------------------+----------------+
  | Benutzerdefiniert         | $_(HOST|SERVICE|CONTACT)...$  | Globale Variab.|
  |   (custom variable macro) |                               | (ab V3!)       |
  +---------------------------+-------------------------------+----------------+

* Basis-Makros aus "resource.cfg" (nur fÃŒr Nagios lesbar)
    $USER1$ IMMER Pfad zu Nagios-Plugin-Verz. --> verwenden!
    $USER2$ oft Pfad zu Event-Handler-Verz.   --> verwenden!
    $USER3$ oft Benutzername                  --> verwenden!
    $USER4$ oft Passwort                      --> verwenden!

* ParameterÃŒbergabe von internem auf externes Kommando
  + Durch "!" getrennt (Leerraum zÀhlt)
  (Reihenfolge --> Argument-Numerierung)

   Internes Kommando                   Externes Kommando
   CHECK...!ARG1!ARG2!ARG3!...   -->   CMD... $ARG1$ ... $ARG2$ ... $ARG3$
            |    |    |                       ^          ^          ^
            |    |    +-----------------------|----------|----------+
            |    +----------------------------|----------+
            +---------------------------------+

* Aufteilung der Nagios-Bestandteile auf System-Verz.:

  +--------------+----------------------------------------------------------+
  | Verzeichnis  | Inhalt                                                   |
  +--------------+----------------------------------------------------------+
  | bin          | Nagios-Daemon und Hilfsprogramme                         |
  | etc          | Konfigurations-Dateien                                   |
  | etc/objects  | Weitere Konfigurations-Dateien (pro Objekt/Objektklasse) |
  | etc/config   | Weitere Konfigurations-Dateien                           |
  | etc/conf.d   | Weitere Konfigurations-Dateien                           |
  | libexec      | Plugins                                                  |
  | sbin         | GUI: CGI-Skripte                                         |
  | share/htdocs | GUI: Dokumentation + statische Teile                     |
  | stylesheets  | GUI: CSS-Dateien                                         |
  | var/log      | Log-Dateien                                              |
  | var/lib      | Status-Daten + Lock-Dateien                              |
  | usr/lib      | Plugins                                                  |
  +--------------+----------------------------------------------------------+

* Kontrolle des Nagios-Daemon
  + STARTPUNKT "nagios.cfg" beim START von Nagios-Daemon als Parameter angeben
      /usr/local/nagios/bin/nagios /usr/local/nagios/etc/nagios.cfg   # Quellcode
      /usr/sbin/nagios3            /etc/nagios3/nagios.cfg            # Ubuntu-Paket
  + Nagios-Daemon starten/stoppen/...
      /etc/init.d/nagios3 start     # oder: service nagios3 start
      /etc/init.d/nagios3 stop      # oder: service nagios3 stop
      /etc/init.d/nagios3 restart   # oder: service nagios3 restart
      /etc/init.d/nagios3 reload    # oder: service nagios3 reload
      /etc/init.d/nagios3 status    # oder: service nagios3 status
  + Konfiguration nach JEDER Änderung auf Korrektheit "verifizieren" (-v=verify):
      /usr/sbin/nagios3             -v /etc/nagios3/nagios.cfg
      /usr/local/nagios/sbin/nagios -v /usr/local/nagios/etc/nagios.cfg

15) Warum keine GUI zur Konfiguration?   (Toc)

* Verleitet zum Anfangen ohne VorÃŒberlegung und Nagios-Einarbeitung ;-)

* Zuviele Einstellungsmöglichkeiten in Konfigurations-Dateien machen
  Realisierung vollstÀndiger GUI schwer (mit jeder Nagios-Version mehr)

* Namensvergabe fÃŒr Objekte immens wichtig --> Keinem Tool ÃŒberlassen!

* Bindung an GUI --> Was ist wenn GUI nicht mehr weiterentwickelt wird?
  (schon mehrfach passiert)

* Es gibt "professionelle" GUI-AnsÀtze (gut und schlecht gleichermassen)
  + Warum "weitere Abstraktionsschicht/Metaebene" einziehen,
    deren Logik/Denkweise man zusÀtzlich verstehen muss?
  + Verstehen muss man Struktur/Arbeitsweise von Nagios sowieso!
  + Viele Daten in GUI erfassen unangenehm + fehleranfÀllig
  + Datensicherung und Wiederherstellung schwieriger
  + Schließt Konfiguration per Editor in Datei aus
    (Reihenfolge, Struktur, Formatierung, Kommentare gehen verloren)

* Namen, Struktur und Kommentare der Konfigurations-Dateien
  + Gehen beim Einlesen/Generieren der Konfiguration verloren
  + Automatisch nur starre Aufteilung machbar:
    - Nur eine Datei
    - Pro Objekttyp eine Datei?
    - Pro Objektgruppe eine Datei?
    - Pro Objekt eine Datei?

* Trotzdem hier eine Liste interessanter GUIs zur Nagios-Konfiguration:
  + Centreon
  + Fruity
  + Ignoramus (Configuration Generator)
  + LConf (LDAP-basiert)
  + Lilac
  + Monarch (Groundwork Monitor Agent)
  + Nag2Web
  + Nagat (Nagios Administration Tool)
  + Nagmin (Nagios Administration)
  + NagiosAdmin(istrator)
  + NagiosQL (PHP+MySQL-basiert)
  + Nagiosweb
  + NConf (Enterprise Nagios Configurator)
  + NCPL (Nagios Control Panel)
  + OneCMDB (Configuration Management Database)
  + OpCfg
  + Thruk (check_mk)
  + TKmon (Thomas Krenn)
  + WATO (Check_MK's Web Administration Tool)

16) Kommunikationsarten Nagios-Server <-> Plugins (GRAFIK)   (Toc)

* Auch remote von Nagios angestoßene Checks heißen "Plugin"!

* Übersicht Kommunikationsarten Nagios-Server <-> Plugins
    a = Active  = Synchron  = Ausgelöst vom Nagios-Daemon
    p = Passive = Asynchron = Extern ausgelöst (z.B. auf zu Ìberwachendem System)
    K = UnverschlÃŒsselt (Klartext)
    C = VerschlÃŒsselt (encrypted)
    c = Wahlweise verschlÃŒsselt
    H = Beliebige Hardware
    u = Unix/Linux-Rechner (meist)
    U = Unix/Linux-Rechner (ausschließlich)
    w = Windows-Rechner (meist)
    W = Windows-Rechner (ausschließlich)
    P = PLUGIN = Client                                              +-----+
    D = DAEMON = Vermittler                                          | GUI |
                                                                     +--+--+
  NAGIOS-SERVER (lokal)                                                 |
  #=====================================================================|======#
  # #===========#            #===============#                          |      #
  # # Service/  #            # Nagios Daemon #<-----------------------+ |      #
  # # Resource  #            #=======+=======#                        | |      #
  # # (lokal)   #                    |                         +------+-v----+ #
  # #==^========#                    |                         |Externe Kmdo-| #
  #    |  +-----------+--------------+---------+---------+     |Schnittstelle| #
  #    |  |           |              |         |         |     +--^-------^--+ #
  #    |  |           |              |         |      +--v---+    |       |    #
  # +--+--v-+  +------v-----+ +------v---+ +---v----+ |check_| +--+---+ +-+--+ #
  # |check_*|  |check_by_ssh| |check_nrpe| |check_nt| | snmp | |SNMPtt| |nsca| #
  # |   P   |  |      P     | |    P     | |   P    | |  P   | |  D   | | D  | #
  # +----+--+  +------+-----+ +---+------+ +---+----+ +--+---+ +--^---+ +-^--+ #
  #======|============|===========|============|=========|=»======|=======|====#
         |            |           |            |         |        |       |
        K|a          C|a         c|a          c|a       c|a      c|p     c|p
        u|w          U|          u|w           |W       u|H      u|H     u|w
  #======|============|===========|============|=========|========|=======|====#
  # #====v====#   +---v---+  +----v---+ +------v---+ +---v---+ +--+-+ +---+--+ #
  # # Service #   | sshd  |  |  nrpe  | |  NSCP   D| | snmpd | |SNMP| |send_ | #
  # #(öffentl)#   |   D   |  |(xinetd)| | NC_Net   | |   D   | |trap| | nsca | #
  # #=========#   +---+---+  |    D   | |NSClient++| ++----+-+ +--^-+ |  P   | #
  #                   |      +----+---+ |   +----+-+  |    |      |   +--^---+ #
  # #==========#      |           |     :int:    |    |    |      |      |     #
  # # Service/ #  +---v---+   +---v---+ :CMD:  .....  | +--v----+ |  +---+---+ #
  # # Resource #  |check_*|   |check_*| .....  :ext:  | |check_*| |  |Lokales| #
  # # (lokal)  #  |   P   |   |   P   |    |   :CMD:  | |   P   | |  |Skript | #
  # #====^=====#  +---+---+   +---+---+    |   .....  | +---+---+ |  +---+---+ #
  #      |            |           |        |     |    |     |     |      |     #
  #      +------------+-----------+--------+-----+----+-----+-----+------+     #
  #============================================================================#
  ÜBERWACHTER HOST (remote)


  NAGIOS-SERVER (lokal)
  #===================#
  # +---------------+ #              Delegation des
  # | Nagios Daemon |-#------------+ Kommunikations-
  # +---------------+ #            | aufwands
  #===================#     +------v-----+
                            | check_http | P
                            +------+-----+
                                  -|a   HTTP-Protokoll
                                   |W
                          #========v=======#
                          # NWSC (Windows) # 3. Rechner (D)
                          #========+=======#
  #===================#            | WMI (Windows Management Instrumentation)
  #                   # <----------+ (automatische Authentifizierung)
  #===================#              (spart Installation auf ÃŒberwachten Hosts)
  ÜBERWACHTER HOST (remote)

* Überwachung von Netzwerk-Diensten (öffentlicher Service) ist einfach und
  schnell einzurichten (Nagios ist auch nur Nutzer/Client eines solchen)
  + IP + Port
  + Evtl. Anmeldedaten notwendig
  + Evtl. Proxy notwendig
  + Verschiedene PrÃŒfungsebenen:
    + Verbindung herstellbar (Dienst antwortet)
    + Protokoll-Startdialog korrekt (z.B. Dienst-Version ermitteln)
    + Protokoll-Abfrage mit korrekter Antwort (vollstÀndige Kommunikation)

* FÃŒr Remote-Check lokaler Systemparameter/Dienste ist ein "Agent/Vermittler"
  (Helferlein, Bindeglied, Proxy) notwendig (SSH, NRPE, NSCP, SNMP, NSCA, NWSC)

* SSH
  + Daemon "sshd" oft bereits installiert (Linux)
  + Von Nagios angestoßen ("Active")
  + VORHER SchlÌsselaustausch nötig fÌr Anmeldung OHNE Passwort/Passphrase!
  + VORHER mind. 1x Verbindungsaufbau testen (evtl. Eingabe von "yes" notwendig)
  + Aufwendiger Verbindungsaufbau
    --> Q: "Da kommt die BrÃŒh' teurer als das Fleisch"
  + Extrem sicheres "Rohr" auf Basis extrem unsicherer Konfiguration aufbauen
    - Durch das "Rohr" ist zunÀchst alles erlaubt
    - Missbrauchbar zum AusfÃŒhren beliebiger Kommandos (umkonfigurierbar)
  + Client "check_ssh" + Daemon "sshd" + Konfiguration "/etc/ssh/sshd_config"
  + sshd-Daemon + Plugins auf ÃŒberwachtem Rechner notwendig

                                   +-------------------------------------------+
                                   |              +----------+   +-----------+ |
                                   |          #==>|check_disk|==>| Local     | |
                                   |          #   +----------+   | Rescources| |
                                   |          #                  | and       | |
                                   |          #   +----------+   | Services  | |
  +----------------------------+   |          #==>|check_load|==>+-----------+ |
  | +------+   +------------+  |SSH|  +----+  #   +----------+                 |
  | |Nagios|==>|check_by_ssh|========>|sshd|==#                +---------------+
  | +------+   +------------+  |   |  +----+  #   +----------+ |  +----------+
  +----------------------------+   |          #==>|check_http|===>| Remote   |
         Monitoring Host           |          #   +----------+ |  | Services |
                                   |          #                |  | on other |
                                   |          #   +----------+ |  | Hosts    |
                                   |          #==>|check_ftp |===>|          |
                                   |              +----------+ |  +----------+
                                   +---------------------------+
                                       Remote Linux/Unix Host

* NRPE (Nagios Remote Plugin Executor)
  + Analog SSH-Verbindung, aber "billiger"
  + VerfÃŒgbar fÃŒr Linux, UNIX, BSD, MacOS, Windows
  + Von Nagios angestoßen ("Active")
  + FÃŒhrt beliebig viele Tests aus ("indirekte Checks")
  + Reicht Ergebnis an Nagios zurÃŒck
  + Client "check_nrpe" + Daemon "nrpe" + Konfiguration "nrpe.cfg"
  + Verbindung unverschlÌsselt und verschlÌsselt (SSL) möglich
  + NRPE-Daemon/Dienst + Plugins auf ÃŒberwachtem Rechner notwendig

                                    +------------------------------------------+
                                    |             +----------+   +-----------+ |
                                    |         #==>|check_disk|==>| Local     | |
                                    |         #   +----------+   | Rescources| |
                                    |         #                  | and       | |
                                    |         #   +----------+   | Services  | |
  +---------------------------+     |         #==>|check_load|==>+-----------+ |
  |  +------+   +----------+  | SSL | +----+  #   +----------+                 |
  |  |Nagios|==>|check_nrpe|=========>|NRPE|==#                +---------------+
  |  +------+   +----------+  |     | +----+  #   +----------+ |  +----------+
  +---------------------------+     |         #==>|check_http|===>| Remote   |
         Monitoring Host            |         #   +----------+ |  | Services |
                                    |         #                |  | on other |
                                    |         #   +----------+ |  | Hosts    |
                                    |         #==>|check_ftp |===>|          |
                                    |             +----------+ |  +----------+
                                    +--------------------------+
                                       Remote Linux/Unix Host

* NSCP (Nagios Service Check Protocol)
  + FÃŒr Windows (NC_Net, NSClient++) -- inzw. auch fÃŒr Linux
  + Von Nagios angestoßen ("Active")
  + Keine Plugins auf Remote-Rechner notwendig
    - Daemon kann bereits alle Informationen ermitteln
    - Erweiterung kann auch beliebige Kommandos/Skripte remote ausfÃŒhren
  + Client "check_nt" + Daemon "nscp" + Konfiguration "nsclient.ini/NSC.ini"
  + Verbindung unverschlÌsselt und verschlÌsselt (SSL) möglich
  + NSCP-Daemon/Dienst auf ÃŒberwachtem Rechner notwendig

                                    +--------------------------------+
  +---------------------------+     |  +----------+   +-----------+  |
  |  +------+   +----------+  | NSCP|  |  NSCP    |   | Local     |  |
  |  |Nagios|==>| check_nt |==========>| NC_Net   |==>| Rescources|  |
  |  +------+   +----------+  |     |  |NSClient++|   | and       |  |
  +---------------------------+     |  +----------+   | Services  |  |
         Monitoring Host            |                 +-----------+  |
                                    +--------------------------------+
                                           Remote Windows Host

* SNMP (Simple Network Management Protocol)
  + Daemon "snmpd" oft bereits installiert (Linux)
  + (Fast) alle netzwerkfÀhige GerÀte (Router, Switch, Drucker) dazu fÀhig
  + Neben Lesen von Daten auch Schreiben von möglich (Anweisungen/Konfiguration)
  + Existenz einer gewissen Anz. von Prozessen ÃŒberwachen ist eingebaut
  + Implementierung oft nicht dokumentiert bzw. unvollstÀndig/fehlerhaft
    (z.B. bei Cisco)
  + Kann beliebige Skripte auf Client-Seite aufrufen, d.h.
    missbrauchbar zum AusfÃŒhren von Kommandos (Linux: snmpd + exec)
  + Client "check_snmp" + Daemon "snmpd" + Konfiguration "/etc/snmp/snmpd.conf"
  + Verbindung unverschlÌsselt und verschlÌsselt (ab SNMPv3) möglich

                                      +-----------------------------------+
  +-----------------------------+     |                    +-----------+  |
  |  +--------+   +----------+  |     |  +-------------+   | Local     |  |
  |  | Nagios |==>|check_snmp|==========>| SNMP-Daemon |==>| Resources |  |
  |  +--------+   +----------+  |     |  +-------------+   | and       |  |
  +-----------------------------+     |                    | Services  |  |
         Monitoring Host              |                    +-----------+  |
                                      +-----------------------------------+
                                             Remote (Monitored) Host

* SNMPtrap (Simple Network Management Protocol)
  + Wird von sich aus tÀtig
  + Liefert Ergebnisse an Nagios zurÃŒck ("Passive")

                                      +--------------------------------+
  +-----------------------------+     |                 +-----------+  |
  |  +--------+     +--------+  |     |  +----------+   | Local     |  |
  |  | Nagios |<====| SNMPtt |<==========| SNMPtrap |<==| Resources |  |
  |  +--------+     +--------+  |     |  +----------+   | and       |  |
  +-----------------------------+     |                 | Services  |  |
         Monitoring Host              |                 +-----------+  |
                                      +--------------------------------+
                                            Remote (Monitored) Host

* NSCA (Nagios Service Check Acceptor)
  + Wird von sich aus tÀtig
  + Liefert Ergebnisse an Nagios zurÃŒck ("Passive")
  + Erlaubt verteilte und mehrstufige Nagios-Setups
  + Auslösen z.B. mit Cron/NSClient++/Windows-Taskmanager
  + Verbindung unverschlÌsselt und verschlÌsselt möglich
  + Sinnvoll z.B. fÌr extreme LanglÀufer auf Remote-Seite
    (Ergebnis liegt irgendwann vor, z.B. Backup)
  + Aufwand gegenÃŒber aktivem Checkaufruf niedriger
    (Nagios kann mehr ÃŒberwachen)

  +---------------------------+     +-----------------------------------+
  |  +--------+     +------+  |     |  +-----------+   +-------------+  |
  |  | Nagios |<====| nsca |<==========| send_nsca |<==| Remote Appl |  |
  |  +--------+     +------+  |     |  +-----------+   +-------------+  |
  +---------------------------+     +-----------------------------------+
         Monitoring Host                   Remote (Monitored) Host

* NWSC (Nagios Windows Service Checker)
  + Auf EINEM Windows Rechner zu installieren (Perl + Module)
  + Muss DomÀnenenadministrator-Rechte haben
  + WMI-Abrufe von anderen Windows-Rechner (Windows Management Instrumentation)
  + AuftrÀge per HTTP-Anfrage
  + RÃŒckgabe der WMI-Daten per HTTP-Antwort

                                                     Remote (Monitored) Hosts
                                                        +---------------+
  +-----------------------------+                   #==>| Windows Slave |
  |  +--------+   +----------+  | HTTP +------+ WMI #   +---------------+
  |  | Nagios |==>|check_nwsc|========>| NWSC |=====#
  |  +--------+   +----------+  |      +------+     #
  +-----------------------------+       Windows     #==> ...
          Monitoring Host               Master

* Check_MK (Mathias Kettner --- teilweise kostenpflichtig)
  + Ersatz + Erweiterung von NRPE/NSClient/...
  + NRPE --> MRPE (MK Remote Plugin Executor)
  + Administration per Web-GUI "WATO" (Check_MK's Web Administration Tool)
  + Check-Klassifizierung
  + FÃŒr Windows (fertiges EXE) + Linux + ...
  + Windows Events monitorbar
  + VerschlÃŒsselt
  + Erweiterbar mit beliebiger Programmiersprache
  + Nötig zum Übersetzen: g++, gdlib, xml2lib, ...
  + BÜNDELUNG aller Service-Checks fÃŒr jeden Rechner (EINE Abfrage statt N)
  + Teil von OMD = Open Monitoring Distribution (kostenpflichtig, Support)
  + Keine Konfiguration nötig --> MK-Livestatus + MK-Multisite
    --> Konfigurations-Dateien automatisch erzeugt
    - Viele kleine
    - Nicht mehr editierbar weil wieder automatisch ÃŒberschrieben
  + --> "Netzwerk-Monitoring mit OMD und Check_MK" in c't 24/2012, Seite 190

  Allzweck-Nagios-Plugin zum Lesen von Daten. Verfolgt neuen Ansatz zum Sammeln
  der Daten von Betriebssystemen und Netzwerk-Komponenten. Macht "NRPE",
  "check_by_ssh", "NSClient" und "check_snmp" ÃŒberflÃŒssig und hat viele
  Vorteile, insbesondere eine signifikante Reduktion des CPU-Verbrauchs auf dem
  Nagios-Host und eine automatische Inventarisierung der Objekte auf den zu
  prÃŒfenden REMOTE-Hosts. Je größer die Nagios-Installation, desto hilfreicher.

* Weitere Vermittler/Bindeglieder/Plugins:
  + check_multi   #
  + NCPA   = Nagios Cross Platform Agent
  + NERD   = Nagios Event Radio Dispatcher (Query Handler)
  + NRDP   = Nagios Remote Data Processor
  + NSTI   = Nagios SNMP Trap Interface
  + SNMPTT = SNMP Trap Translator
  + ...

17) Check-Agent Konfiguration   (Toc)

* Check-Agent: Verbindet Nagios-Daemon und Remote-Plugin (Server-Client-Prinzip)
  + SSH  (Secure Shell)                     #                          (Aktiv)
  + NRPE (Nagios Remote Plugin Executor)    # Analog snmpd             (Aktiv)
  + NSCA (Nagios Service Check Acceptor)    # Analog SNMPTrap          (Passiv)
  + NSCP (Nagios Service Check Protocol)    # Analog NRPE fÃŒr Windows  (Aktiv)
  + NWSC (Nagios Windows Service Checker)   # WMI fÃŒr Windows          (Aktiv)
  + SNMP     # Beliebige Skripte auf Client-Seite aufrufen             (Aktiv)
  + SNMPTrap # Automatisch Skript auf Client --> Nagios-Server Cmdfile (Passiv)

17.1) SSH (check_by_ssh)   (Toc)

* Einfachstes Werkzeug zum Überwachen von REMOTE-Linux-Systemen
  + "Kleiner Wrapper" rund um beliebiges Check-Plugin
    (fÌhrt vor und nach Plugin etwas zusÀtzliche Logik durch)
  + Auf REMOTE keine Installation weiterer Software notwendig
    außer dort aufzurufendes check_...-Skript (oder einfach alle Nagios-Plugins)

* Erfordert "echte Anmeldung" auf REMOTE-System als Benutzer "nagios"
  --> Vollwertiger Zugriff auf Kommandozeile
  --> Benutzeraccount mit schlÃŒsselbasierter Anmeldung (ohne Passphrase) MUSS fÃŒr
      Benutzer "nagios" auf REMOTE-System vorhanden sein (Login-Shell, Homeverz.)

* 5 Parameter
  + Benutzername           # Auf REMOTE-System (implizit "nagios" oder -l USER)
  + SSH-Port               # Auf REMOTE-System (implizit "22" oder -p PORT)
  + Zu nutzendes Keyfile   # Auf lokalem System (implizit, keine Passphrase)
  + Aufzurufendes Plugin   # Auf REMOTE-System
  + Parameter fÃŒr Plugin   # Auf REMOTE-System

* Beispiel (als Benutzer "nagios" manuell durchgefÃŒhrt!)
    ssh nagios@REMOTE
    /usr/lib/nagios/plugins/check_disk -w 10 -c 5 /
    exit
  ersetzbar durch (als Benutzer "nagios" durchgefÃŒhrt!)
    sudo -u nagios /usr/lib/nagios/plugins/check_by_ssh -H REMOTE -C "/usr/lib/nagios/plugins/check_disk -w 10 -c 5 /"

* Einrichten auf NAGIOS:
   su - nagios            # --> /var/lib/nagios (Heimatverz. Nagios-Benutzer)
   ssh-keygen -t dsa      # --> /var/lib/nagios/.ssh/id_dsa
                          #     /var/lib/nagios/.ssh/id_dsa.pub
   ls -l ~/.ssh           # --> id_dsa
                          #     id_dsa.pub

* Einrichten auf REMOTE:
   ssh REMOTE                                               # Auf REMOTE anmelden
   sudo useradd -m -d /var/lib/nagios -s /bin/bash          # User anlegen
   su - nagios                                              # nagios anmelden
   mkdir .ssh                                               # Verz. anlegen
   exit                                                     # nagios abmelden
   exit                                                     # REMOTE verlassen
   scp .ssh/id_dsa.pub nagios@REMOTE:.ssh/authorized_keys   # Öff. Key kopieren
   ssh-copy-id nagios@REMOTE                                # (alternativ)

* Einrichten auf NAGIOS:
   su - nagios                                              # Nagios-Benutzer
   ssh nagios@REMOTE                                        # 1x anm. + "yes"
   exit                                                     # REMOTE verlassen

* Ausprobieren auf NAGIOS:
   su - nagios                                              # Nagios-Benutzer
   ssh nagios@REMOTE                                        # Muss
   sudo -u nagios \                                         #  ohne
     /usr/lib/nagios/plugins/check_by_ssh -H REMOTE \       #   Passwort
       -C '/usr/lib/nagios/plugins/check_disk -w 10 -c 5 /' #    funktionieren!

* Letzten Endes hat folgender Austausch des öffentlichen SchlÌssels "*.pub" der
  jeweiligen Gegenstelle "ÃŒber Kreuz" stattgefunden:

                                   ANMELDUNG
          ssh nagios@REMOTE ==========================> sshd
            +---------+         SSH-Protokoll       +----------+
            | NAGIOS  |                             |  REMOTE  |
            +----+----+                             +-----+----+
                 |                                        |
  (manuell erzeugt: ssh-keygen -t rsa)       (bei Installation automat. erzeugt)
  /var/lib/nagios/.ssh/id_rsa (NICHT KOP!)   /etc/ssh/ssh_host_rsa_key (NICHT KOP!)
  /var/lib/nagios/.ssh/id_rsa.pub            /etc/ssh/ssh_host_rsa_key.pub
                 |                                        |
                 |    (automatisch bei 1. ssh + "yes")    |
           +-----|----------------------------------------+
           |     |
           |     +----------------------------------------+
           |                     (manuell)                |
           v                                              v
  /var/lib/nagios/.ssh/known_hosts # oder  /var/lib/nagios/.ssh/authorized_keys
  /etc/ssh/ssh_known_hosts         #       (NICHT: /etc/ssh/authorized_keys!)

17.2) NRPE (Nagios Remote Plugin Executor)   (Toc)

* Indirekte Checks analog SNMP

* Verglichen mit "check_by_ssh"
  + Keine echte Anmeldung, sondern Protokoll (Port 5666)
  + Minimal höherer Konfigurationsaufwand
    - NRPE-Dienst auf ÃŒberwachten Rechnern installieren + konfigurieren
  + Erheblicher Sicherheitsgewinn
    - Liste der verfÃŒgbaren Kommandos auf ÃŒberwachtem Rechner konfiguriert

* Detailliert steuerbar
  + Welche Kommandos Nagios auf ÃŒberwachtem Rechner ausfÃŒhren darf
  + Sogar welche Parameter Nagios dabei verwenden darf
  + Es sind aber auch Parameter ÃŒbergebbar

* Paket "nrpe(-server)" (bzw. NSClient++ unter Windows) auf REMOTE und
  Plugin "check_nrpe" auf NAGIOS installieren

* Notwendige Tools
  + Client "check_nrpe"           # Auf NAGIOS-Host
  + Server "nrpe" (NRPE-Dienst)   # Auf ÃŒberwachtem Rechner REMOTE

* Konfiguration in "nrpe.cfg" auf ÃŒberwachtem Rechner
    /etc/nagios/nrpe.cfg             # Dienst auf ÃŒberwachten Rechner
       allow_hosts = 192.168.1.10                    # Ein Rechner
       allow_hosts = 192.168.1.10,192.168,1.11,...   # Liste von Rechnern
       allow_hosts = 192.168.1.0/24                  # Netzwerk
       libexecdir = /usr/lib/nagios/plugins
       command[check_users] = @libexecdir@/check_users -w 5 -c 10
       command[check_load]  = @libexecdir@/check_load -w 15,10,5 -c 30,25,20
       command[check_disk1] = @libexecdir@/check_disk -w 20 -c 10 -p /dev/hda1
       command[check_disk2] = @libexecdir@/check_disk -w 20 -c 10 -p /dev/hdb1
    /etc/init.d/nrpe reload   # oder service nrpe reload

* Konfiguration in "nrpe.cfg" auf Nagios-Host
    /etc/default/nagios-nrpe-server  # Dienst auf Remote-Host
    /etc/nagios/commands/nrpe.cfg    # Client auf Nagios-Host
  +-----------------------------------------------------------------+
  | define command {                                                |
  |   command_name  check_nrpe                                      |
  |   command_line  $USER1$/check_nrpe -H $HOSTADDRESS$ -c "$ARG1$" |
  | }                                                               |
  +-----------------------------------------------------------------+
  | define service {                                                |
  |   use                  service-template-interval-1min           |
  |   service_description  LOAD                                     |
  |   host_name            linux1                                   |
  |   check_command        check_nrpe!check_load                    |
  | }                                                               |
  +-----------------------------------------------------------------+

* Alternative Konfigurations-Datei
    /etc/nagios/nrpe-local.cfg    # Client auf Nagios-Host
    /etc/nagios/nrpe.d/*          # Client auf Nagios-Host

17.3) NSCA (Nagios Service Check Acceptor)   (Toc)

* Paket "nsca(-server)" auf NAGIOS und "nsca-client" auf REMOTE installieren
  (bzw. NSClient++ auf Windows-REMOTE)

* Konfiguration auf Nagios-Server
  /etc/nagios3/nagios.cfg
    check_external_commands = 1             # Datei mit NSCA-Nachrichten lesen
    command_check_interval  = -1            # Möglichst oft
    command_file            = /var/lib/nagios3/rw/nagios.cmd  # Kommando-Datei
  /etc/nsca.cfg
    server_port    = 5667                             # Default
    server_address =                                  # Alle Interfaces
    nsca_user      = nagios                           # Analog nagios-Dienst
    nsca_group     = nogroup                          # (irrelevant)
    command_file   = /var/lib/nagios3/rw/nagios.cmd   # Analog nagios-Dienst
    password       = geheim                           # Gemeinsames Geheimnis
    decryption_method = 3                             # 3=3DES

* NSCA-Daemon manuell starten
  (automatischer Start beim Reboot bei Installation eingerichtet)
    sudo /etc/init.d/nsca start     # SysVinit - Dienst manuell aktiv
    service nsca start              # upstart  - Dienst manuell aktiv
    systemctl start nsca.service    # systemd  - Dienst manuell aktiv
    systemctl enable nsca.service   #          - Dienst automatisch aktiv
    systemctl disable nsca.service  #          - Dienst automatisch inaktiv

* Konfiguration auf Client-Rechnern (u1,u2,u3)
  + Linux "/etc/send_nsca.cfg":
      password          = geheim      # Gemeinsames Geheimnis
      decryption_method = 3           # 3=3DES
  + Windows "C:\Programs\NSClient++\nsclient.ini":
      [/settings/NSCA/client]
      hostname=win_${host}
      [/settings/NSCA/client/targets/default]
      address           = NAGIOS      # Nagios-Server
      password          = geheim      # Gemeinsames Geheimnis
      decryption_method = 3           # 3=3DES
      use ssl           = 0           # SSL nicht benutzen

* Testen auf NAGIOS (-d=delimiter, Status 3=CRITICAL)
    echo "localhost;3;CRITICAL TestNSCA..." |
       send_nsca -H localhost -d ";"
  Muss auf NAGIOS auftauchen in "/var/log/nagios.log":
    grep "TestNSCA..." /var/log/nagios3/nagios.log
    --> [1430904142] EXTERNAL COMMAND: PROCESS_HOST_CHECK_RESULT;localhost;3;CRITICAL TestNSCA...

* Nachricht von Client an Nagios-Server schicken (per NSCA-Protokoll)
  + Zeile mit 4/3 per Trennzeichen (Std: Tabulator) getrennten Textfeldern
    (eine oder mehrere Zeilen erlaubt, z.B. am Ende eines Backup-Skriptes)
      HOST                STATUS_CODE  MESSAGE         # Host-Check
      HOST  SERVICE_DESC  STATUS_CODE  MESSAGE         # Service-Check
  + Beispiel (von REMOTE=10.0.2.90 an NAGIOS=10.0.2.1)
    - Host-Nachricht (Status 0 = UP)
        echo "10.0.2.90;0;OK Test..." |                # -H=NAGIOSHOST
          send_nsca -H 10.0.2.1 -d ";"                 # -d=DELIMITER
    - Service-Nachricht (Status 0 = OK)
        echo "10.0.2.90;TestService;0;OK Test..." |    # -H=NAGIOSHOST
          send_nsca -H 10.0.2.1 -d ";"                 # -d=DELIMITER

* Nachricht von Client an Nagios-Server schicken (per SSH-Protokoll)
  + Zeile mit 4/5 per Trennzeichen ";" getrennten Textfeldern
      PROCESS_HOST_CHECK_RESULT     HOST                STATUS_CODE  MESSAGE
      PROCESS_SERVICE_CHECK_RESULT  HOST  SERVICE_DESC  STATUS_CODE  MESSAGE
  + Beispiel (von REMOTE=10.0.2.90 an NAGIOS=10.0.2.1)
    - HOST-Nachricht (Status 0 = UP)
        echo -e "PROCESS_HOST_CHECK_RESULT;10.0.2.90;0;OK TestNSCA..." |
          ssh 10.0.2.1 "cat > /var/lib/nagios3/rw/nagios.cmd"
    - Service-Nachricht (Status 0 = OK)
        echo -e "PROCESS_SERVICE_CHECK_RESULT;10.0.2.90;Passive_Test;0;OK TestNSCA..." |
          ssh 10.0.2.1 "cat > /var/lib/nagios3/rw/nagios.cmd"

* Service-Check PASSIV einstellen mit Timeout von 1 Stunde = 3600s
  + check_command + freshness_threshold: Kommando "check_dummy" nur dann
    1x ausgefÌhrt, wenn lÀnger als 3600s keine Service-Nachricht "Passive_Test"
    am Host u1/u2/u3 ankommt
  + is_volatile: Jede einzelne StatusÀnderung zÀhlt (alle als HARD gewertet!)
      +----------------------------------------------------------+
      | define service {                                         |
      |   use                     generic-service                |
      |   check_freshness         1                              |
      |  *freshness_threshold     3600                           |
      |   host_name               u1,u2,u3                       |
      |   service_description     Passive_Test                   |
      |   check_command           check-dummy!2!No Backup        |
      |  *active_checks_enabled   0                              |
      |  *passive_checks_enabled  1                              |
      |  *is_volatile             1                              |
      |   contact_groups          admins                         |
      | }                                                        |
      +----------------------------------------------------------+

17.4) NSCP (Nagios Service Check Protocol)   (Toc)

* Umfasst NC_Net, NSClient++

* Benutzt intern NRPE-Protokoll
  C:\Programme\NSClient++                # Installation
  C:\Programme\NSClient++\nsclient.ini   # Konfigurations-Datei (NSC.ini)
    +------------------------------------------------------------------------+
    | [/modules]                                                             |
    | NRPEServer     = 1                   # NRPE Anfragen OK                |
    | NSClientServer = 1                   # NSClient (check_mt) Anfragen OK |
    | CheckSystem    = 1                   # SystemprÃŒfungen durchfÃŒhren     |
    | NSCAClient     = 1                   # Passive NSCA-Checks OK          |
    |                                                                        |
    | [/settings/NSCA/client/targets/default]                                |
    | allowed hosts  = 10.10.2.0/24        # Rechner dÃŒrfen Verb. aufnehmen  |
    | address        = 10.10.2.1           # Nagios-Host Ziel                |
    | encryption     = 3des                # Identisch zu NSCA-Dienst        |
    | password       = geheim              # Identisch zu NSCA-Dienst        |
    | use ssl        = false               # Identisch zu NSCA-Dienst        |
    +------------------------------------------------------------------------+

* Dienst einrichten unter Windows
    C:\Programme\NSClient++\nscp service --install   # Dienst einrichten
    C:\Programme\NSClient++\nscp service --start     # Dienst starten
    C:\Programme\NSClient++\nscp service --stop      # Dienst starten
    C:\Programme\NSClient++ /install                 # Dienst einrichten
    net start nsclient++                             # Dienst starten
    net stop nsclient++                              # Dienst stoppen
    nsclient++ /start                                # Dienst starten
    nsclient++ /stop                                 # Dienst stoppen

* PrÃŒfung ausfÃŒhren auf Nagios-Server
    check_nt + check_nrpe                            # Auf Nagios-Server-Seite aufrufen
    check_nt --> CLIENTVERSION,CPULOAD,UPTIME,MEMUSE,USEDDISKSPACE,SERVICESTATE,PROCSTATE
                 Alle Counter von Windows-PerfMon (Leistungsprotokolle und Warnungen)
    # -H=hostname/ip -v=variable -p=port -s=secret -l=parameter

* Beispiel
    check_nt -H $HOSTNAME$ -p 12478 -v COUNTER -l "\\Leistungsobjekt(Instanz)\\Indikator"
    check_nt -H $HOSTADDRESS$ -v COUNTER -l "\\Auslagerungsdatei(_Total)\\Belegung (%),"Paging File usage is %.2f %%" -w $ARG1$ -c $ARG2$"
    $USER1$/check_nt -H $HOSTNAME$ -v SERVICESTATE -p 12489 -s $USER4$ -l "$ARG1$"

17.5) NWSC (Nagios Windows Service Checker)   (Toc)

* "Mittler", der Aufrufe von Windows-WMI (Windows Management Instrumentation)
   zur VerfÃŒgung stellt, die eine Linux-Maschine nicht bieten kann.
* Trotzdem muss NWSC nur auf auf EINEM Windows-Rechner installiert werden.
   --> www.ostc.de/projects.html#nwsc

18) Was ist bei Plugins zu beachten?   (Toc)

* Plugins IMMER auf Kommandozeile als BENUTZER "nagios" vollstÀndig austesten
  + Unbedingt machen, um Fehlersuche zu vereinfachen!
    (Pfade, Parameter, Quotierung, Zugriffsrechte, ...)
      sudo -u nagios PLUGIN-KOMMANDO...   # Ausgabetext ansehen
      echo $?                             # Exit-Status anzeigen
    --> Enormer Vorteil!

* Nagios-Kommando
  + Verbindet Nagios-Daemon und externe Plugins
  + DurchfÃŒhrung von
    - Check
    - Notification
    - Event-Handler
  + In ZWEI SCHRITTEN definiert
    - INTERNER Kommandoname fÃŒr Kommando-Aufruf in OBJEKTEN
      . PARAMETER per "!" getrennt
      . Reihenfolge von 1..n numeriert
    - EXTERNER Kommandoname fÃŒr Plugin-Aufruf in INTERNEM Kommando
      . PARAMETER per $ARG1$ $ARG2$ ... bezeichnet
      . Numerierung entspricht Reihenfolge beim Kommando-Aufruf
  + Grund: Mehrere interne Kommandos nutzen gleiches externes Kommando
  + Verwirrend: Interner + externer Kommandoname oft gleichlautend!
  + Makro $USER1$ verwenden, enthÀlt Pfad zu Plugin-Verz.

  Nagios-------------------------------+
   ^                                   |
   |       templates.cfg               |
   |      #============================v============================# Template
   |      # define service {                                        # Definition
   |      #    name          TEMPLATE                               #
   |      #    register 0    ;UnvollstÀndiges Objekt                #
   |      # }                          |                            #
   |      #============================|============================#
   |                                   | ABLEITUNG/VERERBUNG
   |       services.cfg                |
   |      #============================v============================# Service
   |      # define service {  ;Kmdo-Aufruf                          # Object
   |      #    use            TEMPLATE   ;Basis ist TEMPLATE        # Definition
   |      #    host_name      h1         ;Rechner mit Service       #
   |      #    service_desc   s          ;Service-Name              #
   |      #    check_command  CMD_INTERN!100.0,20%!500.0,60%        # INTERNES
 Ergebnis # }                          |                            # Kommando
 (Exit-   #============================|============================#
  Code +                               | KOMMANDO-AUFRUF
  Text)    commands.cfg                |
   |      #============================v============================# Command
   |      # define command {                                        # Definition
   |      #    command_name  CMD_INTERN                             #
   |      #    command_line  $USER1$/CMD_EXTERN -H $HOSTADDRESS$ \  # EXTERNES
   |      #                            |        -w $ARG1$ -c $ARG2$ # Kommando
   |      # }                          |                            #
   |      #============================|============================#
   |                                   | PLUGIN-AUFRUF
   |                                   |
   | +---------------------------------v------------------------------------+
   | | /usr/local/nagios/libexec/CMD_EXTERN -H h1 -w 100.0,20% -c 500.0,60% |
   | | /usr/lib/nagios/plugins/CMD_EXTERN   -H h1 -w 100.0,20% -c 500.0,60% |
   | +---------------------------------|------------------------------------+
   |                                   | PLUGIN-AUSFÜHRUNG
   |     CMD_EXTERN                    |
   |   #===============================v==============================# EXTERNES-
   +---# CODE... (Shell, Perl, PHP, Awk, Python, Ruby, C-Binary, ...) # Kommando
       #==============================================================# (Skript)

* Wo Schwellwert-Parameter fÃŒr Plugin eintragen?

   +-------------------+-------------------------------------------------------+
   | Ort               | Relevant fÃŒr...                                       |
   +-------------------+-------------------------------------------------------+
   | register.cfg      | ...Nagios-Gesamtsystem                                |
   | Template          | ...jeden Host/Service, der Template benutzt (Default) |
   | Host/Service      | ...diesen Host/Service                                |
   | Externes Kommando | ...jeden Aufruf externes Kommando (Quatsch?)          |
   | Plugin-Skript     | ...jeden Aufruf des Skriptes      (Quatsch?)          |
   +-------------------+-------------------------------------------------------+

* Plugin-Verz.: /usr/local/nagios/libexec/*  # Quellcode-Installation
                /usr/lib/nagios/plugins/     # Paket

18.1) Plugin-Schnittstelle   (Toc)

* Nagios schreibt Kommunikation mit Plugins genau vor
  + Kommando mit bestimmten Optionen (Bedeutung fest definiert)
  + Exit/Returncode 0/1/2/3 je nach Status OK/WARNING/CRITICAL/UNKNOWN
  + Ausgabe ein/mehrzeiliger Text bestimmter Struktur (max. 300 Byte / 8 KByte)
  + Plugin-Ausgabe darf nach "|" Performance-Daten ("PerfData") enthalten
    --> Langfristige Trends erkennen
  + Usage-Meldung bei Aufruf ohne Parameter bzw. mit "-h/--help"
    --> Mini-Doku: in vielen FÀllen ausreichend fÌr VerstÀndnis

* Struktur EINZEILIGER Plugin-Meldungen (V2, max. 300 Byte)
  (STATUS = OK, WARNING, CRITICAL, UNKNOWN bzw. UP, DOWN, UNREACHABLE)
  + Trenner " " und " - " vorgeschrieben
  + Trenner "|" darf fehlen, wenn keine Performance-Daten vorhanden

    +--------------------------------------------------------+
    | CHECKNAME STATUS - INFOTEXT | OPTIONAL PERFORMANCEDATA |
    +--------------------------------------------------------+
     <---------------------------> <------------------------>
         FÃŒr Web-Interface             Performance-Data
           + Alarm-E-Mail

  + Beispiele
      SMTP OK - 0 seconds response time
      CHECKSAP OK - system sap123 available
      PROCS WARNING - 4 processes with command name 'pppoe'
      DISK CRITICAL - free space: /home 8627 MB (64% inode=73%);| /=4740MB;...

* Struktur MEHRZEILIGER Plugin-Meldungen (V3, max. 8192 Byte)
  (STATUS = OK, WARNING, CRITICAL, UNKNOWN bzw. UP, DOWN, UNREACHABLE)

    +--------------------------------------------------------+
    | CHECKNAME STATUS - INFOTEXT | OPTIONAL PERFORMANCEDATA | Trenner
    | LANGTEXT 1.ZEILE                                       | " ",  " - ", "|"
    | LANGTEXT 2.ZEILE                                       | vorgeschrieben
    | ...                                                    |
    | LANGTEXT N.ZEILE | OPTIONAL PERFORMANCEDATA 2.ZEILE    | Trenner " | "
    | OPTIONAL PERFORMANCEDATA 3.ZEILE                       | vorgeschrieben
    | ...                                                    |
    | OPTIONAL PERFORMANCEDATA N.ZEILE                       |
    +--------------------------------------------------------+

  + Beispiel

* Sauber definierte einfache "Kommando-Schnittstelle" (Plugin-API)
  --> Plugins unabhÀngig vom Nagios-Kern
  --> Programmiersprache beliebig (UNIX-Kommando in C, Shell, Perl, PHP, ...)
  --> Plugins bleiben kompatibel (egal ob fÃŒr Nagios V1/2/3/4/... realisiert)
  --> Plugins leicht weiterzuentwicklen, ergÀnzen, korrigieren
  --> Plugin-Skripte mÃŒssen sich aber EXAKT daran halten!

* Exit-Code-Bedeutung von Plugins (= Status)

    +------+----------+-------------------------+-------+
    | Code | Service  | Host                    | Farbe |
    +------+----------+-------------------------+-------+
    | 0    | OK       | UP                      | grÃŒn  |
    | 1    | WARNING  | UP or DOWN/UNREACHABLE  | gelb  |
    | 2    | CRITICAL | DOWN/UNREACHABLE        | rot   |
    | 3    | UNKNOWN  | DOWN/UNREACHABLE        | grau  |
    +------+----------+-------------------------+-------+

* Optionen mit reservierter Bedeutung fÃŒr Plugins
  (N=Zahl, können noch weitere spezifische Optionen haben)

    +------+--------------------+----------------------------------------+
    | Kurz | Lang               | Bedeutung                              |
    +------+--------------------+----------------------------------------+
    | -w N | --warning=N        | Schwellwert fÃŒr Warnung-Grenze(n)      |
    | -c N | --critical=N       | Schwellwert fÃŒr kritische Grenze(n)    |
    +------+--------------------+----------------------------------------+
    | -h   | --help             | Online-Hilfe ausgeben (ggf. kurz+lang) |
    | -V   | --version          | Plugin-Versionsnummer ausgeben         |
    +------+--------------------+----------------------------------------+
    | -H N | --hostname=N       | Rechner-Name/IP                        |
    | -t N | --timeout=N        | Wartezeit bis Check-Abbruch (Sek)      |
    +------+--------------------+----------------------------------------+
    | -4   | --use-ipv4         | IPv4 benutzen                          |
    | -6   | --use-ipv6         | IPv6 benutzen                          |
    +------+--------------------+----------------------------------------+
    | -v   | --verbose          | Mehr Ausgaben erzeugen (geschwÀtzig)   |
    | -v N | --verbose=N        | Analog (Level 0..3)                    |
    +------+--------------------+----------------------------------------+

* HÀufig verwendete Optionen (nicht immer gleich)

    +------+--------------------+----------------------------------------+
    | Kurz | Lang               | Bedeutung                              |
    +------+--------------------+----------------------------------------+
    | -C N | --community=N      | Community-Name bei SNMP-Abfragen       | ("public")
    +------+--------------------+----------------------------------------+
    | -u N | --user(name)=N     | Benutzer-Name fÃŒr Anmeldungen          |
    | -p N | --passw(or)d=N     | Passwort fÃŒr Anmeldungen               |
    | -a N | --authentication=N | Passwort oder REALM (Kerberos, SNMPv3) |
    | -l N | --login/logname=N  | Login-Name fÃŒr Anmeldungen             |
    +------+--------------------+----------------------------------------+
    | -u N | --url=N            | URL                                    |
    | -p N | --port=N           | Portnummer                             |
    +------+--------------------+----------------------------------------+

* Allgemeines Format von Bereichsangaben (Grenzwerte/Thresholds fÃŒr "-c" und "-w"):

    [@]START:END

  Vorgaben fÃŒr START und END:
    1. START <= END muss gelten
    2. START: darf fehlen --> START = 0
    3. END darf fehlen    --> END = unendlich (inf)
    4. "~" bedeutet negativ unendlich (-inf)
    5. Std: Nachricht wenn Wert AUSSERHALB Bereich START..END (inkl. Grenzen)
    6. "@" am Anfang --> Benachrichtigung wenn Wert INNERHALB (inkl. Grenzen)

  Hinweis: Noch nicht alle Plugins akzeptieren Bereiche in diesem Format.
  FÃŒr mehrere Grenzwerte gleichzeitig noch keine allgemeine Form festgelegt.

  Beispiele fÃŒr Bereichsformate:
    +--------+--------------------------------------------------+
    | Format | Bedeutung                                        |
    +--------+-----------------+--------------------------------+
    | 10     | < 0 oder > 10   | außerhalb Bereich [0 .. 10]    |
    | :10    | < 0 or > 10     |     "        "    [0 .. 10]    |
    | 10:    | < 10            |     "        "    [10 .. inf]  |
    | ~:10   | > 10            |     "        "    [-inf .. 10] |
    | 10:20  | < 10 oder > 20  |     "        "    [10 .. 20]   |
    | @10:20 | >= 10 und <= 20 | innerhalb    "    [10 .. 20]   |
    +--------+-----------------+--------------------------------+

  Beispiele fÃŒr Kommandozeilen:
    +----------------------+-------------------------------------------------+
    | check_...            | Bedeutung                                       |
    +----------------------+-------------------------------------------------+
    | ... -w10 -c20        | CRITICAL wenn ÃŒber 20, Warn wenn ÃŒber 10        |
    |                      |   (CRITICAL wenn weniger als 0)                 |
    | ... -w~:10 -c~:20    | Analog, negativer Werte --> OK                  |
    | ... -w10: -c20       | CRITICAL wenn ÃŒber 20, sonst Warn wenn unter 10 |
    |                      |   (CRITICAL wenn weniger als 0)                 |
    | ... -c1:             | CRITICAL wenn weniger als 1                     |
    | ... -w~:0 -c10       | CRITICAL wenn ÃŒber 10, Warn wenn ÃŒber 0         |
    | ... -c@5:6           | Noncritical Bereich ist 5:6, Rest CRITICAL      |
    | ... -c10:20          | CRITICAL wenn im Bereich 10 bis 20              |
    +----------------------+-------------------------------------------------+

* Plugin Verbosity Levels (-v)

   +-------+------------------------------------------------------------------+
   | Level | Ausgabeform                                                      |
   +-------+------------------------------------------------------------------+
   |   0   | Eine Zeile, minimale Ausgabe: Zusammenfassung                    |
   |   1   | Eine Zeile, zusÀtzliche Daten (z.B. Liste fehlerhafter Prozesse) |
   |   2   | Mehrzeilig, Debugausgabe der Konfiguration (z.B. ps-Kommando)    |
   |   3   | Mehrzeilig, viele Details zur Problemsuche in Plugins            |
   +-------+------------------------------------------------------------------+

* Beispiel Partition "/home" auf freien Platz ÃŒberprÃŒfen
  (Meldung wenn WENIGER als NN% FREI)

    df -h /home
    # --> Filesystem Size  Used Avail Use% Mounted on
    # --> /dev/sda7   14G  4.7G  8.5G  36% /home   # --> Freier Platz: 64%

    check_disk -w 10% -c 5% /home
    # --> DISK OK - free space: /home 8627 MB (64% inode=73%);| /=4740MB;12674;13378;0;14083
    #     da freier Platz 64% größer 10% (Warning) und größer 5% (Critical)
    echo $?   # --> 0 (OK)

    check_disk -w 70% -c 60% /home
    # --> DISK WARNING - free space: /home 8627 MB (64% inode=73%);| /=4740MB;...
    #     da freier Platz 64% kleiner 70% (Warning) aber größer 60% (Critical)
    echo $?   # --> 1 (WARNING)

    check_disk -w 90% -c 80% /home
    # --> DISK CRITICAL - free space: /home 8627 MB (64% inode=73%);| /=4740MB;...
    #     da freier Platz 64% kleiner 90% (Warning) und kleiner 80% (Critical)
    echo $?   # --> 2 (CRITICAL)

    check_disk -w 90% -c 80% /xyz
    # --> DISK UNKNOWN - /xyz is not accessible: No such file or directory
    echo $?   # --> 3 (UNKNOWN)

* Programmierung von Plugins (Minibeispiele fÃŒr Dummy-Plugins):

            +-----------------------------------------------+
  + Shell:  | #!/bin/bash                                   | # OK/0
            | echo "DISK OK - free space: ..."              |
            | exit 0                                        |
            +-----------------------------------------------+
  + Perl:   | #!/usr/bin/perl -w                            | # WARNING/1
            | use strict;                                   |
            | printf "DISK WARNING - free space: ...\n";    |
            | exit 1;                                       |
            +-----------------------------------------------+
  + Awk:    | #!/usr/bin/awk -f                             | # CRITICAL/2
            | BEGIN {                                       |
            |   printf("DISK CRITICAL - free space: ...\n") |
            |   exit 2                                      |
            | }                                             |
            +-----------------------------------------------+
  + PHP:    | #!/usr/bin/php -f                             | # UNKNOWN/3
            | <?php                                         |
            |     printf("DISK UNKNOWN - no info ...\n");   |
            |     exit(3);                                  |
            | ?>                                            |
            +-----------------------------------------------+
  + Python: | #!/usr/bin/python                             | # OK/0
            | use sys                                       |
            | print "DISK OK - free space: ..."             |
            | sys.exit(0)                                   |
            +-----------------------------------------------+
  + Tcl/Tk: | #!/usr/bin/tclsh                              | # WARNING/1
            | puts "DISK WARNING - free space: ..."         |
            | exit 1                                        |
            +-----------------------------------------------+
  + BATCH   | @ECHO OFF                                     | # CRITICAL/2
            | ECHO DISK CRITICAL - free space: ...          |
            | EXIT 2                                        |
            +-----------------------------------------------+
  + WSH     | wscript.echo "DISK UNKNOWN - free space: ..." | # UNKNOWN/3
            | wscript.quit 3                                | # Aufruf:
            +-----------------------------------------------+ #   cscript FILE //nologo

* Dokumentation zur Plugin-Entwicklung:
  + Nagios plug-in development guidelines
    --> nagiosplug.sourceforge.net/developer-guidelines.html

19) Auswahl von Plugins   (Toc)

* Unterscheidung:
  + LOKAL:  Auf Nagios-Server ausgefÃŒhrt
  + REMOTE: Auf Ziel-Host ausgefÃŒhrt
  + AGENT:  Ruft andere Plugins auf (NRPE, NWSC, ...)

* Plugin immer genau passend zum Einsatzzweck aussuchen
  (es gibt ein paar GENERISCHE, z.B. "check_udp", "check_tcp")

* Suche nach passendem Plugin aufwendig (und oft frustrierend 8-()
  Viele superspeziell auf EIN persönliches Problem hin geschrieben
  (z.B. DomÀnenname und Anmeldedaten fest einprogrammiert)
  --> Will man sie verwenden, muss man sie eigentlich NEU schreiben!

* Teilweise grottenschlechte QualitÀt, funktionieren nicht vernÌnftig
  --> Lange suchen oder lieber gleich selber schreiben?
  --> Q: "Da kennt jemand einen, der einen kleinen Bruder hat,
          der auch schon mal die Shell benutzt hat;
          und der schreibt dann Plugins fÃŒr Nagios,
          welche die QualitÀt von Nagios insgesamt runterziehen."

* Teilweise stimmt Usage-Meldung/man-Page/Doku nicht mit FÀhigkeiten Ìberein
  --> Quellcode lesen

* Man MUSS programmieren können (Perl, Shell, PHP, ...)
  + Kombination Shell + UNIX-Kommandozeilentools einfach + leistungsfÀhig

* SNMP
  + SNMP-fÀhige GerÀte oft schlecht dokumentiert
    --> MIB-OIDs und ihre Bedeutung zuerst ermitteln
  + SNMP-Implementierung oft fehlerhaft oder nicht vollstÀndig
  + SNMP oft nicht vom Hersteller supported (Checkpoint-Firewalls!)
    --> Viel Ausprobieren nötig
    --> Update der GerÀte-SW --> Alles wieder anders
  + Abfrage + Antwort oft UNverschlÃŒsselt

* Datenausgabe von GerÀten oft unstrukturiert und zu gross
  Relevante Daten im "Sumpf" zu suchen aufwendig
  --> Problem der Plugins, nicht von Nagios.
      Q: "Nagios kann nur soviel wie die zugrunde liegende Soft/Hardware"

* Man muss einen VERLÄSSLICHEN Mechanismus (auf der Kommandozeile) haben,
  um mit GerÀten (z.B. Switch, ThermofÌhler) zu reden. Hat man den ---
  völlig unabhÀngig von Nagios --- kann man sie auch mit Nagios Ìberwachen.

* Sind auf der Kommandozeile keine Daten von einem GerÀt erhÀltlich,
  dann ist es mit Nagios nicht ÃŒberwachbar
  --> GerÀte mit wunderschöner Java/Flash-WeboberflÀche (aber "geheimer" API)
      evtl. mit Nagios nicht Ìberwachbar (IBM Raid --> GUI IBM Director nötig)

* Wenn möglich NICHTS auf EndgerÀten installieren (Aufwand vermeiden)
  --> Oft wird "snmpd" unter Linux "vergewaltigt" und zum Mittler gemacht,
      da er Prozesse ÃŒberwachen (vorhanden, Anzahl),
      beliebige Skripte aufrufen und
      Ergebnis via SNMP zurÃŒckgeben kann (z.B. "raidcheck"-Skript)

20) Standard-Plugins   (Toc)

* Manche sind symbolische Links auf anderes Plugin (nur anderer Plugin-Name)

* Liste: ls /usr/local/nagios/libexec/*    # Aus Quellcode installiert
         ls /usr/lib/nagios/plugins/*      # Als Paket installiert

    +---------------+---------------------------------------------------+
    | Plugin check_ | Beschreibung                                      |
    +---------------+---------------------------------------------------+
    | apt           | Ausstehende Updates von Debian/Ubuntu-Systemen    |
    +---------------+---------------------------------------------------+
    | bgpstate      | ...                                               |
    | breeze        | SignalstÀrke Breezcom Wireless GerÀt per SNMP     |
    | by_ssh        | Plugin remote per SSH ausfÃŒhren (kapseln)         |
    +---------------+---------------------------------------------------+
    | clamd         | CLAMD-Verbindungen (Link --> check_tcp)           |
    | cluster       | Erg. mehrerer Checks komb. zu OK/WARNING/CRITICAL |
    |               | (per On-Demand Makros)                            |
    +---------------+---------------------------------------------------+
    | dbi           | Beliebige Datenbank abfragen (libdbi)             |
    | dhcp          | DHCP-Server prÃŒfen                                |
    | dig           | DNS-Server per "dig" prÃŒfen                       |
    | dir_age       | Alter der Àltesten Datei in Verz. prÌfen          |
    | disk          | Freie FestplattenkapazitÀt                        |
    | disk_smb      | Samba-Share abfragen                              |
    | dns           | DNS-Nameserver prÃŒfen                             |
    | dummy         | Test mit festem Returncode                        |
    +---------------+---------------------------------------------------+
    | file_age      | Änderungsdatum einer Datei prÃŒfen                 |
    | flexlm        | FLEXlm Lizenserver prÃŒfen (Macrovision)           |
    | fping         | Schneller als "check_ping" --> check_icmp besser) |
    | ftp           | FTP-Server prÃŒfen (Link --> check_tcp)            |
    +---------------+---------------------------------------------------+
    | host          | Existenz, nicht Antwortzeit (Link --> check_icmp) |
    | hpasm         | Hardware von HP Proliant Server prÃŒfen (Consol)   |
    | hpjd          | HP Drucker mit JetDirect Karte prÃŒfen             |
    | http          | Web-Server prÃŒfen                                 |
    +---------------+---------------------------------------------------+
    | icmp          | Per Ping erreichbar (schnelles check_fping/ping)  |
    | ide_smart     | Lokale Platte per SMART prÃŒfen                    |
    | ifoperstatus  | NW-Interface Status prÃŒfen                        |
    | ifstatus      | NW-Interface Status prÃŒfen                        |
    | iftraffic     | NW-Interface Status+Traffic prÃŒfen (per SNMP)     |
    | imap          | Mail-Server prÃŒfen (Link --> check_tcp)           |
    | ircd          | IRC/Chat-Daemon prÃŒfen (Anz. Verbindungen)        |
    +---------------+---------------------------------------------------+
    | jabber        | Jabber-Daemon prÃŒf (Anz.Verb., Link --> check_tcp)|
    +---------------+---------------------------------------------------+
    | ldap          | LDAP-Verz.dienst prÃŒfen                           |
    | ldaps         | LDAP-Verz.d. ÃŒberw. (SSL/TLS, Link --> check_ldap)|
    | linux_raid    | Linux Multi Disk GerÀte prÌfen                    |
    | load          | Linux Systemlast prÃŒfen (load)                    |
    | log           | Logfile auf Muster prÃŒfen                         |
    | logfile       | Logfile auf Muster prÃŒfen                         |
    +---------------+---------------------------------------------------+
    | mailq         | Mail-Queue prÃŒfen                                 |
    | memory        | Freien Speicher prÃŒfen                            |
    | mrtg          | MRTG-Logdatei prÃŒfen                              |
    | mrtgtraf      | MRTG-Logdatei prÃŒfen (Traffic)                    |
    | mysql         | Datenbank MySQL prÃŒfen                            |
    | mysql_query   | Datenbank MySQL prÃŒfen ...                        |
    +---------------+---------------------------------------------------+
    | nagios        | Nagios prÃŒft sich selbst                          |
    | netsnmp       | Monitor Disk, Swap, Load, Proc + Exec, Perl)      |
    | nntp          | NNTP-Verb. prÃŒfen (Link --> check_tcp)            |
    | nntps         | NNTP-Verb. per SSL prÃŒfen (Link --> check_tcp)    |
    | nrpe          | Remote Plugin per NRPE ausfÃŒhren                  |
    | nt            | Remote Plugin per NSClient ausfÃŒhren              |
    | ntp           | Systemzeit via NTP ÃŒberprÃŒfen (alt)               |
    | ntp_peer      | Systemzeit via NTP ÃŒberprÃŒfen (neu)               |
    | ntp_time      | Systemzeit via NTP ÃŒberprÃŒfen (neu)               |
    | nwstat        | Novell MRTGEXT NML prÃŒfen                         |
    +---------------+---------------------------------------------------+
    | oracle        | Datenbank ORACLE prÃŒfen                           |
    | overcr        | Over-CR Daemon prÃŒfen                             |
    +---------------+---------------------------------------------------+
    | pgsql         | Datenbank PostgreSQL prÃŒfen                       |
    | ping          | Erreichbarkeitstest mit Ping                      |
    | pop           | Mail-Server POP-Verb. prÃŒfen (Link --> check_tcp) |
    | postgres      | Datenbank PostgreSQL prÃŒfen                       |
    | procs         | Prozesse prÃŒfen                                   |
    +---------------+---------------------------------------------------+
    | radius        | RADIUS-Server prÃŒfen                              |
    | radius_ih     | RADIUS-Server prÃŒfen                              |
    | raid          | ...                                               |
    | real          | RTPS-Dienst (Real-Time Streaming Protocol) prÃŒfen |
    | rpc           | Remote Procedure Call prÃŒfen                      |
    | rtamulti      | ... (Link --> check_icmp)                         |
    +---------------+---------------------------------------------------+
    | sensors       | Status von GerÀten im "lm_sensers" Paket prÌfen   |
    | simap         | SIMAP Daemon prÃŒfen (Link --> check_tcp)          |
    | smart         | SMART-Zugriff auf Festplatten-Daten (RAID)        |
    | smtp          | Mail-Server SMTP-Verb. prÃŒfen                     |
    | snmp          | Per SNMP prÃŒfen (per snmpget)                     |
    | spop          | Mail-Server prÃŒfen (Link --> check_tcp)           |
    | squid         | Squid-Proxy prÃŒfen                                |
    | ssh           | SSH prÃŒfen                                        |
    | ssmtp         | SSMTP Daemon prÃŒfen (Link --> check_tcp)          |
    | swap          | Auslastung des Swap-Bereichs prÃŒfen               |
    +---------------+---------------------------------------------------+
    | tcp           | TCP-Ports prÃŒfen (generisch)                      |
    | time          | Uhrzeit prÃŒfen (NTP)                              |
    | time_skew     | Uhrzeit prÃŒfen (Abweichung, kein NTP)             |
    +---------------+---------------------------------------------------+
    | udp           | UDP-Ports prÃŒfen (gen., Link --> check_tcp)       |
    | ups           | UPS-Dienst prÃŒfen                                 |
    | users         | Anzahl eingeloggter Benutzer prÃŒfen               |
    +---------------+---------------------------------------------------+
    | wave          | ...                                               |
    +---------------+---------------------------------------------------+

* Hilfs-Plugins

    +----------+--------------------------------------------------------------+
    | Plugin   | Beschreibung                                                 |
    +----------+--------------------------------------------------------------+
    | urlize   | Plugin-Text-Output --> <A...>...</A> --> Clickable HTML-Link |
    | negate   | Status eines Plugins negieren (OK <-> CRITICAL)              |
    | utils.sh | Definitionen fÃŒr Plugins auf Basis von Shell-Skripten        |
    | utils.pm | Perl-Modul (veraltet/deprecated), "Nagios::Plugin" nutzen!   |
    +----------+--------------------------------------------------------------+

Hinweis: Inzwischen wird statt dem Perl-Modul "utils.pm" das Perl-Modul
"Nagios::Plugin" eingesetzt (von Cevin Gar).

* ZusÀtzliche Plugins (--> 33.5 Quellen fÌr Nagios-Plugins)

    +---------------+---------------------------------------------------+
    | Plugin check_ | Beschreibung                                      |
    +---------------+---------------------------------------------------+
    | generic       | Beliebige UNIX-Befehle nutzen                     |
    +---------------+---------------------------------------------------+
    | db2_health    | Datenbank DB2 prÃŒfen (ConSol)                     |
    | mssql_health  | Datenbank MSSQL prÃŒfen (ConSol)                   |
    | mysql_health  | Datenbank MySQL prÃŒfen (Consol)                   |
    | oracle_health | Datenbank ORACLE prÃŒfen (ConSol)                  |
    +---------------+---------------------------------------------------+
    | logfiles      | Logfile/WinEventLog auf Muster prÃŒfen (ConSol)    |
    | nagios_performance | Nagios-Performanz prÃŒfen                     |
    +---------------+---------------------------------------------------+
    | many          | Mehrere Checks kombinieren (all, first-ok/fail)   |
    | multi         | Mehrere Checks logisch verknÃŒpfen                 |
    | mk            | Ersatz fÃŒr NRPE (von Mathias Kettner)             |
    +---------------+---------------------------------------------------+
    | nwc_health    | Netzwerkkomponenten per SNMP prÃŒfen (Consol)      |
    | junos         | Juniper                                           |
    | naf           | NetApp Filer                                      |
    | aaccli        | Adaptec SCSI Raid Controller (IBM ServerRAID)     |
    +---------------+---------------------------------------------------+

* Konfigurations-Dateien fÃŒr Plugins
  + Definieren INTERNE Kommandos fÃŒr Aufruf EXTERNER Plugins
  + Verz.: /etc/nagios-plugins/config/*
           /usr/local/nagios3/plugins/config/*
  + Liste:
    +----------------+------------------------------------------------+
    | Konfigurations | Plugin (externes Kommando)                     |
    | -Datei "*.cfg" |                                                |
    +----------------+------------------------------------------------+
    | apt            | check_apt                                      |
    +----------------+------------------------------------------------+
    | breeze         | check_breeze                                   |
    +----------------+------------------------------------------------+
    | check_nrpe     | check_nrpe                                     |
    +----------------+------------------------------------------------+
    | dhcp           | check_dhcp                                     |
    | disk-smb       | check_disk_smb                                 |
    | disk           | check_disk, check_by_ssh                       |
    | dns            | check_dns, check_dig                           |
    | dummy          | check_dummy                                    |
    +----------------+------------------------------------------------+
    | email_delivery | check_email_delivery                           |
    +----------------+------------------------------------------------+
    | flexlm         | check_flexlm                                   |
    | fping          | check_fping                                    |
    | ftp            | check_ftp                                      |
    +----------------+------------------------------------------------+
    | games          | check_game                                     |
    +----------------+------------------------------------------------+
    | haproxy        | check_haproxy                                  |
    | hppjd          | check_hpjd                                     |
    | http           | check_http                                     |
    | httpd_status   | check_httpd_status                             |
    +----------------+------------------------------------------------+
    | ifstatus       | check_ifstatus, check_ifoperstatus             |
    | ipmi_sensor    | check_ipmi_sensor                              |
    +----------------+------------------------------------------------+
    | ldap           | check_ldap, check_ldaps                        |
    | lm_sensors     | check_lm_sensors                               |
    | load           | check_load                                     |
    +----------------+------------------------------------------------+
    | mail           | check_pop, check_smpt, check_ssmtp, check_imap |
    | mailq          | check_mailq                                    |
    | memcached      | check_memcached                                |
    | mrtg           | check_mrtg, check_mrtgtraf                     |
    | multipath      | check_multipath                                |
    | mysql          | check_mysql                                    |
    +----------------+------------------------------------------------+
    | netware        | check_nwstat                                   |
    | news           | check_nntp                                     |
    | nt             | check_nt                                       |
    | ntp            | check_ntp_peer, check_time                     |
    +----------------+------------------------------------------------+
    | pgsql          | check_pgsql                                    |
    | ping           | check_ping                                     |
    | printer        | check_printer                                  |
    | procs          | check_procs                                    |
    +----------------+------------------------------------------------+
    | radius         | check_radius                                   |
    | rbl            | check_rbl                                      |
    | real           | check_real                                     |
    | rpc-nfs        | check_rpc-nfs                                  |
    +----------------+------------------------------------------------+
    | snmp           | check_snmp                                     |
    | snmp_cpfw      | check_snmp_cpfw.pl                             |
    | snmp_env       | check_snmp_env.pl                              |
    | snmp_int       | check_snmp_int.pl                              |
    | snmp_load      | check_snmp_load.pl                             |
    | snmp_mem       | check_snmp_mem.pl                              |
    | snmp_process   | check_snmp_process.pl                          |
    | snmp_storage   | check_snmp_storage.pl                          |
    | snmp_vrrp      | check_snmp_vrrp.pl                             |
    | snmp_win       | check_snmp_win.pl                              |
    | ssh            | check_ssh                                      |
    | ssl_cert       | check_ssl_cert                                 |
    +----------------+------------------------------------------------+
    | tcp_udp        | check_tcp, check_udp                           |
    | telnet         | check_tcp                                      |
    +----------------+------------------------------------------------+
    | users          | check_users                                    |
    +----------------+------------------------------------------------+

21) Nagios Objekte und ihre Beziehungen   (Toc)

* Abstrakte OBJEKTE bilden (zu Ìberwachende) RealitÀt ab
  + Jedes bekommt frei wÀhlbaren INTERNEN Namen --> BEZEICHNER (analog Prog.)
    --> BAUKASTEN basierend auf BEZEICHNERN
    --> Frei wÀhlbar im Rahmen von Nagios (hat nichts mit echter Außenwelt zu tun)
    --> GUTE NAMEN SIND EXTREM WICHTIG!
    --> FÃŒr Darstellung in GUI verwendet
  + Jedes hat bestimmte ATTRIBUTE (Name + Wert = Eigenschaft)
  + 12 Typen (bzw. 14 vor V3) + Templates
    --> Vererbung von gemeinsamen Eigenschaften von Objekten

1) Host (genau eine IP = DNS-HOSTNAME)   (Toc)

  + Eindeutiger Name = Host-Name (bzw. IP)
  + HW-GerÀt im Netz
  + Host-Check per "ping" (ICMP)
  + FÌr JEDES zu Ìberwachende GerÀt ist ein Host-Objekt nötig!

2) Hostgroup   (Toc)

  + Zusammenfassung von Hosts zu "KATEGORIEN" (z.B. Linux, Windows, Switch)
  + Zur Darstellung in GUI, Auswertung, Reaktion
    ("Kosmetik" + Vereinfachung)
  + Zuordnung von Services, Kommandos, Kontakten, ... --> Vereinfachung der Konfiguration
  + Host darf Mitglied in MEHREREN Hostgruppen sein
  + GUT ÜBERLEGEN!

3) Service (Ressource/Dienst/Daemon, beliebig viele pro Host)   (Toc)

  + Eindeutiger Name = Host-Name + Service-Description (NICHT Service-Name!)
  + Netzwerk-Dienste
    - Port + Protokoll
  + Daemon
    - Name
  + Lokale/Remote Ressourcen (Betriebsparameter)
    - Belegter/Freier Festplattenplatz
    - Neue Updates fÃŒr Distribution
    - Wann lÀuft SSL-Zertifikat ab?
    - Anzahl Prozesse
    - ...

4) Servicegroup   (Toc)

  + Zusammenfassung von Services zu "KATEGORIEN" (z.B. Mail, DB, Web, SAP, ...)
  + Zur Darstellung in GUI, Auswertung, Reaktion
    ("Kosmetik" + Vereinfachung)
  + Zuordnung von Kommandos, Kontakten, ... --> Vereinfachung der Konfiguration
  + Service darf Mitglied in MEHREREN Servicegruppen sein
  + GUT ÜBERLEGEN!

5) Contact (Kontaktperson, Verantwortlicher)   (Toc)

  + Benachrichtigungen (Notification)
  + Sichtbarkeit in GUI (!)
  + Nachrichten-Zeitraum
  + Mail, SMS, ...

6) Contactgroup (Gruppe von Verantwortlichen)   (Toc)

  + Zusammenfassugn von Contacts --> Vereinfachung der Konfiguration
  + Benachrichtigungen
  + Sichtbarkeit in GUI (!)
  + Nachrichten-Zeitraum
  + Mail, SMS, ...
  + GUT ÜBERLEGEN!

7) Timeperiod (Zeitraum/Zeitfenster)   (Toc)

  + Überwachungszeitraum
    - Wartungszeitraum (Service Interval)
    - Problembehandlung
  + Benachrichtigungszeitraum (Notification Interval)

8) Command (Plugin-Aufruf)   (Toc)

  + Typen
    - Host/Service-Check mit Parametern (StatusprÃŒfung)
    - Host/Service Notification (Benachrichtigung, Notify)
    - Host/Service Event-Handler (Ereignisbehandlung bei StatusÀnderung)
  + Interner Name + Externes Kommando (Pfad + Name)
  + Können Makros enthalten (Platzhalter,
    manuell beim Aufruf oder automatisch vom Host/Service/Contact/... gefÃŒllt)
  + Verbindung: Nagios "Attribute" (Objekt Definition) --> Plugin Parameter
  + Interner + externer Name oft gleich (verwirrend oder auch nicht!)

9) Host Dependency (logische AbhÀngigkeit)   (Toc)

  + AbhÀngigkeit zw. Hosts OHNE Bezug zur Netzwerk-"Topologie"
  + Business-Objekte

10) Service Dependency (logische AbhÀngigkeit)   (Toc)

  + AbhÀngigkeit zw. Services OHNE Bezug zur Netzwerk-"Topologie"
  + Business-Objekte

11) Host Eskalation (Eskalationskette)   (Toc)

  + Falls Kontakt(gruppe) nicht reagiert
  + Weitere Benachrichtigungen zu einem Problem anders behandeln
  + Mehrstufig

12) Service Eskalation (Eskalationskette)   (Toc)

  + Falls Kontakt(gruppe) nicht reagiert
  + Weitere Benachrichtigungen zu einem Problem anders behandeln
  + Mehrstufig

13) Extended Host Information (vor V3)   (Toc)

  + Aussehen von Status, Statusmap, Statuswml, Statuswrl und Extinfo festlegen
  + Inzwischen Teil von --> 1) Host Definition (V3)

14) Extended Service Information (vor V3)   (Toc)

  + Aussehen von Status und Extinfo festlegen
  + Inzwischen Teil von --> 3) Service Definition (V3)

15) Template (Vorlage, Schablone)   (Toc)

  + Generisches Attribut "name" legt Template-Namen fest (nicht host_name, ...)
  + UNVOLLSTÄNDIG definiertes Objekt (seit V3 auch VOLLSTÄNDIGE Definition erlaubt)
  + Nicht in GUI angezeigt (sinnvollerweise!)
  + Sogar fertige Objekte als Template verwendbar
      register 0       # In Objekt weglassen
      use OBJEKTNAME   # In davon abgeleitetem Objekt verwenden
  + Zweck
    - Ableiten von Objekten EINHEITLICHER STRUKTUR
    - Mehrfache + hierarchische VERERBUNG
    - Arbeitsersparnis
    - Redundanz vermeiden (Ànderungsfreundlicher)
    - Konsistenz erhöhen (fehlerfreier)
  + Beispiel: Objekt_D aus Objekt_C abgeleitet,
              Objekt_C aus Template_B abgeleitet,
              TEMPLATE_B aus Template_A abgeleitet,

      Template_A         Template_B           Objekt_C             Objekt_D
    +------------+     +------------+     +--------------+     +---------------+
    | name T_ABC |     | name T_XYZ |     | ..._name OBJ |     | ..._name OBJ2 |
    | register 0 | --> | use T_ABC  | --> | use T_XYZ    | --> | use OBJ       |
    | ...        |     | register 0 |     | ...          |     | ...           |
    |            |     | ...        |     |              |     |               |
    +------------+     +------------+     +--------------+     +---------------+

* EinschrÀnkungen gegenÌber OOP:
  + KEINE neuen Objektarten möglich
  + KEINE neuen Attribute in Objektarten möglich
    - In V3 doch möglich, aber fÌr Nagios nicht relevant
  --> keine echte Objektorientierung!

22) Konfigurations-Dateien -- Struktur   (Toc)

* Die AUFTEILUNG der Konfiguration auf Dateien und Verz. ist frei wÀhlbar,
  ebenso sind die NAMEN der Konfigurations-Dateien/Verz. beliebig wÀhlbar
  (haben nichts mit den Namen von Objekten zu tun)
  + ExtremfÀlle:
    - EINE einzige Konfigurations-Datei enthÀlt ALLES
    - Pro Objekt eine getrennte Konfigurations-Datei
  + STARTPUNKT der Konfiguration ist "nagios.cfg"
    - EnthÀlt globale Nagios-Konfiguration (nur dort erlaubt!)
    - Legt fest, welche weiteren Dateien + Verz. einzulesen sind (include)
        cfg_file = ...   # Einzelne Datei einlesen
        cfg_dir  = ...   # Verz.baum einlesen (nur Dateien mit Extension "*.cfg")
  + Grundkonfiguration wird mitgeliefert (Struktur siehe unten)
    - nagios.cfg     # Globale Parameter + Auswahl weitere Konf.dateien+verz.
    - cgi.cfg        # GUI-Konfiguration
    - resource.cfg   # Fixe Makros fÃŒr Pfade, Benutzernamen, Passworte, ...
    - ...            # Weitere Dateien mit Objekten
  + Mitgelieferte Beispielkonfiguration
    - Startet zunÀchst nicht
    - Mind. 1 Host + 1 Service + 1 Contact definieren
      . Die ersten Checks lokal durchfÃŒhren (auf Nagios-Server)
        . "localhost"            erreichbar?
        . "lokale NW-Verbindung" erreichbar?
  + Gesunder Mittelweg:
    - Mitgelieferte Grundstruktur als Ausgangspunkt verwenden
    - Eigene Objekte in getrenntem neuen Verz. ablegen
    - Pro Objekttyp oder zusammengehörenden Objekten eine Konf.datei
    - Einheitliche Namensgebung fÃŒr Dateien, Verz. und Objekte:
      . Dateien: Namens-Strukturierung per Unterstrich "_"
      . Objekte: Namens-Strukturierung per Bindestrich "-"
  + NUR Dateien mit Endung ".cfg" (configuration) sind fÃŒr Nagios relevant!
    --> TIPP: Umbenennen nach ".cfg.old" deaktiviert sie!

* Startpunkt der Konfigurations-Dateien liegt unter:
  + /usr/local/nagios/etc   # Aus Quellcode installiert
  + /etc/nagios             # V2
  + /etc/nagios3            # V3
  + /etc/nagios4            # V4
  + /etc/pnp4nagios         # PNP4Nagios
  + /etc/nagios-plugins     # Plugins
  + /etc/nagiosgrapher      # NagiosGrapher

* Zusammenhang der Konfigurations-Dateien (Grundkonfiguration):

                         #===============#      #===============#
                         # Nagios-Daemon #      # Web-GUI (CGI) #
                         #=======+=======#      #=======+=======#
                                 |                      |
                         +-------v------+          +----v----+
                    Main |  nagios.cfg  +----------> cgi.cfg | CGI
                         +--+--+--+--+--+          +---------+
                            |  |  |  |
                       +----+  |  |  +----------------+
                       |       |  |                   |
                       |       |  +---------+  +------v-------+
                       |       |            |  | resource.cfg | Resourcen
                       |       +-------+    |  +--------------+ (Makros)
                       |               |    |
              +--------v----------+    |  +-v---------------------+
    Abstrakte | contacts.cfg      |    |  | localhost.cfg         | Spezielle
      Objekte | contactgroups.cfg |    |  | printer.cfg           | Objekte
              | dependencies.cfg  |    |  | switch.cfg            |
              | escalations.cfg   |    |  | windows.cfg           |
              | hosts.cfg         |    |  | /etc/nagios3/conf.d/* |
              | hostgroups.cfg    |    |  +-----------------------+
              | services.cfg      |    |
              | servicegroups.cfg |  +-v----------------------------+
              | templates.cfg     |  | checkcommands.cfg            | Kommandos
              | timeperiods.cfg   |  | commands.cfg                 | Plugins
              +-------------------+  | misccommands.cfg             |
                                     | /etc/nagios-plugins/config/* |
                                     +------------------------------+

    +---------------+--------------------------------------------------+
    | Datei "*.cfg" | Bedeutung                                        |
    +---------------+--------------------------------------------------+
    | nagios        | Haupt-Konfiguration (Server-Optionen + Includes) |
    | resource      | Benutzerdef. Makros (z.B. Pfade, Passworte)      |
    | cgi           | Web-GUI Konfiguration                            |
    | objects/...   | Weitere Objekte (Kommandos, Server, ...)         |
    | conf.d/...    | Weitere Objekte (Kommandos, Server, ...)         |
    +---------------+--------------------------------------------------+
    | templates     | Templates (Vorlagen) fÃŒr Hosts + Services        |
    +---------------+--------------------------------------------------+
    | hosts         | Überwachte Systeme (IP!)                         |
    | hostgroups    | Zsfg. von Systemen zu Gruppen                    |
    | services      | Überwachte Dienste und Betriebsparameter         |
    | servicegroups | Zsfg. von Services zu Gruppen                    |
    | dependencies  | Logische AbhÀngigkeiten zw. Hosts/Services       |
    +---------------+--------------------------------------------------+
    | commands      | Kommandos fÃŒr Tests + Benachrichtigungen         |
    | checkcommands | Checks mit Aufrufparametern der Plugins          |
    | misccommands  | Kommandos (z.B. fÃŒr E-Mail-Benachrichtigung)     |
    +---------------+--------------------------------------------------+
    | timeperiods   | Definition von Zeitfenstern (z.B. "workhours")   |
    +---------------+--------------------------------------------------+
    | contacts      | Kontaktpersonen                                  |
    | contactgroups | Zsfg. von Kontaktpersonen zu Gruppen             |
    | escalations   | Eskalationen bei anhaltenden Fehlern             |
    +---------------+--------------------------------------------------+
    | localhost     | Checks fÃŒr Localhost                             |
    | printer       | Checks fÃŒr Drucker                               |
    | switch        | Checks fÃŒr Switches/Hubs/Router                  |
    | windows       | Checks fÃŒr Hosts+Services von Windows-Rechnern   |
    +---------------+--------------------------------------------------+

23) Konfigurations-Dateien -- Inhalt   (Toc)

* Konfigurations-Dateien
  + Dateiname unwichtig, Extension ".cfg" wichtig (NUR diese werden eingelesen)
  + Pfadangaben verwenden "/" (Linux-Form), NICHT "\" (Windows-Form)
    (oder "\" verdoppeln --> "\\")
  + Wo Dateien liegen entscheidet Installation (Quellen vs. Distro-Paket)

* Nagios verzeiht keine Syntaxfehler --> IMMER PRÜFEN mit Option "-v" (verify)!
  + PrÃŒft aber auch einige Dinge nicht ab
    - Externe Pfade existent?
    - Zugriffsrechte vorhanden?
    - Plugin-Optionen + Parameter sinnvoll?
    - Plugin-Aufruf möglich
    - Makro definiert
    - Macro mit $...$ umrahmt
    - ...

* ACHTUNG: Egal wie viele Dateien/Objekten/Templates vorhanden sind,
  bei Änderung eines einzigen Details (z.B. Name, Attributwert, AbhÀngigkeit)
  muss wieder die GESAMTE KONFIGURATION verifiziert und eingelesen werden!
  --> Idee bei Icinga 2: Auch einzelne Objekte einzulesen und zu aktivieren,
                         Rest bleibt aktiv
  Kann durchaus einige Sekunden/Minuten dauern (abh. von Anz. Hosts/Services)
  bis komplett eingelesen, geprÌft und alle AbhÀngigkeiten ermittelt!

* Objekte
  + Fast alles dreht sich um "OBJEKTE" aus einer Liste von OBJEKT_TYPEN
    (Hosts, Services, Commands, ...)
  + Objekte mÃŒssen EINDEUTIGEN NAMEN = BEZEICHNER haben
  + Alle Namen sind CASE-SENSITIVE (d.h. GROSS/kleinschreibung wird beachtet)
    - Außer bei Objekt-Hostnamen (da DNS-Hostnamen das auch nicht machen)!
  + Irrelevant:
    - AUFTEILUNG der Objekte auf Definitionsdateien
    - REIHENFOLGE der Objekte in Definitionsdateien
  + ExtremfÀlle: Alle Objekte in einer Datei <-> Pro Objekt eine Datei

* Format der Konfigurations-Dateien
  + Zentrale Konfigurations-Dateien: nagios.cfg + cgi.cfg
    - Liste von Variable-Wert-Paaren der Form
        VARIABLE = WERT
  + Globale Makros: resource.cfg
    - Liste von Makro-Wert-Paaren der Form (n = 1..32)
        $USERn$ = WERT
  + Objekt-Definition
    - Liste von Objekten bestehend aus
        define OBJEKT_TYP {   # Objekt-Typ
          ..._name NAME       # Objekt-Name
          VARIABLE WERT       # Attribut + Leerraum + Wert
          ...                 # (KEIN "=" dazwischen!)
        }

* Format der Konfigurations-Dateien nur geringfÌgig geÀndert zwischen Versionen
  + Umbenennungen oder Zusammenfassungen von Parametern
  + ÜberflÃŒssige Parameter fallen weg
  + ZusÀtzliche Möglichkeiten kommen hinzu
  --> Nagios-Upgrade leicht möglich (z.B. von V2 auf V3)

* Sonstige Syntaxelemente
  + Leerzeilen und Leerraum beliebig verwendbar
    - EinrÃŒcken erlaubt (und sinnvoll)
    - Leerraum um "{" und "}" erlaubt
  + Service-Description und Kommando-Name darf beliebige Zeichen enthalten
    - Vorsicht mit Umlauten "ÀöÌÄÖÜß", Sonderzeichen und Leerzeichen!)
      --> Codierungsproblem: GUI != Konfig != Kommandozeile (Plugins)
  + ";" leitet KOMMENTAR bis Zeilenende ein (extra Zeile oder nach Code)
  + "#" leitet KOMMENTAR bis Zeilenende ein (extra Zeile oder nach Code)
  + Listenelemente per "," OHNE Leerz. trennen (Host, Service, Contact, ...)
  + "*" steht fÃŒr ALLE (Hosts, Services, ...)
  + "!" trennt ARGUMENTE beim Aufruf eines Plugins (Leerzeichen
  + "$...$" kennzeichnet MAKROS (fehlendes schließendes $ wird nicht erkannt!)
  + Nach "\" am Zeilenende ist Umbruch erlaubt --> wird ignoriert (line continuation)
  + "!" als Text ÃŒbergeben --> "%3E" verwenden (oder "\!" V3)
  + "$" als Text ÃŒbergeben --> "$$"  verwenden (oder "\$" V3)

* Beispiel-Konfiguration siehe:
    /usr/share/doc/nagios3-common/examples/
    /usr/local/nagios/etc/

  +---------------------------------+----------------------------+
  | Datei                           | Bedeutung                  |
  +---------------------------------+----------------------------+
  | README                          | Anleitung                  |
  | nagios.cfg                      | Start der Konfiguration    |
  | cgi.cfg                         | GUI-Konfiguration          |
  | resource.cfg                    | Wichtige Makros $USERi$    |
  | apache2.conf                    | V2/V3                      |
  | apache2.nagios1.conf            | V1                         |
  | commands.cfg                    | Kommando-Objekte           |
  | localhost.cfg                   | Nagios-Server selbst       |
  | mrtg.cfg                        |                            |
  +---------------------------------+----------------------------+
  | template-object/README          |                            |
  |         "       commands.cfg    | Templates: Kommandos       |
  |         "       contacts.cfg    |            Kontakte        |
  |         "       localhost.cfg   |            Nagios-Server   |
  |         "       printer.cfg     |            Drucker         |
  |         "       switch.cfg      |                            |
  |         "       templates.cfg   |                            |
  |         "       timeperiods.cfg |            Zeitperioden    |
  |         "       windows.cfg     |            Windows-Rechner |
  +---------------------------------+----------------------------+

23.1) Haupt-Konfigurations-Datei "nagios.cfg"   (Toc)

* Wird als einzige direkt eingelesen (-d = Daemon-Modus)
    /usr/local/nagios/sbin/nagios -d /usr/local/nagios/etc/nagios.cfg
    /usr/sbin/nagios3             -d /etc/nagios3/nagios.cfg

* EnthÀlt generelle Einstellungen

* Bindet weitere Dateien oder Verz. (rekursiv) ein
  (bei "cfg_dir" nur Dateien mit Extension *.cfg!):
    resource_file = /usr/local/nagios/etc/resource.cfg
    cfg_file      = /usr/local/nagios/etc/objects/commands.cfg
    cfg_dir       = /usr/local/nagios/etc/objects

* Beispiel
  # Weitere Konfigurations-Dateien + -verz. (automatisch eingelesen)
  resource_file                 = /etc/nagios3/resource.cfg
  cfg_dir                       = /etc/nagios-plugins/config
  cfg_dir                       = /etc/nagios3/conf.d
  cfg_file                      = /etc/nagios3/commands.cfg

  p1_file                       = /usr/lib/nagios3/p1.pl
  object_cache_file             = /var/cache/nagios3/objects.cache
  precached_object_file         = /var/lib/nagios3/objects.precache

  lock_file                     = /var/run/nagios3/nagios3.pid

  temp_file                     = /var/cache/nagios3/nagios.tmp
  temp_path                     = /tmp

  state_retention_file          = /var/lib/nagios3/retention.dat
  retention_update_interval     = 60

  status_file                   = /var/cache/nagios3/status.dat
  status_update_interval        = 10

  check_result_path             = /var/lib/nagios3/spool/checkresults
  check_result_reaper_frequency = 10

  nagios_group                  = nagios
  nagios_user                   = nagios

  check_external_commands       = 0
  command_file                  = /var/lib/nagios3/rw/nagios.cmd
  command_check_interval        = -1
  external_command_buffer_slots = 4096

  execute_host_checks           = 1
  execute_service_checks        = 1

  accept_passive_host_checks    = 1
  accept_passive_service_checks = 1

  enable_notifications          = 1
  enable_event_handlers         = 1

  sleep_time                    = 0.25
  service_check_timeout         = 60
  host_check_timeout            = 30
  event_handler_timeout         = 30
  notification_timeout          = 30
  perfdata_timeout              =  5

  check_interval                = 2.5   # (alt: "normal_check_interval")
  interval_length               = 60    # Sekunden

  process_performance_data      = 0                          # Perf.daten verarbeiten
  service_perfdata_command      = process-service-perfdata   # Kmdo zur Verarb. von Perf.d.
  host_perfdata_command         = process-host-perfdata      # Kmdo zur Verarb. von Perf.d.

  translate_passive_host_checks = 0
  passive_host_checks_are_soft  = 0
  check_for_orphaned_services   = 1
  check_for_orphaned_hosts      = 1

  enable_flap_detection         =    1
  low_service_flap_threshold    =  5.0
  high_service_flap_threshold   = 20.0
  low_host_flap_threshold       =  5.0
  high_host_flap_threshold      = 20.0

  date_format                   = iso8601

  # Embedded Perl Interpreter
  p1_file                       = /usr/lib/nagios3/p1.pl
  enable_embedded_perl          = 1
  use_embedded_perl_implicitly  = 1

  illegal_object_name_chars     = `~!$%^&*|'"<>?,()=
  illegal_macro_output_chars    = `~$&|'"<>

  admin_email                   = root@localhost
  admin_pager                   = pageroot@localhost

  max_check_result_file_age     = 3600
  max_check_result_reaper_time  = 30
  max_concurrent_checks         = 0
  max_host_check_spread         = 30
  max_service_check_spread      = 30

  enable_environment_macros                   = 1
  enable_predictive_host_dependency_checks    = 1
  enable_predictive_service_dependency_checks = 1

  # Kommandos definieren, die nach JEDEM Host Check durchgefuehrt werden
  # (nach einem Event-Handler oder Notification-Command)
  obsess_over_services          = 0        # Global fÃŒr alle Services an/aus (Plural!)
  obsess_over_hosts             = 0        # Global fÃŒr alle Hosts an/aus (Plural!)
  obsess_over_service / obsess  = 0        # Bei einzelnem Service an/aus (Singular!)
  obsess_over_host / obsess     = 0        # Bei einzelnem Host an/aus (Singular!)
  ochp_command                  = CMD      # Status-Meldungen weiter an Dest-Nagios
  ocsp_command                  = CMD      # Status-Meldungen weiter an Dest-Nagios
  ochp_timeout                  = 5
  ocsp_timeout                  = 5

  use_regexp_matching           = 0
  use_true_regexp_matching      = 0

  auto_reschedule_checks        = 0
  auto_rescheduling_interval    = 30
  auto_rescheduling_window      = 180

  retain_state_information      = 1
  use_retained_program_state    = 1
  use_retained_scheduling_info  = 1

  retained_contact_host_attribute_mask    = 0
  retained_contact_service_attribute_mask = 0
  retained_host_attribute_mask            = 0
  retained_process_host_attribute_mask    = 0
  retained_process_service_attribute_mask = 0
  retained_service_attribute_mask         = 0

  check_host_freshness             = 0
  check_service_freshness          = 1
  host_freshness_check_interval    = 60
  service_freshness_check_interval = 60
  additional_freshness_latency     = 15

  host_inter_check_delay_method    = s
  service_inter_check_delay_method = s

  cached_host_check_horizon     = 15
  cached_service_check_horizon  = 15

  daemon_dumps_core             = 0
  event_broker_options          = -1
  service_interleave_factor     = s
  soft_state_dependencies       = 0
  use_aggressive_host_checking  = 0
  use_large_installation_tweaks = 0
  enable_environment_macros     = 0

23.2) Resource-Konfigurations-Datei "resource.cfg"   (Toc)

* Nicht fÃŒr alle lesbar, nur fÃŒr Gruppe "nagios" (wg. Passworten)

* Benutzerdefinierte Makros fÃŒr
  + Pfadangaben   = Einmal definiert, hÀufig verwendet
  + Benutzernamen = Sicherheitrelevante Infos
  + Passworte     = Sicherheitrelevante Infos

* Max. 32 Variablen $USER1$ .. $USER32$

* Beispiel
  +-------------------------------------------------+
  | $USER1$ = /usr/lib/nagios/plugins               | # Pfad Check Plugins
  | $USER2$ = /usr/lib/nagios/plugins/eventhandlers | # Pfad Event-Handler Plugins
  | $USER3$ = user                                  | # Benutzername
  | $USER4$ = geheim                                | # Passwort
  | ...                                             | # ...
  | $USER32$ = ...                                  | # ...
  +-------------------------------------------------+

23.3) GUI-Konfigurations-Datei "cgi.cfg"   (Toc)

* EnthÀlt Einstellungen fÌr GUI

* Muss fÃŒr Webserver "apache2" lesbar sein (Benutzer/Gruppe "www-data")

* Beispiel
  main_config_file                         = /etc/nagios3/nagios.cfg
  physical_html_path                       = /usr/share/nagios3/htdocs
  url_html_path                            = /nagios3

  show_context_help                        = 1
  use_pending_states                       = 1

  nagios_check_command                     = /usr/lib/nagios/plugins/check_nagios /var/cache/nagios3/status.dat 5 '/usr/sbin/nagios3'

  use_authentication                       = 1
  use_ssl_authentication                   = 0
  authorized_for_system_information        = nagiosadmin,root
  authorized_for_configuration_information = nagiosadmin,root
  authorized_for_system_commands           = nagiosadmin,root
  authorized_for_all_services              = nagiosadmin,root
  authorized_for_all_hosts                 = nagiosadmin,root
  authorized_for_all_service_commands      = nagiosadmin,root
  authorized_for_all_host_commands         = nagiosadmin,root
  authorized_for_read_only                 = user1,user2,...
  default_user_name                        = guest

  statusmap_background_image               = smbackground.gd2

  color_transparency_index_r               = 255
  color_transparency_index_g               = 255
  color_transparency_index_b               = 255

  default_statusmap_layout                 = 5
  default_statuswrl_layout                 = 4
  statuswrl_include                        = myworld.wrl

  ping_syntax                              = /bin/ping -n -U -c 5 $HOSTADDRESS$
  refresh_rate                             = 90
  escape_html_tags                         = 1

  host_unreachable_sound                   = hostdown.wav
  host_down_sound                          = hostdown.wav
  service_critical_sound                   = critical.wav
  service_warning_sound                    = warning.wav
  service_unknown_sound                    = warning.wav
  normal_sound                             = noproblem.wav

  action_url_target                        = _blank
  notes_url_target                         = _blank

  lock_author_names                        = 1

  enable_splunk_integration                = 1
  splunk_url                               = 127.0.0.1:8000/

23.4) Objekt-Konfigurations-Dateien   (Toc)

* Objekt-Typen
  +--------------------+-------------------+---------------------------------+
  | Objekt-Typ         | SchlÃŒsselwort     | Bedeutung                       |
  +--------------------+-------------------+---------------------------------+
  | Host               | host              | Rechner (DNS-Name/IP-Adresse)   |
  | Host Group         | hostgroup         | Rechner-Gruppe (Hosts-Liste)    |
  | Service            | service           | Dienst (Port) oder Ressource    |
  | Service Group      | servicegroup      | Dienst-Gruppe (Services-Liste)  |
  +--------------------+-------------------+---------------------------------+
  | Contact            | contact           | Kontakt                         |
  | Contact Group      | contactgroup      | Kontakt-Gruppe (Kontakte-Liste) |
  | Timeperiod         | timeperiod        | Zeitraum                        |
  | Command            | command           | Kommando (intern --> extern)    |
  +--------------------+-------------------+---------------------------------+
  | Host Dependency    | hostdependency    | Rechner-AbhÀngigkeit (logisch)  |
  | Service Dependency | servicedependency | Service-AbhÀngigkeit (logisch)  |
  | Host Escalation    | hostescalation    | Weiterreichen Rechner-Meldung   |
  | Service Escalation | serviceescalation | Weiterreichen Dienst-Meldung    |
  +--------------------+-------------------+---------------------------------+
  | Extended Host      | hostextinfo       | ZusÀtzliche Rechner-Info        |
  |   Info             |                   | (V3: Teil von "host", V4: -)    |
  | Extended Service   | serviceextinfo    | ZusÀtzliche Dienst-Info         |
  |   Info             |                   | (V3: Teil v. "service", V4: -)  |
  +--------------------+-------------------+---------------------------------+

* Objektdefinitions-Dateien "conf.d/*.cfg"
  + Alle zu ÃŒberwachenden Dinge
    - Hosts + Hostgroups
    - Services + Servicegroups
  + Wie sie zu ÃŒberwachen sind
    - Contacts + Contactgroups
    - Timeperiods
    - Commands (Check + Notification + Event-Handler)
    - Dependencies + Escalations
    - Host/Service Extended Information (V3: Teil von Host/Service)

* Mögliche Strukturierung der Aufteilung von Objekten auf Dateien
  *) Beliebig (kein inhaltlicher Bezug zw. Namen von Objekten und Dateien)
  A) Alle Objekte in einer Datei
  B) Pro Objekt eine Datei
  C) Objekttypen auf Konfigurations-Dateien verteilen
  D) Konfiguration nach logischen Gesichtspunkten in Unterverz. strukturiert
     + Globale Einstellungen
     + Standorte
     + Kunden
     + Abteilungen
     + GerÀtetypen

* Wenn möglich von TEMPLATE (Vorlage) Objekt-Eigenschaften "erben"
  + Template = UNVOLLSTÄNDIG definiertes Objekt
    - Mit "name TPL_NAME" und Attribut "register 0"
  + Vererben bzw. ableiten von Objekt aus Template
    - Direktive "use TPL_NAME"
    - Parameter hinzufÃŒgen
    - Parameter ÃŒberschreiben
    - Parameter erweitern
  + Mehrfachvererbung + Vererbungshierarchie erlaubt (V3)
    - Template aus Template ableitbar
    - Objekt aus mehreren Templates ableitbar

* Rechner-Objekt (vollstÀndige Definition, *=MUSS, **=Objekt, */** nicht Syntax-Teil)
  + Kommando-Angabe ohne Parameter
    define host {
       *host_name              charlton         # evtl. identisch zum DNS-Namen
        hostgroups             linux            # --> OBJEKT!
        alias                  Sony Notebook    # Beschreibungstext
       *address                192.168.0.1      # oder DNS-Name (optional ab V4)
        check_command          check_host       # --> OBJECT! = Kmdo-Aufruf!
       *max_check_attempts     5                # SOFT --> HARD
       *check_period           24x7             # --> OBJEKT!
      **contact_groups         admins           # --> OBJEKT!
      **contacts               admin            # --> OBJEKT!
       *notification_interval  240              # alle 4h wiederholen falls unverÀndert
       *notification_period    24x7             #
       *notification_options   d,r              #
        parents                switch           # --> OBJEKT!
    }

* Rechner-Template (partielle Definition, *=MUSS)
  + Kommando-Angabe ohne Parameter
    define host {
       *name                   template-host    # Template-Name
       *register               0                # Template
        check_command          check_host       # --> OBJEKT! = Kmdo-Aufruf!
        max_check_attempts     5                #
        check_period           24x7             # --> OBJEKT!
        contact_groups         admins           # --> OBJEKT!
        contacts               admin            # --> OBJEKT!
        notification_interval  240              #
        notification_period    24x7             #
        notification_options   d,r              #
        hostgroups             xyz              # Std-Gruppe (ergÀnzt/ersetzt/behalten)
    }

* Rechner-Objekt (Template + ErgÀnzungen --> vollstÀndige Definition, *=MUSS)
    define host {
        use         template-host     # Ableitung/Vererbung von Template
       *host_name   charlton          #
        hostgroups  +linux            # --> OBJEKT! (hinzufÃŒgen)
        alias       Sony Notebook     #
       *address     192.168.0.1       # Attributwert --> Platzhalter $HOSTADDRESS$
        parents     switch            # --> OBJEKT!
    }

    define host {
        use         template-host     # Ableitung/Vererbung von Template
       *host_name   exeter            #
        hostgroups  linux             # --> OBJEKT! (ÃŒberschreiben)
        alias       HP Notebook       #
       *address     192.168.0.2       #
        parents     switch            # --> OBJEKT!
    }

    define host {                     # Hostgruppe "xyz" wird aus Template 1:1 ÃŒbernommen
        use         template-host     # Ableitung/Vererbung von Template
       *host_name   plymouth          #
        alias       HP Notebook       #
       *address     192.168.0.2       #
        parents     switch            # --> OBJEKT!
    }

* Hostgroup-Objekt (*=MUSS)
    define hostgroup {
       *hostgroup_name  linux             #
       *alias           Linux-Rechner     #
        members         charlton          # --> OBJEKT!
    }
    define hostgroup {
       *hostgroup_name  routers           #
       *alias           Router/Switches   #
    }

* Service-Objekt (vollstÀndige Definition, *=MUSS)
  + Kommando-Angabe mit Parametern
    define service {
       *host_name              charlton          # --> OBJEKT!
       *service_description    PING              #
       *check_command          check_icmp!100.0,20%!500.0,60%    #Objekt --> Kmdo-Aufruf
       *max_check_attempts     3                 # SOFT-->HARD
       *check_interval         5                 #
       *retry_interval         1                 #
       *check_period           24x7              # --> OBJEKT!
       *notification_interval  240               #
       *notification_period    24x7              # --> OBJEKT!
       *notification_options   c,r               #
      **contact_groups         admins            # --> OBJEKT!
      **contacts               admin             # --> OBJEKT!
    }

* Service-Template (partielle Definition, *=MUSS)
    define service {
       *name                   template-service  #
       *register               0                 # Template
        max_check_attempts     3                 #
        check_interval         5                 #
        retry_interval         1                 #
        check_period           24x7              # --> OBJEKT!
        notification_interval  240               #
        notification_period    24x7              # --> OBJEKT!
        notification_options   c,r               #
        contact_groups         admins            # --> OBJEKT!
    }

* Service-Objekt (Template + ErgÀnzungen --> vollstÀndige Definition, *=MUSS)
  + Kommandoangabe mit Parametern
    define service {
        use                  template-service                 # Ableitung/Vererbung
       *host_name            charlton                         #
       *service_description  PING                             #
       *check_command        check_icmp!100.0,20%!500.0,60%   # Kmdo-Aufruf
    }

* Weitere Service-Objekte (*=MUSS)
    define service {
       *host_name            charlton,switch   # Service ex. auf allen Hosts dieser Liste
       *service_description  PING              #
       ...                                     #
    }
    define service {
       *hostgroup_name       linux   # Service ex. auf allen Hosts dieser Gruppe
       *service_description  PING    #
       ...                           #
    }
    define service {
       *host_name            *       # Service ex. auf allen Hosts!
       *service_description  PING    #
       ...                           #
    }

* Servicegroup-Objekt (*=MUSS)                   # --> HOST-Beziehung
    define servicegroup {                        #
       *servicegroup_name      remote            #
       *alias                  Remote-Dienste    #
        members                SSH,HTTP,SMTP     # --> OBJEKT!
        servicegroup_members   RPC               # --> OBJEKT!
    }

* Timeperiod-Objekt (*=MUSS)
    define timeperiod {
       *timeperiod_name  24x7          #
        alias            7x24h         #
        sunday           00:00-24:00   #
        monday           00:00-24:00   #
        tuesday          00:00-24:00   #
        wednesday        00:00-24:00   #
        thursday         00:00-24:00   #
        friday           00:00-24:00   #
        saturday         00:00-24:00   #
    }

    define timeperiod {
       *timeperiod_name  weekend       #
        alias            Wochende      #
        saturday         00:00-24:00   #
        sunday           00:00-24:00   #
    }

    define timeperiod {
       *timeperiod_name  worktime              #
        alias            Normale Arbeitszeit   #
        monday           09:00-16:30           #
        tuesday          09:00-16:30           #
        wednesday        09:00-16:30           #
        thursday         09:00-16:30           #
        friday           09:00-13:00           #
    }

    define timeperiod {
       *timeperiod_name  none   #
        alias            Nie!   #
    }

    define timeperiod {
        timeperiod_name      us-holidays    #
        alias                U.S. Holidays  #
        january 1            00:00-00:00    # New Years
        monday -1 may        00:00-00:00    # Memorial Day (last Mon in May)
        july 4               00:00-00:00    # Independence Day
        monday 1 september   00:00-00:00    # Labor Day (1st Mon in Sep)
        thursday 4 november  00:00-00:00    # Thanksgiving (4th Thu in Nov)
        december 25          00:00-00:00    # Christmas
    }

    define timeperiod {
       *timeperiod_name 24x7_sans_holidays  #
        alias           24x7 Sans Holidays  #
        use us-holidays                     # --> OBJEKT als TEMPLATE!
        sunday          00:00-24:00         #
        monday          00:00-24:00         #
        tuesday         00:00-24:00         #
        wednesday       00:00-24:00         #
        thursday        00:00-24:00         #
        friday          00:00-24:00         #
        saturday        00:00-24:00         #
    }

* Command-Objekt (fÃŒr Check, *=MUSS)
  + Plugin-Aufruf mit Parametern
    define command {
       *command_name  check_host                            # Interner Nagios-Name
       *command_line  $USER1$/check_host -H $HOSTADDRESS$   # PLUGIN-Aufruf (ext. Kmdo)
    }
    define command {
       *command_name  check_icmp                                   # Interner Nagios-Name
       *command_line  $USER1$/check_icmp -H $HOSTADDRESS$\         # PLUGIN-A. (ext. Kmdo)
                                           -w '$ARG1$' -c $ARG2$   # (mehrzeilig)
                                        #      ^          ^
                                        #      |          |
                                        # !100.0,20% !500.0,60%
    }

* Command-Objekt (fÃŒr Benachrichtigung, *=MUSS)
  + Plugin-Aufruf mit Parametern
    define command {
       *command_name  notify-by-email                       #
       *command_line  printf "%b" "MELDUNG..." |\           # Plugin-Aufruf
                        mail -s "SUBJECT..." ADDRESS
    }
    define command {
       *command_name  notify-by-sms                         #
       *command_line  /usr/bin/printf "%b" "MELDUNG..." |\  # Plugin-Aufruf
                        smsclient NUMBER
    }

* Contact-Objekt (*=MUSS)
  + Kommandoangabe mit Parametern
    define contact {
       *contact_name                   nagadmin               #
        contactgroups                  admins                 # --> OBJEKT!
       *alias                          Nagios Admin           # --> OBJEKT!
       *host_notification_period       24x7                   # --> OBJEKT!
       *service_notification_period    24x7                   # --> OBJEKT!
       *host_notification_options      d,r                    #
       *service_notification_options   w,c,r                  #
        host_notification_commands     host-notify-...        # --> OBJEKT! --> KMDO
        service_notification_commands  notify-by-email        # --> OBJEKT! --> KMDO
        email                          nagadmin@localhost     #
        pager
        address
    }

* Contactgroup-Objekt (*=MUSS)
    define contactgroup {
       *contactgroup_name     nagadmin             #
       *alias                 Administratoren      #
        members               CONTACT_NAMEs        # --> OBJEKT!
        contactgroup_members  CONTACTGROUP_NAMEs   # --> OBJEKT!
    }

* Host Dependency-Objekt (*=MUSS)
    define hostdependency {
       *dependent_host_name            HOST_NAME         # --> OBJEKT!
        dependent_hostgroup_name       HOSTGROUP_NAME    # --> OBJEKT!
       *host_name                      HOST_NAME         # --> OBJEKT!
        hostgroup_name                 HOSTGROUP_NAME    # --> OBJEKT!
        inherits_parent                [0/1]             #
        execution_failure_criteria     [o,d,u,p,n]       #
        notification_failure_criteria  [o,d,u,p,n]       # p=PENDING
        dependency_period              TIMEPERIOD_NAME   # --> OBJEKT!
    }

* Service Dependency-Objekt (*=MUSS)
    define servicedependency {
       *dependent_host_name             HOST_NAME             # --> OBJEKT!
        dependent_hostgroup_name        HOSTGROUP_NAME        # --> OBJEKT!
       *dependent_service_description   SERVICE_DESCRIPTION   # --> OBJEKT!
       *host_name                       HOST_NAME             # --> OBJEKT!
        hostgroup_name                  HOSTGROUP_NAME        # --> OBJEKT!
       *service_description             SERVICE_DESCRIPTION   # --> OBJEKT!
        inherits_parent                 [0/1]                 #
        execution_failure_criteria      [o,w,u,c,p,n]         # p=PENDING
        notification_failure_criteria   [o,w,u,c,p,n]         # o=OK
        dependency_period               TIMEPERIOD_NAME       # --> OBJEKT!
    }

* Host Escalation-Objekt (*=MUSS)
    define hostescalation {
       *host_name              HOST_NAME           #
        hostgroup_name         HOSTGROUP_NAME      #
       *contacts               CONTACT_NAMEs       #
       *contact_groups         CONTACTGROUP_NAME   #
       *first_notification     #                   #
       *last_notification      #                   #
       *notification_interval  #                   #
        escalation_period      TIMEPERIOD_NAME     #
        escalation_options     [d,u,r]             #
    }                                              #

* Service Escalation-Objekt (*=MUSS)
    define serviceescalation {
       *host_name              HOST_NAME             #
        hostgroup_name         HOSTGROUP_NAME        #
       *service_description    SERVICE_DESCRIPTION   #
       *contacts               CONTACT_NAMEs         #
       *contact_groups         CONTACTGROUP_NAMEs    #
       *first_notification     #                     #
       *last_notification      #                     #
       *notification_interval  #                     #
        escalation_period      TIMEPERIOD_NAME       #
        escalation_options     [w,u,c,r]             #
    }

* Extended Host Information (*=MUSS, seit V3 direkt beim Host angebbar)
    define hostextinfo {
       *host_name        HOST_NAME                 #
        notes            Note_String               #
        notes_url        Url                       #
        action_url       Url                       #
        icon_image       Image_File                #
        icon_image_alt   Alt_String                #
        vrml_image       Image_File                #
        statusmap_image  Image_File                #
        2d_coords        X_Coord,Y_Coord           #
        3d_coords        X_Coord,Y_Coord,Z_Coord   #
    }

* Extended Service Information (*=MUSS, seit V3 direkt beim Service angebbar)
    define serviceextinfo {
       *host_name            HOST_NAME             #
       *service_description  SERVICE_DESCRIPTION   #
        notes                Note_String           #
        notes_url            Url                   #
        action_url           Url                   #
        icon_image           Image_File            #
        icon_image_alt       Alt_String            #
    }

23.5) Vordefinierte Objekte   (Toc)

* Vordefinierte Templates:

    +-----------------+---------+
    | generic-host    | Host    |
    | linux-server    | Host    |
    | windows-server  | Host    |
    | generic-printer | Host    |
    | generic-switch  | Host    |
    +-----------------+---------+
    | generic-service | Service |
    | local-service   | Service |
    +-----------------+---------+
    | generic-contact | Kontakt |
    +-----------------+---------+

* Vordefinierte Kommandos (siehe auch --> 20) Standard-Plugins)

    +--------------------------+
    | notify-host-by-email     |
    | notify-service-by-email  |
    +--------------------------+
    | check-host-alive         |
    +--------------------------+
    | process-host-perfdata    |
    | process-service-perfdata |
    +--------------------------+

24) Benachrichtigungen   (Toc)

* Durch externe Programme durchgefÃŒhrt (Notification Plugin)

* Einzustellen ist (vielfache Möglichkeiten)
  + WANN generieren?
  + WANN zustellen?
  + WEM zustellen?
  + WIE zustellen?

* Erst nach einem Status-Wechsel zum Typ "HARD" wird durch folgende
  FILTERKETTE bestimmt, ob eine Benachrichtigung verschickt wird:
                                                                    BEZOGEN AUF
    #=============================================================#
    # Aktuelle Zeit in Zeitraum?                     check_period # Host/Service
    #           |JA                retry_interval                 #
    # PrÃŒfung durchzufÃŒhren?       check_interval + check_command #     "
    #           |JA                                               #
    # PrÃŒfung ergibt Status-Wechsel?                              #
    #           |JA                                               #     "
    # Perm. HARD-Status-Wechsel?               max_check_attempts #     "
    #           |JA                                               #
    # Benachrichtigungen generell aktiv?     enable_notifications #     "
    #           |JA                                               #
    # Host/Service in geplanter Downtime?   notifications_enabled #     "
    #       NEIN|                                                 #
    # Status in festgelegter Statusliste?    notification_options #     "
    #           |JA                                               #
    # Aktuelle Zeit in Benachr.zeitraum?      notification_period #     "
    #           |JA                                               #
    # Schon Nachricht ÃŒber diesen Status-Wechsel?                 #     "
    #           |               |JA                               #
    #       NEIN|  Seitdem abgelaufen ...?  notification_interval #     "
    #           |               |JA                               #
    # ZustÀndige Kontakte ermitteln!      contacts/contact_groups #     "
    #           |                                                 #
    # Status in Statusliste?    host/service_notification_options # Contact
    #           |JA                                               #
    # Aktuelle Zeit in Zeitraum? host/service_notification_period #     "
    #           |JA                                               #
    # Benachrichtigung!        host/service_notification_commands # Command
    #=============================================================#

* Einstellungen der Benachrichtigungen:
  + Global:       enable_notifications          = 1     # <-+
                  enable_event_handlers         = 1     #   |
                  interval_length               = 60    #   | Achtung!
  + Host/Service: check_period                  = 24x7  #   |
                  check_interval                = 5     #   |
                  max_check_attempts            = 3     #   |
                  retry_interval                = 1     #   |
                  check_command                 = CMD   #   |
                  notifications_enabled         = 1     # <-+
                  notification_options          = c,w,u,r,f
                  notification_period           = 24x7
                  notification_interval         = 120
                  contacts                      = ...
                  contact_groups                = ...
  + Contact:      host_notification_options     = n,d,u,r,f,s,a
                  host_notification_period      = 24x7
                  host_notification_commands    = CMD, ...
                  service_notification_options  = n,w,c,u,r,f,s,a
                  service_notification_period   = 24x7
                  service_notification_commands = CMD, ...
  + Command:      command_name                  = CMD
                  command_line                  = EXTERN_CMD...

* Bei welcher Host-StatusÀnderung Benachrichtigung verschicken?
  --> "host_notification_options"

    +---+-------------+----------------------------------------------+
    |Opt| Name        | Bedeutung                                    |
    +---+-------------+----------------------------------------------+
    | - | UP          | Erreichbar (direkt oder indirekt)            |
    | d | DOWN        | Nicht erreichbar (direkt)                    |
    | u | UNREACHABLE | Nicht erreichbar (indirekt)                  |
    +---+-------------+----------------------------------------------+
    | r | RECOVERING  | Wieder erreichbar (nach Nichterreichbarkeit) |
    | f | FLAPPING    | Oszillierend/schwankend (Heuristik)          |
    | s | SCHEDULED   | Geplante Downtime                            |
    +---+-------------+----------------------------------------------+
    | n | NONE        | Nie                                          |
    | a | ALL         | Immer (undokumentiert)                       |
    +---+-------------+----------------------------------------------+

* Bei welcher Service-StatusÀnderung Benachrichtigung verschicken?
  --> "service_notification_options"

    +---+-------------+----------------------------------------------+
    |Opt| Name        | Bedeutung                                    |
    +---+-------------+----------------------------------------------+
    | - | OK          | In Ordnung                                   |
    | w | WARNING     | Problematisch                                |
    | c | CRITICAL    | Kritisch                                     |
    | u | UNKNOWN     | Unbekannt (z.B. weil nicht erreichbar)       |
    +---+-------------+----------------------------------------------+
    | r | RECOVERING  | Wieder erreichbar (nach Nichterreichbarkeit) |
    | f | FLAPPING    | Oszillierend/schwankend (Heuristik)          |
    | s | SCHEDULED   | Geplante Downtime                            |
    +---+-------------+----------------------------------------------+
    | n | NONE        | Nie                                          |
    | a | ALL         | Immer (undokumentiert)                       |
    +---+-------------+----------------------------------------------+

* Wiederholung
  + Eskalation
  + BestÀtigung

25) Makros   (Toc)

* Makros sind das Salz in der Suppe von Nagios
  + Ohne sie mÃŒsste jeder Service fÃŒr jeden Host einzeln UND
  + Jedes Kommando fÃŒr jeden Host und jeden Service getrennt definiert werden

* Makros erkennbar an
  + $...$ aussenrum (ACHTUNG: bei Shell/Perl/PHP nur fÃŒhrendes $-Zeichen!)
  + GROSSSCHREIBUNG

* Makro-Typen
  + User Makro:                $USERn$
    - In Datei "resource.cfg" (32 StÃŒck, Konstanten-Charakter)
    - FÃŒr Pfade (zu Plugin)
    - FÃŒr GEHEIME Daten (Account, Passwort), da nicht lesbar fÃŒr alle
  + Standardmakro:             $HOSTADDRESS$, $HOSTSTATE$, ...
    - SEHR VIELE!
    - Aus Objektdefinitionen dynmaisch abgeleitet (nur lesbar)
    - LOKALE Variablenzugriffe (abhÀngig vom Host/Service/...)
  + Kommandozeilen-Argumente:  $ARGn$
    - Zur DatenÃŒbergabe von Service-Definition --> Externes Kommando
    - Numeriert 1..n von links nach rechts (32 StÃŒck $ARG1$ .. $ARG32$)
    - Service-Definition:  Werteliste fÃŒr $ARGn$ mit "!" als Trennzeichen
    - Kommando-Definition: Platzhalter $ARGn$ im Aufruf des externen Kommandos
  + On-demand Makro:           $MAKRO[:HOST[:SERVICE]]$
    - FÃŒr GLOBALE Variablenzugriffe (ÃŒber Objekte hinweg!)
    - Beispiele:
        $HOSTADDRESS:linux02$            # IP-Adresse von Host "linux02"
        $SERVICESTATE:switch05:PING$     # Status-Text Service "PING" Host "Switch05"
        $SERVICESTATEID:switch05:PING$   # Status-Nummer Service "PING" Host "Switch05"
        $SERVICESTATE::PING$             # Status-Text Service "PING" aktueller Host
        $CONTACTNAME:smith$              # Kontaktname von Rechner "smith"
    - Erweiterte Standardmakros fÃŒr Zugriff auf Wert eines fremden Objekts
      (Standardmakros beziehen sich nur auf akt. Host/Service/Kontakt-Objekt)
    - Auch fÌr Host/Service/Kontakt-Gruppen möglich
  + Custom Makro (ab V3!)
    - NUR fÃŒr Host/Service/Contact (nicht fÃŒr ...gruppen)!
      (d.h. TYP = HOST / SERVICE / CONTACT)
    - Benutzerdefinierte Variablen in Objekt TYP (beliebig viele)
      . Definition: _NAME        __NAME        # In Objekt TYP
      . Zugriff:    $_TYPNAME$   $_TYP_NAME$   # 2. Variante besser!
    - Erweitern Host/Service/Kontakt-Objekte um frei wÀhlbare Daten
      (z.B. weitere IP-Adresse eines Hosts fÃŒr Cluster-Partner, ILO, ...
            oder Anmeldedaten die nicht in der GUI erscheinen sollen)
    - Bei Definition GROSS/kleinschreibung egal,
      bei Zugriff immer GROSSschreibung
    - Beispiel:
      . Definition
          define host {
            host_name   linux01
            ...
            _SSHPORT  10022    # EIN "_" ALS PRÄFIX NOTWENDIG!
            __SSHPORT 10023    # Zugriff besser lesbar!
          }
      . Zugriff:
          $_HOSTSSHPORT$       # Aus Host-Objekt --> 10022
          $_HOST_SSHPORT$      # Aus Host-Objekt --> 10023 (besser lesbar!)
          $_SERVICE...$        # Aus Service-Objekt
          $_SERVICE_...$       # Aus Service-Objekt (besser lesbar!)
          $_CONTACT...$        # Aus Kontakt-Objekt
          $_CONTACT_...$       # Aus Kontakt-Objekt (besser lesbar!)
  + Acknowledgement-Daten aus WeboberflÀche:
    - $HOSTACKAUTHOR$       # Ersteller einer Host-BestÀtigung
    - $HOSTACKCOMMENT$      # Text einer Host-BestÀtigung
    - $SERVICEACKAUTHOR$    # Ersteller  einer Service-BestÀtigung
    - $SERVICEACKCOMMENT$   # Text einer Service-BestÀtigung
    Entfernen gefÀhrlicher Zeichen darin per:
      illegal_object_name_chars = `~!$%^&*|'"<>?,()=
      illegal_macro_output_chars    = `~$&|'"<>

* Einsetzbar bei
  + Host- und Service-Check
  + Host- und Service-Benachrichtigung
  + Aufruf von Event-Handlern
  + OCSP/OCHP-Kommandos
  + Verarbeitung von Performance-Daten

* Oft benutzte Standard-Makros (sehr viele --> Auswahl der wichtigsten!):
  --> nagios.sourceforge.net/docs/3_0/macrolist.html
  --> nagios.sourceforge.net/docs/3_0/macros.html
   +----------------------+------------------------------------------------+
   | Name                 | Beschreibung                                   |
   +----------------------+------------------------------------------------+
   | $HOSTNAME$           | Aus Host-Def: "host_name"                      |
   | $HOSTALIAS$          | Aus Host-Def: "alias"                          |
   | $HOSTADDRESS$        | Aus Host-Def: "address" (IP/FQHN)              |
   +----------------------+------------------------------------------------+
   | $HOSTSTATE$          | Zustand UP/DOWN/UNREACHABLE (Text)             |
   | $HOSTSTATEID$        | Zustand 0/1/3 (numerisch)                      |
   | $HOSTSTATETYPE$      | Zustand-Typ HARD/SOFT (Text)                   |
   | $HOSTATTEMPT$        | Anzahl Testversuche im SOFT-Zustand            |
   +----------------------+------------------------------------------------+
   | $HOSTOUTPUT$         | Host-Check: Textausgabe 1.Zeile                |
   | $HOSTLONGOUTPUT$     | Host-Check: Textausgabe Langtext               |
   | $HOSTPERFDATA$       | Host-Check: Textausgabe Performance-Daten      |
   +----------------------+------------------------------------------------+
   | $HOSTGROUPNAME$      | Name 1. Hostgruppe                             | Analog:
   | $HOSTGROUPNAMES$     | Liste aller Hostgruppen (kommasepariert)       | SERVICE...
   | $HOSTGROUPALIAS$     | Alias der Hostgruppe (On-Demand-Makro)         | CONTACT...
   | $HOSTGROUPMEMBERS$   | Mitglieder der Hostgruppe (On-Demand-Makro)    |
   +----------------------+------------------------------------------------+
   | $SERVICEDESC$        | Aus Service-Def: "service_description"         |
   +----------------------+------------------------------------------------+
   | $SERVICESTATE$       | Zustand OK/WARNING/CRITICAL/UNKNOWN (Text)     |
   | $SERVICESTATEID$     | Zustand 0/1/2/3 (numerisch)                    |
   | $SERVICESTATETYPE$   | Zustand-Typ HARD/SOFT (Text)                   |
   | $SERVICEATTEMPT$     | Anzahl Testversuche im SOFT-Zustand            |
   +----------------------+------------------------------------------------+
   | $SERVICEOUTPUT$      | Service-Check: Textausgabe 1.Zeile             |
   | $SERVICELONGOUTPUT$  | Service-Check: Textausgabe Langtext            |
   | $SERVICEPERFDATA$    | Service-Check: Textausgabe Performance-Daten   |
   +----------------------+------------------------------------------------+
   | $SERVICEGROUPNAME$   | Name 1. Servicegruppe                          | Analog:
   | $SERVICEGROUPNAMES$  | Liste aller Servicegruppen (kommasepariert)    | SERVICE
   | $SERVICEGROUPALIAS$  | Alias der Servicegruppe (On-Demand-Makro)      | CONTACT
   | $SERVICEGROUPMEMBERS$| Mitglieder der Servicegruppe (On-Demand-Makro) |
   +----------------------+------------------------------------------------+
   | $CONTACTNAME$        | Aus Contact-Def: "contact_name"                |
   | $CONTACTALIAS$       | Aus Contact-Def: "alias"                       |
   | $CONTACTEMAIL$       | Aus Contact-Def: "email"                       |
   | $CONTACTPAGER$       | Aus Contact-Def: "pager"                       |
   | $CONTACTADDRESSn$    | Aus Contact-Def: "address" (n=1..6)            |
   +----------------------+------+-----------------------------------------+
   | $NOTIFICATIONTYPE$          | Benachrichtigungs-Typ (LISTE)           |
   | $NOTIFICATIONRECIPIENTS$    | Liste EmpfÀnger (kommasepariert) V3     |
   | $HOSTNOTIFICATIONNUMBER$    | BenachrichtigungszÀhler V3              |
   +-----------------------------+-----------------------------------------+
   | $SERVICENOTIFICATIONNUMBER$ | BenachrichtigungszÀhler V3              |
   +-----------------+-----------+-----------------------------------------+
   | $LONGDATETIME$  | Sa 29. Dez 17:23:22 CET 2007 (analog "date")        |
   | $SHORTDATETIME$ | 2007-12-29 17:23:22                                 |
   | $DATE$          | 2007-12-29                                          |
   | $TIME$          | 17:23:22                                            |
   | $TIMET$         | 119845589 (Timestamp: Sek. seit 1.1.1970 00:00:00)  |
   +-----------------+-------+---------------------------------------------+
   | $TOTALHOSTSUP$          | Statistik: Host-Anz UP                      |
   | $TOTALHOSTSDOWN$        | Statistik: Host-Anz DOWN                    |
   | $TOTALHOSTSUNREACHABLE$ | Statistik: Host-Anz UNREACHABLE             |
   +-------------------------+---------------------------------------------+
   | $TOTALSERVICESOK$       | Statistik: Service-Anz OK                   |
   | $TOTALSERVICESWARNING$  | Statistik: Service-Anz WARNING              |
   | $TOTALSERVICESCRITICAL$ | Statistik: Service-Anz CRITICAL             |
   | $TOTALSERVICESUNKNOWN$  | Statistik: Service-Anz UNKNOWN              |
   | $TOTALSERVICEPROBLEMS$  | Statistik: Service-Anz WARN+CRIT+UNKNOWN    |
   +---------------------+---+---------------------------------------------+
   | $HOSTACKAUTHOR$     | Ersteller einer Host-BestÀtigung                |
   | $HOSTACKCOMMENT$    | Text einer Host-BestÀtigung                     |
   +---------------------+-------------------------------------------------+
   | $SERVICEACKAUTHOR$  | Ersteller einer Service-BestÀtigung             |
   | $SERVICEACKCOMMENT$ | Text einer Service-BestÀtigung                  |
   +---------------------+-------------------------------------------------+

* Standardmakros werden auch als Umgebungsvariablen zur VerfÃŒgung gestellt
  + $HOSTADDRESS$ --> $NAGIOS_HOSTADDRESS
  + On-Demand: Keine Host/Service-Makros aus SicherheitsgrÃŒnden
  + $USERn$:   Nicht aus SicherheitsgrÃŒnden
  + Sehr zeitaufwendig --> Abschalten (nur in V3 möglich)
    - use_large_installation_tweaks = 1
    - enable_environment_macros     = 0

* $NOTIFICATIONTYPE$
  + PROBLEM
  + RECOVERY
  + ACKNOWNLEDGEMENT
  + FLAPPING START
  + FLAPPING STOP
  + FLAPPING
  + DOWNTIME START
  + DOWNTIME STOP
  + DOWNTIME CANCELLEd

26) Event-Handler   (Toc)

* Behebung eines Problems ist BESTE, autom. Restart nur ZWEITBESTE Lösung
  + Nicht jeder Dienst eignet sich fÃŒr automatischen Restart
    - Evtl. stÀndiger Neustart
    - Evtl. Datenverlust
    - Evtl. nur in Logdatei vermerkt --> Problem wird gar nicht bemerkt!

* AusgefÃŒhrt fÃŒr
  + Alle SOFT-FehlerzustÀnde
  + Erstes Eintreten eines HARD-Fehlerzustands
  + Wiederherstellung des OK-Zustands nach einem Fehler

             |            Erste Notification (weitere können folgen)
             |            ^
             |     HARD   :                    HARD (sofort!)
          OK |---------+  :                   +---------------- Fehlerzustand
             |         |  :                   |
     WARNING |         |  :                   |
             |         |  :HARD (verzögert!)  |
    CRITICAL |         +----------------------+
             |         SOFT
             |         ++++-------------------+---------------- Event-Handler
             |         ||||                   |
             |         vvvv                   v
             #================================================> Zeit
             ^    ^    ^^^^    ^    ^    ^    ^    ^    ^    ^
             |    |    ||||    |    |    |    |    |    |    |
             +----+----++++----+----+----+----+----+----+----+- Checks/Tests
             0    5   10      18   23   28   33   38   43   48
                       11
                        12
                         13

* Aufruf bei JEDEM Event, es muss aber nicht jedesmal eine Aktion erfolgen
    +--------------------------------------------------------------------+
    | define host {                                                      |
    |   ...                                                              |
    |   event_handler  restart-FOO                                       |
    |   ...                                                              |
    | }                                                                  |
    |                                                                    |
    | define service {                                                   |
    |   ...                                                              |
    |   event_handler  restart-FOO                                       |
    |   ...                                                              |
    | }                                                                  |
    |                                                                    |
    | define command {                                                   |
    |   command_name  restart-FOO                                        |
    |   command_line  $USER1$/eventhandler/restart-FOO \                 |
    |                 $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ |
    | }                                                                  |
    +--------------------------------------------------------------------+

* Liegen in /usr/local/nagios/libexec/eventhandler/
            /usr/share/nagios3/plugins/eventhandler/

* Service: Drei Parameter mit folgenden Makro-Werten
  - $SERVICESTATE$       # Zustand OK, WARNING, CRITICAL, UNKNOWN
  - $SERVICESTATETYPE$   # Zustand-Typ SOFT, HARD
  - $SERVICEATTEMPT$     # Versuch 1, 2, ...

* Host: Drei Parameter mit folgenden Makro-Werten
  - $HOSTSTATE$       # Zustand UP, DOWN, UNREACHABLE
  - $HOSTSTATETYPE$   # Zustand-Typ SOFT, HARD
  - $HOSTATTEMPT$     # Versuch 1, 2, ...

* Beispiel: Nur beim 3. Soft- und beim ersten Hard-Fehlerzustand etwas tun
  (Shell-Skript, mit Rechten von Benutzer "nagios" ausgefÃŒhrt)
    +-------------------------------------------------------------------+
    | # $1=$SERVICESTATE$ $2=$SERVICESTATETYPE$ $3=$SERVICEATTEMPT$     |
    | case "$1" in                                                      |
    |   OK) ;;                                                          |
    |   WARNING) ;;                                                     |
    |   CRITICAL)  if [ "$2" = "HARD" -o "$2" = "SOFT" -a "$3" -eq 3 ]  |
    |              then                                                 |
    |                echo "Restarting service FOO"                      |
    |                /usr/bin/sudo /etc/init.d/FOO restart              |
    |              fi ;;                                                |
    |   UNKNOWN) ;;                                                     |
    | esac                                                              |
    | exit 0                                                            |
    +-------------------------------------------------------------------+

  Notwendiger Inhalt der "/etc/sudoers"-Datei fÃŒr obiges Skript:
    +---------------------------------------------+
    | nagios ALL=(root) NOPASSWD: /etc/init.d/FOO |
    +---------------------------------------------+

27) Flap Detection   (Toc)

* UnzuverlÀssige Checks (oszillierend) temporÀr deaktivieren

* Letzte 21 ZustÀnde (Testergebnisse) jedes Services gemerkt (Historyspeicher)
  + Nur Hard-ZustÀnde und Soft-Recovery
  + Zeitliche AbstÀnde nicht konstant
    - interval_length       = 60  # Sekunden
    - check_interval        = 5   # Minuten (alt: "normal_check_interval")
    - max_check_attempts    = 5   # Check-Wiederholungen bei Status-Änderung
    - retry_interval        = 2   # Minuten (alt: "retry_check_interval")

* Max. 20 Status-Wechsel in diesen 21 ZustÀnden möglich
  prozentuale Anzahl an Wechseln (gewichtet von alt 0.8 --> 1.2 neu):
  +   0% =  0 Wechsel (nie)
  +  25% =  5 Wechsel
  +  50% = 10 Wechsel
  +  75% = 15 Wechsel
  + 100% = 20 Wechsel (jedesmal)

* 2 Schwellwerte fÃŒr Host und fÃŒr Service
  + Oberer ÃŒberschritten   --> Keine Meldung mehr, nichtpermanenter Kommentar
  + Unterer unterschritten --> Wieder Meldungen

* Globale Einstellungen (nagios.cfg)
  + enable_flap_detection       =    1   # Flag
  + low_host_flap_threshold     =  5.0   # Prozent
  + high_host_flap_threshold    = 20.0   # Prozent
  + low_service_flap_threshold  =  5.0   # Prozent
  + high_service_flap_threshold = 20.0   # Prozent

* Konfiguration Hosts (nach "flap" suchen):
  + flap_detection_enabled   =    1      # Flag
  + low_flap_threshold       =  5.0      # Prozent
  + low_flap_threshold       = 20.0      # Prozent
  + flap_detection_options   = o,d,u     # Nur OK,DOWN,UNREACHABLE

* Konfiguration Services (nach "flap" suchen):
  + flap_detection_enabled   =    1      # Flag
  + low_flap_threshold       =  5.0      # Prozent
  + low_flap_threshold       = 20.0      # Prozent
  + flap_detection_options   = o,w,c,u   # Nur OK,WARNING,CRITICAL,UNKNOWN

28) External Commands (externe Kommandos)   (Toc)

* FÃŒr Kommunikation externer Programme mit Nagios (write-only) oder
  von Event-Handlern mit Nagios
  (ob Kommando akzeptiert wurde kann aus Logfile ermittelt werden, read-only)
  + GUI                   --> Daemon steuern
  + Nagios Events         --> Daemon steuern
  + Passive Check Plugins --> Daemon informieren
  + Benutzer(kommandos)   --> Daemon steuern

* Beispiel
  + Host/Service SOFORT checken
  + Host/Service/Contact/... Custom Variable Àndern

* Event-Handler
  - Bei jedem Statuswechsel ausgefÃŒhrt
  - Bei SOFT und HARD-Statuswechsel ausgefÃŒhrt
    --> Reaktion möglich bevor Nagios Notification verschickt
    $SERVICESTATE$
    $SERVICESTATETYPE$
    $SERVICEATTEMPT$
  --> 26) Event-Handler

* Kommando-Beschreibung siehe:
  --> www.nagios.org/developerinfo/externalcommands/commandlist.php
  --> old.nagios.org/developerinfo/externalcommands/commandinfo.php
  --> www.nagios.org/developerinfo/externalcommands/commandlist.php?command_id=NNN

* 14 Kategorien
  + Adaptive Monitoring
  + Comments
  + Contacts
  + Event Handlers
  + Flap Detection
  + Hosts
  + Misc
  + Nagios Process
  + Notifications
  + OCHP/OCSP = Obsessive Compulsive Host/Service Processor Command
  + Performance Data
  + Scheduled Downtime
  + Service and Host Checks
  + Services

* 157 Kommandos
  + Nummer 1-158 (133 nicht belegt)
  + Einzeilig
  + GROSSschreibung wichtig
  + Parameter durch ";" zu trennen
  + Korrekte Namen von Hosts, Services, ... sind Voraussetzung
  + Kein Output
  + Keine RÃŒckmeldung

* Absetzen durch Schreiben in "External Command File"
    --> /usr/local/nagios/var/rw/nagios.cmd
  + "Named Pipe/FIFO" zur Kommunikation mit Nagios von außen (Aufruf)
  + Aktivieren in "nagios.cfg":
    --> check_external_commands = 1
  + Kein Schutz (keine Authentifizierung) außer Zugriffsrechte
    - Besitzer "nagios"
    - Gruppe "nagioscmd"
  + Keine Antwort --> check_logfile
  + Format (TS=Timestamp=date +%s, CMD=Uppercase, ARG1-n=Argumente)
      [TS] CMD;ARG1;ARG2;...;ARGn\n
  + Beispiel (Retention-Datei sichern/lesen)
      CMDFILE=/usr/local/nagios/var/rw/nagios.cmd
      echo "[$(date +%s)] SAVE_STATE_INFORMATION" > $CMDFILE
      echo "[$(date +%s)] READ_STATE_INFORMATION" > $CMDFILE
  + Beispiel (Kommentar zu Host/Service eintragen)
      echo "[$(date +%s)] ADD_HOST_COMMENT;host;1;tsbirn;Kommentar..." > $CMDFILE
      echo "[$(date +%s)] ADD_SVC_COMMENT;host;svcdesc;1;tsbirn;Kommentar..." > $CMDFILE
  + Beispiel (Nagios passiv schalten):
      echo "[$(date +%s)] DISABLE_EVENT_HANDLERS"             > $CMDFILE
      echo "[$(date +%s)] DISABLE_FAILURE_PREDICTION"         > $CMDFILE
      echo "[$(date +%s)] DISABLE_FLAP_DETECTION"             > $CMDFILE
      echo "[$(date +%s)] DISABLE_HOST_FRESHNESS_CHECKS"      > $CMDFILE
      echo "[$(date +%s)] DISABLE_HOST_NOTIFICATIONS"         > $CMDFILE
      echo "[$(date +%s)] DISABLE_NOTIFICATIONS"              > $CMDFILE
      echo "[$(date +%s)] DISABLE_PASSIVE_HOST_CHECKS"        > $CMDFILE
      echo "[$(date +%s)] DISABLE_PERFORMANCE_DATA"           > $CMDFILE
      echo "[$(date +%s)] DISABLE_SERVICEGROUP_HOST_CHECKS"   > $CMDFILE
      echo "[$(date +%s)] DISABLE_SERVICE_FRESHNESS_CHECKS"   > $CMDFILE
      echo "[$(date +%s)] DISABLE_SVC_CHECK"                  > $CMDFILE
      echo "[$(date +%s)] STOP_ACCEPTING_PASSIVE_HOST_CHECKS" > $CMDFILE
      echo "[$(date +%s)] STOP_ACCEPTING_PASSIVE_SVC_CHECKS"  > $CMDFILE
      echo "[$(date +%s)] STOP_EXECUTING_HOST_CHECKS"         > $CMDFILE
      echo "[$(date +%s)] STOP_EXECUTING_SVC_CHECKS"          > $CMDFILE
      echo "[$(date +%s)] STOP_OBSESSING_OVER_HOST_CHECKS"    > $CMDFILE
      echo "[$(date +%s)] STOP_OBSESSING_OVER_SVC_CHECKS"     > $CMDFILE

* Liste der Kommandos mit ihren Parametern:
  +------------------------------------------------+--------------------------------------------+
  | Kommando-Name                                  | Kommando-Parameter (durch ";" getrennt)    |
  +------------------------------------------------+--------------------------------------------+
  | ACKNOWLEDGE_HOST_PROBLEM                       | ;host_name;sticky;notify;persistent;author |
  | ACKNOWLEDGE_SVC_PROBLEM                        | ;host_name;svc_desc;sticky;notify          |
  | ADD_HOST_COMMENT                               | ;host_name;persistent;author;comment       |
  | ADD_SVC_COMMENT                                | ;host_name;svc_desc;persistent;author      |
  +------------------------------------------------+--------------------------------------------+
  | CHANGE_CONTACT_HOST_NOTIFICATION_TIMEPERIOD    | ;contact_name                              |
  | CHANGE_CONTACT_MODATTR                         | ;contact_name;value                        |
  | CHANGE_CONTACT_MODHATTR                        | ;contact_name;value                        |
  | CHANGE_CONTACT_MODSATTR                        | ;contact_name;value                        |
  | CHANGE_CONTACT_SVC_NOTIFICATION_TIMEPERIOD     | ;contact_name                              |
  | CHANGE_CUSTOM_CONTACT_VAR                      | ;contact_name;var_name;var_value           |
  | CHANGE_CUSTOM_HOST_VAR                         | ;host_name;var_name;var_value              |
  | CHANGE_CUSTOM_SVC_VAR                          | ;host_name;svc_desc;var_name;var_value     |
  | CHANGE_GLOBAL_HOST_EVENT_HANDLER               | ;event_handler_cmd                         |
  | CHANGE_GLOBAL_SVC_EVENT_HANDLER                | ;event_handler_cmd                         |
  | CHANGE_HOST_CHECK_COMMAND                      | ;host_name;check_cmd                       |
  | CHANGE_HOST_CHECK_TIMEPERIOD                   | ;host_name;check_timeperod                 |
  | CHANGE_HOST_CHECK_TIMEPERIOD                   | ;host_name;timeperiod                      |
  | CHANGE_HOST_EVENT_HANDLER                      | ;host_name;event_handler_cmd               |
  | CHANGE_HOST_MODATTR                            | ;host_name;value                           |
  | CHANGE_MAX_HOST_CHECK_ATTEMPTS                 | ;host_name;check_attempts                  |
  | CHANGE_MAX_SVC_CHECK_ATTEMPTS                  | ;host_name;svc_desc                        |
  | CHANGE_NORMAL_HOST_CHECK_INTERVAL              | ;host_name;check_interval                  |
  | CHANGE_NORMAL_SVC_CHECK_INTERVAL               | ;host_name;svc_desc                        |
  | CHANGE_RETRY_HOST_CHECK_INTERVAL               | ;host_name;svc_desc                        |
  | CHANGE_RETRY_SVC_CHECK_INTERVAL                | ;host_name;svc_desc                        |
  | CHANGE_SVC_CHECK_COMMAND                       | ;host_name;svc_desc;check_cmd              |
  | CHANGE_SVC_CHECK_TIMEPERIOD                    | ;host_name;svc_desc                        |
  | CHANGE_SVC_EVENT_HANDLER                       | ;host_name;svc_desc                        |
  | CHANGE_SVC_MODATTR                             | ;host_name;svc_desc;value                  |
  | CHANGE_SVC_NOTIFICATION_TIMEPERIOD             | ;host_name;svc_desc                        |
  +------------------------------------------------+--------------------------------------------+
  | DELAY_HOST_NOTIFICATION                        | ;host_name;notification_time               |
  | DELAY_SVC_NOTIFICATION                         | ;host_name;svc_desc;notification_time      |
  +------------------------------------------------+--------------------------------------------+
  | DEL_ALL_HOST_COMMENTS                          | ;host_name                                 |
  | DEL_ALL_SVC_COMMENTS                           | ;host_name;svc_desc                        |
  | DEL_HOST_COMMENT                               | ;comment_id                                |
  | DEL_HOST_DOWNTIME                              | ;downtime_id                               |
  | DEL_SVC_COMMENT                                | ;comment_id                                |
  | DEL_SVC_DOWNTIME                               | ;downtime_id                               |
  +------------------------------------------------+--------------------------------------------+
  | DISABLE_ALL_NOTIFICATIONS_BEYOND_HOST          | ;host_name                                 |
  | DISABLE_CONTACTGROUP_HOST_NOTIFICATIONS        | ;contactgroup_name                         |
  | DISABLE_CONTACTGROUP_SVC_NOTIFICATIONS         | ;contactgroup_name                         |
  | DISABLE_CONTACT_HOST_NOTIFICATIONS             | ;contact_name                              |
  | DISABLE_CONTACT_SVC_NOTIFICATIONS              | ;contact_name                              |
  | DISABLE_EVENT_HANDLERS                         |                                            |
  | DISABLE_FAILURE_PREDICTION                     |                                            |
  | DISABLE_FLAP_DETECTION                         |                                            |
  | DISABLE_HOSTGROUP_HOST_CHECKS                  | ;hostgroup_name                            |
  | DISABLE_HOSTGROUP_HOST_NOTIFICATIONS           | ;hostgroup_name                            |
  | DISABLE_HOSTGROUP_PASSIVE_HOST_CHECKS          | ;hostgroup_name                            |
  | DISABLE_HOSTGROUP_PASSIVE_SVC_CHECKS           | ;hostgroup_name                            |
  | DISABLE_HOSTGROUP_SVC_CHECKS                   | ;hostgroup_name                            |
  | DISABLE_HOSTGROUP_SVC_NOTIFICATIONS            | ;hostgroup_name                            |
  | DISABLE_HOST_AND_CHILD_NOTIFICATIONS           | ;host_name                                 |
  | DISABLE_HOST_CHECK                             | ;host_name                                 |
  | DISABLE_HOST_EVENT_HANDLER                     | ;host_name                                 |
  | DISABLE_HOST_FLAP_DETECTION                    | ;host_name                                 |
  | DISABLE_HOST_FRESHNESS_CHECKS                  |                                            |
  | DISABLE_HOST_NOTIFICATIONS                     | ;host_name                                 |
  | DISABLE_HOST_SVC_CHECKS                        | ;host_name                                 |
  | DISABLE_HOST_SVC_NOTIFICATIONS                 | ;host_name                                 |
  | DISABLE_NOTIFICATIONS                          |                                            |
  | DISABLE_PASSIVE_HOST_CHECKS                    | ;host_name                                 |
  | DISABLE_PASSIVE_SVC_CHECKS                     | ;host_name;svc_desc                        |
  | DISABLE_PERFORMANCE_DATA                       |                                            |
  | DISABLE_SERVICEGROUP_HOST_CHECKS               | ;svcgroup_name                             |
  | DISABLE_SERVICEGROUP_HOST_NOTIFICATIONS        | ;svcgroup_name                             |
  | DISABLE_SERVICEGROUP_PASSIVE_HOST_CHECKS       | ;svcgroup_name                             |
  | DISABLE_SERVICEGROUP_PASSIVE_SVC_CHECKS        | ;svcgroup_name                             |
  | DISABLE_SERVICEGROUP_SVC_CHECKS                | ;svcgroup_name                             |
  | DISABLE_SERVICEGROUP_SVC_NOTIFICATIONS         | ;svcgroup_name                             |
  | DISABLE_SERVICE_FLAP_DETECTION                 | ;host_name;svc_desc                        |
  | DISABLE_SERVICE_FRESHNESS_CHECKS               |                                            |
  | DISABLE_SVC_CHECK                              | ;host_name;svc_desc                        |
  | DISABLE_SVC_EVENT_HANDLER                      | ;host_name;svc_desc                        |
  | DISABLE_SVC_FLAP_DETECTION                     | ;host_name;svc_desc                        |
  | DISABLE_SVC_NOTIFICATIONS                      | ;host_name;svc_desc                        |
  +------------------------------------------------+--------------------------------------------+
  | ENABLE_ALL_NOTIFICATIONS_BEYOND_HOST           | ;host_name                                 |
  | ENABLE_CONTACTGROUP_HOST_NOTIFICATIONS         | ;contactgroup_name                         |
  | ENABLE_CONTACTGROUP_SVC_NOTIFICATIONS          | ;contactgroup_name                         |
  | ENABLE_CONTACT_HOST_NOTIFICATIONS              | ;contact_name                              |
  | ENABLE_CONTACT_SVC_NOTIFICATIONS               | ;contact_name                              |
  | ENABLE_EVENT_HANDLERS                          |                                            |
  | ENABLE_FAILURE_PREDICTION                      |                                            |
  | ENABLE_FLAP_DETECTION                          |                                            |
  | ENABLE_HOSTGROUP_HOST_CHECKS                   | ;hostgroup_name                            |
  | ENABLE_HOSTGROUP_HOST_NOTIFICATIONS            | ;hostgroup_name                            |
  | ENABLE_HOSTGROUP_PASSIVE_HOST_CHECKS           | ;hostgroup_name                            |
  | ENABLE_HOSTGROUP_PASSIVE_SVC_CHECKS            | ;hostgroup_name                            |
  | ENABLE_HOSTGROUP_SVC_CHECKS                    | ;hostgroup_name                            |
  | ENABLE_HOSTGROUP_SVC_NOTIFICATIONS             | ;hostgroup_name                            |
  | ENABLE_HOST_AND_CHILD_NOTIFICATIONS            | ;host_name                                 |
  | ENABLE_HOST_CHECK                              | ;host_name                                 |
  | ENABLE_HOST_EVENT_HANDLER                      | ;host_name                                 |
  | ENABLE_HOST_FLAP_DETECTION                     | ;host_name                                 |
  | ENABLE_HOST_FRESHNESS_CHECKS                   |                                            |
  | ENABLE_HOST_NOTIFICATIONS                      | ;host_name                                 |
  | ENABLE_HOST_SVC_CHECKS                         | ;host_name                                 |
  | ENABLE_HOST_SVC_NOTIFICATIONS                  | ;host_name                                 |
  | ENABLE_NOTIFICATIONS                           |                                            |
  | ENABLE_PASSIVE_HOST_CHECKS                     | ;host_name                                 |
  | ENABLE_PASSIVE_SVC_CHECKS                      | ;host_name;svc_desc                        |
  | ENABLE_PERFORMANCE_DATA                        |                                            |
  | ENABLE_SERVICEGROUP_HOST_CHECKS                | ;svcgroup_name                             |
  | ENABLE_SERVICEGROUP_HOST_NOTIFICATIONS         | ;svcgroup_name                             |
  | ENABLE_SERVICEGROUP_PASSIVE_HOST_CHECKS        | ;svcgroup_name                             |
  | ENABLE_SERVICEGROUP_PASSIVE_SVC_CHECKS         | ;svcgroup_name                             |
  | ENABLE_SERVICEGROUP_SVC_CHECKS                 | ;svcgroup_name                             |
  | ENABLE_SERVICEGROUP_SVC_NOTIFICATIONS          | ;svcgroup_name                             |
  | ENABLE_SERVICE_FRESHNESS_CHECKS                |                                            |
  | ENABLE_SVC_CHECK                               | ;host_name;svc_desc                        |
  | ENABLE_SVC_EVENT_HANDLER                       | ;host_name;svc_desc                        |
  | ENABLE_SVC_FLAP_DETECTION                      | ;host_name;svc_desc                        |
  | ENABLE_SVC_NOTIFICATIONS                       | ;host_name;svc_desc                        |
  +------------------------------------------------+--------------------------------------------+
  | PROCESS_FILE                                   | ;file_name;delete                          |
  | PROCESS_HOST_CHECK_RESULT                      | ;host_name;status_code;plugin_output       |
  | PROCESS_SERVICE_CHECK_RESULT                   | ;host_name;svc_desc;status_code;plugin_outp|
  +------------------------------------------------+--------------------------------------------+
  | READ_STATE_INFORMATION                         |                                            |
  +------------------------------------------------+--------------------------------------------+
  | REMOVE_HOST_ACKNOWLEDGEMENT                    | ;host_name                                 |
  | REMOVE_SVC_ACKNOWLEDGEMENT                     | ;host_name;svc_desc                        |
  +------------------------------------------------+--------------------------------------------+
  | RESTART_PROGRAM                                |                                            |
  | SAVE_STATE_INFORMATION                         |                                            |
  +------------------------------------------------+--------------------------------------------+
  | SCHEDULE_AND_PROPAGATE_HOST_DOWNTIME           | ;host_name;start_time;end_time             |
  | SCHEDULE_AND_PROPAGATE_TRIGGERED_HOST_DOWNTIME | ;host_name;start_time                      |
  | SCHEDULE_FORCED_HOST_CHECK                     | ;host_name;check_time                      |
  | SCHEDULE_FORCED_HOST_SVC_CHECKS                | ;host_name;check_time                      |
  | SCHEDULE_FORCED_SVC_CHECK                      | ;host_name;svc_desc;check_time             |
  | SCHEDULE_HOSTGROUP_HOST_DOWNTIME               | ;hostgroup_name;start_time;end_time        |
  | SCHEDULE_HOSTGROUP_SVC_DOWNTIME                | ;hostgroup_name;start_time;end_time        |
  | SCHEDULE_HOST_CHECK                            | ;host_name;check_time                      |
  | SCHEDULE_HOST_DOWNTIME                         | ;host_name;start_time;end_time;fixed       |
  | SCHEDULE_HOST_SVC_CHECKS                       | ;host_name;check_time                      |
  | SCHEDULE_HOST_SVC_DOWNTIME                     | ;host_name;start_time;end_time;fixed       |
  | SCHEDULE_SERVICEGROUP_HOST_DOWNTIME            | ;svcgroup_name;start_time                  |
  | SCHEDULE_SERVICEGROUP_SVC_DOWNTIME             | ;svcgroup_name;start_time;end_time         |
  | SCHEDULE_SVC_CHECK                             | ;host_name;svc_desc;check_time             |
  | SCHEDULE_SVC_DOWNTIME                          | ;host_name;svc_desc;start_time;end_time    |
  +------------------------------------------------+--------------------------------------------+
  | SEND_CUSTOM_HOST_NOTIFICATION                  | ;host_name;options;author;comment          |
  | SEND_CUSTOM_SVC_NOTIFICATION                   | ;host_name;svc_desc;options                |
  +------------------------------------------------+--------------------------------------------+
  | SET_HOST_NOTIFICATION_NUMBER                   | ;host_name;notification_number             |
  | SET_SVC_NOTIFICATION_NUMBER                    | ;host_name;svc_desc                        |
  +------------------------------------------------+--------------------------------------------+
  | SHUTDOWN_PROGRAM                               |                                            |
  +------------------------------------------------+--------------------------------------------+
  | START_ACCEPTING_PASSIVE_HOST_CHECKS            |                                            |
  | START_ACCEPTING_PASSIVE_SVC_CHECKS             |                                            |
  | START_EXECUTING_HOST_CHECKS                    |                                            |
  | START_EXECUTING_SVC_CHECKS                     |                                            |
  | START_OBSESSING_OVER_HOST                      | ;host_name                                 |
  | START_OBSESSING_OVER_HOST_CHECKS               |                                            |
  | START_OBSESSING_OVER_SVC                       | ;host_name;svc_desc                        |
  | START_OBSESSING_OVER_SVC_CHECKS                |                                            |
  +------------------------------------------------+--------------------------------------------+
  | STOP_ACCEPTING_PASSIVE_HOST_CHECKS             |                                            |
  | STOP_ACCEPTING_PASSIVE_SVC_CHECKS              |                                            |
  | STOP_EXECUTING_HOST_CHECKS                     |                                            |
  | STOP_EXECUTING_SVC_CHECKS                      |                                            |
  | STOP_OBSESSING_OVER_HOST                       | ;host_name                                 |
  | STOP_OBSESSING_OVER_HOST_CHECKS                |                                            |
  | STOP_OBSESSING_OVER_SVC                        | ;host_name;svc_desc                        |
  | STOP_OBSESSING_OVER_SVC_CHECKS                 |                                            |
  +------------------------------------------------+--------------------------------------------+
* Growl notification System fÃŒr OS X und Windows:
  --> www.growl.info/
  --> www.growlforwindows.com/

29) Performance-Daten mit PNP4Nagios   (Toc)

* RRD-Datenbanken
  + Round Robin Database
  + Feste Größe --> Speicherbedarf begrenzt
  + BeschrÀnkt auf vorgegebenes Zeitfenster
  + FÃŒr Trends

* Performance-Daten (nach dem "|" in der Plugin-Nachricht)
  + --> nagios.frank4dd.com/pnp4nagios/graph?host=.pnp-internal&srv=runtime
  + --> localhost/pnp4nagios/graph?host=.pnp-internal&srv=runtime
  + Format:   LABEL=WERT*;WARN;CRIT;MIN;MAX <BLANK> LABEL=... <BLANK> ...
    - Auf Komma "," und ";" achten!
    - Bei Wert evtl. Einheit mitgeliefert
    - Mehrere Werte per Leerraum getrennt möglich
    - MAX darf fehlen = unendlich
    - MIN darf fehlen = 0
  + Beispiel: Ergebnis von "check_ping" (MAX fehlt jeweils)
    LABEL=WERT   ;WARN   ;CRIT   ;MIN BLANK LABEL=WERT;WARN;CRIT;MIN
      rta=0.067ms;200.000;500.000;0;           pl=0%;40;80;0;
      (rta=round trip, pl=packet loss)
   /usr/lib/nagios/plugins/check_ping -H glasgow -w 200,40% -c 500,80%

     PING OK - Packet loss = 0%, RTA = 1.75 ms|rta=1.747000ms;200.000000;500.000000;0.000000 pl=0%;40;80;0
     <--------------------------------------->|<--------------------------------------------------------->
         Status-Nachricht fÃŒr GUI-Anzeige     |  Performancedaten (hier 2 Werte: rta, pl)

  + Manche Plugins geben KEINE Performancedaten zurÃŒck:
     /usr/lib/nagios/plugins/check_ssh -H glasgow
     --> SSH OK - OpenSSH_5.9p1 Debian-5ubuntu1.1 (protocol 2.0)
  + Weiteres Beispiel:
     /usr/lib/nagios/plugins/check_load -w 8,4,4 -c 10,5,5

     OK - load average: 0.18, 0.17, 0.21|load1=0.180;8.000;10.000;0; load5=0.170;4.000;5.000;0; load15=0.210;4.000;5.000;0;

* Performance-Daten-Verarbeitung in Nagios konfigurieren
    perf_data_timeout        = 5
    process_performance_data = 1                          # Performanzdaten verarbeiten
    service_perfdata_command = process-service-perfdata   # Kmdo zur Verarb. von Perf.daten
    host_perfdata_command    = process-host-perfdata      # Kmdo zur Verarb. von Perf.daten
    host_perfdata_file                        = PATH
    service_perfdata_file                     = PATH
    host_perfdata_file_template               = TEXT (mit Makros)
    service_perfdata_file_template            = TEXT (mit Makros)
    host_perfdata_file_mode                   = a|w|p (append,write,pipe)
    service_perfdata_file_mode                = a|w|p (append,write,pipe)
    host_perfdata_file_processing_interval    = 0
    service_perfdata_file_processing_interval = 0
    host_perfdata_file_processing_command     = CMD
    service_perfdata_file_processing_command  = CMD
  PRO Service ist Perf.datenverarb. zu aktivieren:
    process_perf_data  1                  # Z.B. generisches Service-Template
  PRO Host ist Perf.datenverarb. zu aktivieren:
    process_perf_data  1                  # Z.B. generisches Host-Template

* PNP4Nagios in Nagios integrieren --> ZusÀtzliche Grafik in GUI angezeigt
  PRO Host (z.B. generisches Host-Template)
    action_url         /nagios/pnp/index.php?host=$HOSTNAME$
    define command {
      command_name process-host-perfdata
      command_line $USER1$/process_perfdata.pl -d HOSTPERFDATA
    }
  PRO Service (z.B. generisches Service-Template)
    action_url         /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
    define command {
      command_name process-service-perfdata
      command_line $USER1$/process_perfdata.pl
    }

* Verz.+Dateien fÃŒr Performance-Daten:
    /opt/nagios/share/perfdata/...          # Bei Quell-Installation
    /var/nagios/perfdata/HOST/SERVICE.rrd   # RRD-Daten
    /var/nagios/perfdata/HOST/SERVICE.xml   # Info zu graf. Aufbereitung

* PNP4Nagios Konfiguration und Integration in Nagios verifizieren:
    -m default --> -m standard --> sync bulk bulk+npcd npcdmod
    perl verify_php_config -m bulk -c /etc/nagios3/nagios.cfg -p /etc/pnp4nagios

* Notwendige Pakete fÃŒr PNP4Nagios:
    RRDTool
    zlib
    GD
    php5-gd
    php5-zlib

* PNP kennt drei Modi:
  + Default/Standard (siehe oben):
    - Pro PrÃŒfergebnis die Performance-Daten verarbeiten (Skript aufrufen)
    - Hohe Last bei vielen Hosts/Services
  + Bulk:
    - Performance-Daten erst sammeln und zwischenspeichern
    - Periodisch verarbeiten (festes Intervall)
      process_performance_data = 1
      service_perfdata_command = # KEIN Kmdo zur Verarbeitung von Perf.daten
      host_perfdata_command    = # KEIN Kmdo zur Verarbeitung von Perf.daten
      service_perfdata_file          = /var/nagios/service-perfdata
      service_perfdata_file_template = DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE:$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
      service_perfdata_file_mode                = a
      service_perfdata_file_processing_interval = 15
      service_perfdata_file_processing_command  = process-service-perfdata-file
      service_perfdata_file_processing_command  = pnp-bulk-service
      host_perfdata_file          = /var/nagios/host-perfdata
      host_perfdata_file_template = DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE:$HOSTSTATETYPE$
      host_perfdata_file_mode                = a
      host_perfdata_file_processing_interval = 15
      host_perfdata_file_processing_command  = process-host-perfdata-file
      host_perfdata_file_processing_command  = pnp-bulk-host
      define command {
        command_name process-service-perfdata
        command_line $USER1$/process_perfdata.pl --bulk=/var/lib/nagios/service-perfdata
      }
      define command {
        command_name process-host-perfdata
        command_line $USER1$/process_perfdata.pl -d HOSTPERFDATA --bulk=/var/lib/nagios/host-perfdata
      }
  + NPC-Daemon (Nagios Performance C):
    - Periodisch verarbeiten (kein festes Intervall, abhÀngig von Bedarf)
    - NPC-Daemon ÃŒberwacht Verz. wohin Performance-Daten verschoben werden
      --> VollstÀndige Entkopplung der Perf.-Daten-Verarb. vom Nagios-Daemon
          (verteilter Storage --> Verarbeitung auf anderem Host)
    - NPC verarbeitet Perf.daten nur wenn Leistungsreserve auf Nagios-Host vorh.
    - Von Nagios aufgerufene Kommandos verschieben Dateien in vom NPC-Daemon
      ueberwachte Verz. und versehen sie dabei mit einem Zeitstempel
      define command {
        command_name process-service-perfdata-file
        command_line /bin/mv /var/lib/nagios/service-perfdata /var/lib/nagios/spool/perfdata/service-perfdata.$TIMET$
      }
      define command {
        command_name process-host-perfdata-file
        command_line /bin/mv /var/lib/nagios/host-perfdata /var/lib/nagios/spool/perfdata/host-perfdata.$TIMET$
      }
    - Konfiguration in /etc/pnp4nagios/npcd.cfg:
       user                  = nagios
       group                 = nagios
       perfdata_spool_dir    = /var/lib/nagios/spool/perfdata/
       perfdata_file_run_cmd = $USER1$/process_perfdata.pl
    - Starten des NPC-Daemons:
       npcd -d -f /etc/init.d/npcd    # -d=Daemon -f=Config file
       /etc/init.d/npcd start
  + Event-Broker-Modul
    - Direkt in Nagios-Dienst integriert
    - Perf.daten in Spool-Verz. von NPC schreiben

* Templates
  + Zur Erzeugung der Graphen
  + FÌr alle gÀngigen Plugins bereits dabei
  + Zuordnung von Templates zu Services
    - 1:1
      Kommando "check_ping" --> Template "check_ping.php"
  + Realisiert per Verlinkung in Verz.:
      share/templates         # Individuelle Tempates (mitgebracht)
      share/templates.dist    # Default-Tempates (Zuordnung)
      cd share/templates
      ln -s ../templates.dist/check_ping.php check_icmp.php
  + Default-Tempate
      share/templates.dist/default.php

30) Logging   (Toc)

Nagios fÃŒhrt ein eigenes Logging seiner wichtigsten Aktionen (Start, Stop, ...)
auf Datei durch. Ebenso das Rotieren Komprimieren der Logdatei (h=hourly,
d=daily, w=weekly, m=monthly, y=yearly) sowie das Verschieben in ein Archivverz.

  log_file            = /var/log/nagios3/nagios.log
  log_archive_path    = /var/log/nagios3/archives
  log_rotation_method = d

Die Logmeldungen können parallel auch an den Syslog-Daemon (syslog, syslog-ng, rsyslog)
geschickt werden:

  use_syslog = 1

Auswahl der in das Logging aufzunehmenden Elemente:

  log_notifications     = 1   # Benachrichtigungen
  log_service_retries   = 1   # Wiederholung von Servic-Checks (bei Fehler)
  log_host_retries      = 1   # Wiederholung von Servic-Checks (bei Fehler)
  log_event_handlers    = 1   # Aufruf von Event-Handler
  log_initial_states    = 0   # Startzustand aller Checks
  log_external_commands = 1   # Aufruf externer Kommandos
  log_passive_checks    = 1   # Passive PrÃŒfungen (eingehende)

31) Debugging   (Toc)

Nagios kann zusÀtzlich Debug-Meldungen Ìber seine internen AblÀufe erzeugen,
die Konfiguration erfolgt ÃŒber folgende Parameter:

  debug_level         = 0                                  # -1 = alles, Bitmuster
  debug_verbosity     = 1                                  # 0/1/2
  debug_file          = /var/log/nagios3/nagios.debug      # Debugdatei
  max_debug_file_size = 1000000                            # Byte

Ist die max. Dateigröße erreicht, wird die Debugdatei mit Endung ".old" versehen und
neu begonnen (rollierend, d.h. mehr als 2x max_debug_file_size wird nicht belegt):

  /var/log/nagios3/nagios.debug       # Aktuelle Debug-Datei
  /var/log/nagios3/nagios.debug.old   # Vorherige Debug-Datei

Die Auswahl der Loginhalte erfolgt per "debug_level = BITMUSTER"
(Summe/Veroderung der Einzelbits)

  +------+---------------------------------+----+
  | Wert | Bitbedeutung                    |Vers|
  +------+---------------------------------+----+
  |   -1 | Log everything                  |    |
  |    0 | Log nothing (default)           |    |
  +------+---------------------------------+----+
  |    1 | Function enter/exit information |    |
  |    2 | Config information              |    |
  |    4 | Process information             |    |
  |    8 | Scheduled event information     |    |
  |   16 | Host/service check information  |    |
  |   32 | Notification information        |    |
  |   64 | Event broker information        |    |
  +------+---------------------------------+----+
  |  128 | External commands               | V4 |
  |  256 | Commands                        | V4 |
  |  512 | Scheduled downtime              | V4 |
  | 1024 | Comments                        | V4 |
  | 2048 | Macros                          | V4 |
  +------+---------------------------------+----+

Die Auswahl des Logtextumfangs erfolgt ÃŒber "debug_verbosity = 0/1/2" :

  +------+------------------------------+
  | Wert | Bedeutung                    |
  +------+------------------------------+
  |   0  | Grundlegende Infos           |
  |   1  | AusfÃŒhrliche Infos (Default) |
  |   2  | Detaillierte Infos           |
  +------+------------------------------+

32.1) Erweiterungen von Nagios 3 (26.2.2008)   (Toc)

* Performance-Verbesserung in großen Umgebungen
  + Deutlich verbesserte Hostcheck-Logik (Hostcheck und Servicecheck parallel)
    (bisher alle Service-Checks ausgesetzt bis Host-Checks durchgefÃŒhrt)
  + Zwischenspeicherung + Nutzung von Check-Ergebnissen (Cache) einstellbar

* Plugin-Ausgabe mehrzeilig und max. 8 KByte
  (bis V2 einzeilig und max. 300 Byte)

* Timeperiods flexibilisiert (bisher nur Wochentag + Zeit möglich)
  + Datumangaben (z.B. "Heilig Drei König")
  + Terminwiederholungen
  + Datumbereiche (z.B. gesetzliche Feiertage)

* Benachrichtigung bei Beginn UND Ende von Downtime-Ereignissen

* Verzögerung von Benachrichtigung einstellbar

* Vererbung (Inheritance)
  + Services erben Benachrichtigung-Einstellungen vom Host (falls fehlend)
  + Mehrfachvererbung von Templates
    + "+"...      # FÃŒgt Attributwert hinzu --> Liste
    + "null"...   # Leert Attributwert

* Erweiterte (hierarchische) Gruppierung erlaubt
  + Host    <-- Hostgroup    <-- Hostgroup    <-- ...
    Service <-- Servicegroup <-- Servicegroup <-- ...
    Contact <-- Contactgroup <-- Contactgroup <-- ...
  + Ausnahmen wegnehmen per "!..."

* VollstÀndig Ìberarbeitete und neu gestaltete Dokumentation

* Readonly-Zugriff in GUI (Kontakte dÃŒrfen keine Kommandos absetzen)
  (sowie Kontakte mit GUI-Zugang ohne Benachrichtigungen)

* Embedded Perl Interpreter (ePN = embedded Perl Nagios)
  + Besser konfigurierbar
  + Ein/Ausschalten pro Plugin

* ZusÀtzliche Optimierungsparameter

* Viele kleine, unscheinbare Dinge --> leichter, charmanter
  + Neue Makros $...$
  + Benutzerdefinierte Variablen "_XXX" (Custom Variable Makros, ab V3!)
    - Möglich in Objekt-Definition von Host, Service, Contact:
        _XXX   WERT   # OK
        __XXX  WERT   # Besser
    - Ansprechen per PrÀfix _HOST/_SERVICE/_CONTACT + Name!
        Definition in Host:    $_HOSTXXX$     bzw.  $_HOST_XXX$
        Definition in Service: $_SERVICEXXX$  bzw.  $_SERVICE_XXX$
        Definition in Contact: $_CONTACTXXX$  bzw.  $_CONTACT_XXX$
    - Vererbung auf Hostgroup, Servicegroup, Contactgroup funktioniert
    - In Command dann wirklich eingesetzt

* Neue Plugins
  + check_logfile(s)
  + ...

* Nagios user/group:   nagios + nagios
  Command user/group:  nagios + nagcmd
  GUI-Benutzer:        nagiosadmin
  Lock file:           ${prefix}/var/nagios.lock

* Event Broker

* Gleitkomma-Intervalle (bisher nur ganzzahlig)
    check_interval 2.5
    2.5 * interval_length    # 2.5 x meist 60 Sek --> 150 Sek

* Zusammenfassung von Konfig.-Parametern
       Host V2           Service V2                  V3
    check_interval  normal_check_interval  -->  check_interval
    retry_interval  normal_retry_interval  -->  retry_interval

* Einige Objekt-Attribute optional statt zwingend:
    host:    hostextinfo, alias, ...    (Default: host_name)
    service: serviceextinfo, alias, ... (Default: service_description)
             Optional (bei Bedarf vom Host geerbt):
               contact_groups, notification_interval, notification_period

* Check Plugins
    parallelize_checks fÀllt weg (immer parallel in V3)

* Verarbeitung von Performance-Daten fÃŒr Hosts
  --> PNP4Nagios, usw.

32.2) Erweiterungen von Nagios 4 (20.9.2013)   (Toc)

* Service abhÀngig von Host --> Nicht mehr geprÌft wenn Host nicht erreichbar

* Performance-Verbesserungen
  + Core Workers (Lightweight Process fÃŒr Checks)
  + Verifikation der Konfiguration (O(n) statt O(n^2))
  + Event Queue (insert in O(log n) statt O(n))
  + Makro Resolution (alph. sort. --> binÀre Suche in O(log n) statt O(n))

* Objekt-Definitionen
  + Host Attribut "address" optional (Std: host_name, meist aus DNS)
  + Service Attribut "parent" neu (statt Service Dependency verwendbar)
  + Host/Service Attribut "hourly_value" --> Contact Attribut "minium_value"

* Fehlerkorrekturen
  + Contact Inheritance
  + Timeperiods

* Query-Handler zur Kommunikation mit externen EntitÀten
  + Konfig-Variable: query_socket
  + Eingebaute Handler: core, wproc, nerd, help, echo
  + Nagios Event Radio Dispatcher (NERD)

* Bibliothek "libnagios" fÃŒr Entwickler von Core Workers + Query Handlers

* HTML/XML-Ausgabe von Plugins verarbeiten
  + Formatierung in GUI transferierbar

* Entfernt
  + Failure Prediction (was ist das?)
  + Option -o/--dont-verify-objects
  + Embedded Perl

* Veraltet (in nÀchster Version entfernt)
  + Objekte "hostextinfo" und "serviceextinfo"
  + Option -x/--dont-verify-paths
  + Konfig-Variable: check_result_reaper_frequency
  + Konfig-Variable: max_check_result_reaper_time
  + Konfig-Variable: sleep_time
  + Konfig-Variable: external_command_buffer_slots
  + Konfig-Variable: command_check_interval

* Neue GUI auf PHP-Basis (statt C)

* GUI-Themen

33) Glossar   (Toc)

  +-----------------------+---------------------------------------------------+
  | Englisch              | Deutsch                                           |
  +-----------------------+---------------------------------------------------+
  | acknowledgement       | BestÀtigung, Quittung                             |
  | alarm                 | Benachrichtigung                                  |
  | (event) broker        | (Ereignis) Vermittler, Makler                     |
  | check                 | PrÃŒfung                                           |
  | compulsive            | zwingend, obligatorisch, verpflichtend            |
  | dependency            | AbhÀngigkeit                                      |
  | dispatcher            | Verteiler, Zuteiler                               |
  | downtime              | Ausfall/Wartungszeitraum                          |
  | escalation            | Eskalation, VerstÀrkung, Steigerung               |
  | event                 | Ereignis (Status/Zustand-Wechsel!)                |
  | event handler         | Ereignisverarbeitung                              |
  | flapping              | oszillierend, schwankend, sprunghaft, wankelmÃŒtig |
  | inheritance           | Vererbung                                         |
  | nagios                | Netzwerk-Heiliger                                 |
  | notification          | Benachrichtigung, Alarmierung                     |
  | obsessive             | obligatorisch, zwingend, zwanghaft, verpflichtend |
  | outage                | Ausfall                                           |
  | parent host           | Vorgeschalteter Rechner                           |
  | query                 | Abfrage                                           |
  | range                 | Bereich                                           |
  | recheck / retry check | PrÃŒfungswiederholung                              |
  | retention             | Aufbewahrung                                      |
  | status / state        | Zustand                                           |
  | template              | Vorlage, Schablone                                |
  | threshold             | Schwellwert, Grenzwert                            |
  | workflow              | Arbeitsablauf                                     |
  +-----------------------+---------------------------------------------------+

34) Links   (Toc)

34.0) Nagios Dokumentation   (Toc)

  Nagios V3 Core Dokumentation
  Nagios V4 Core Dokumentation
  Nagios V3 Core Dokumentation
  NRPE Dokumentation
  NSCA Dokumentation
  NSCA Dokumentation
  Weitere Dokumentation
  Weitere Dokumentation
  Weitere Dokumentation

34.1) Deutsche Nagios Webseiten   (Toc)

  Monitoring-Portal (Community)
  Monitoring-Portal (Community)
  Monitoringblog (CH)
  Nagios-Portal (alter Name)
  Nagios-Portal (alter Name)
  Nagios-Wiki (Community)
  Nagios-Mailingliste

34.2) Englische Nagios Webseiten   (Toc)

  Nagios Project (Community)
  Nagios Project (neue Ideen)
  Nagios Community
  Nagios Wiki (Howtos, Best Practises, Code Snippets)
  Nagios Support Forum
  Nagios Development Blog
  Nagios Library (Tutorials, Videos, Tipps)
  Nagios Mailinglisten

34.3) Nagios BÃŒcher   (Toc)

  Nagios: System- und Netzwerk-Monitoring (Wolfgang Barth)
  Nagios: Das Praxisbuch (Gerhard Laußer)
  Praxisbuch Nagios (Tobias Scherbaum)
  The Nagios Book (Chris Burgess)
  Das Nagios/Icinga Kochbuch (Timo Kucza, Ralf Staudemeyer)

34.4) Firmen mit Nagios-Expertise   (Toc)

  Braintower
  Cimt AG
  ConSol (Plugins)
  dass IT
  Mathias Kettner (Check_MK, Livestatus, Multisite, WATO)
  Heinlein Support
  Ipidion
  ITsolution2
  it-novum (OpenITCockpit, SAP, VMWare, NetApp, AS400/iSeries)
  Nagios Enterprises
  Netways (NÃŒrnberg, Icinga)
  Oetiker+Partner
  Raxnet (Cacti)
  RealStuff (CH)
  SM-Box (SHD, Dresden)
  Teamix (NÃŒrnberg)
  Thomas-Krenn (HW, Server)
  Thomas-Krenn (OSS-SW, Plugins, TKmon)
  Thomas-Krenn (Archiv)
  Tuxad (Herford, nagios-fwb + sac-tools --> ngtx)
  Xentity

34.5) Quellen fÃŒr Nagios-Plugins   (Toc)

  MK Livestatus
  Teamix (Nag(ix)SC, LConf, Kohana2, check_sensors)
  Mathias Kettner (Check_MK)
  ConSol (Plugins + AddOns)
  check_logfiles ("check_log" verbessert)
  Monitoring Forge (Plugins + AddOns)
  Monitoring EXCHANGE (Groundwork)
  Monitoring Plugins von Netways
  Monitoring Plugins von Netways
  MY-Plugin (check_multi/check_generic/check_nagios_performance)
  NagAcond (Python Nagios Integration)
  Nagios-Plugins (nun Monitoring-Plugins)
  Nagios-Plugins (nun Monitoring-Plugins)
  Monitoring-Plugins (ehemals Nagios-Plugins)
  Nagios-Plugins Sourceforge
  Nagios-Exchange (Plugins, AddOns, Doku)
  Nagios-Forge (Plugin-Sammlung)
  PyNag (Python Nagios Extension)
  Nagios plugins help list
  OutsideIT (check_win_disk_load u.a.)

34.6) GUI/Web-Interfaces fÃŒr Nagios   (Toc)

  CoffeeSaint (Java)
  Fruity (PHP-Web-Konfig. --> Fork Lilac)
  FAN (Fully Automated Nagios)
  FAN (Fully Automated Nagios)
  IGNORAMUS (Nagios Config Generator)
  LConf (LDAP-bas. Konfig. Manag. Tool)
  Lilac Reloaded
  Lilac (Nagios Configurator)
  Monarch (Groundwork Monitor Agent, Web)
  NagiosAdmin (Nagios Administrator, deu)
  Nag2Web
  Nag2Web
  Nagat (Nagios Administration Tool)
  NagEdit + NagView (PHP-Web-Konfig.)
  Nagios Configurator
  Nagios Web Config
  NagiosQL (PHP-Web-Konfiguration)
  NagiosQL (PHP-Web-Konfiguration)
  NConf (Enterprise Nagios Configurator)
  NCPL (Nagios Control Panel)
  Ninja
  OpCfg
  OneCMDB (Configuration Management DB)
  OSSIM (Open Source Security Information Management)
  TKmon (Web GUI Nagios Administration)
  TKmon (Web GUI Nagios Administration)
  Thruk (Web-GUI fÃŒr Nagios/Icinga/Shinken mit MKLivestatus)
  Thruk (Web-GUI fÃŒr Nagios/Icinga/Shinken mit MKLivestatus)
  MK-Multisite (via MK Livestatus)
  MK-Livestatus (Nagios Event Broker Modul, NEB)
  WATO (Web Admin Tool: Icinga/Check_MK)

34.7) AddOns fÃŒr Nagios   (Toc)

  APAN (Advanced Performance AddOn for N)
  BP (Impact Analysis)
  Business Process AddOns (View+Analysis)
  Cacti (Graphing solution von raxnet)
  Cacti Users (Forum, deu)
  Cacti Users (Forum, eng)
  collectd (UNIX/Linux System Statistics Collector)
  ConSol Labs (Plugins + AddOns)
  coshsh (config, service, host, shinken)
  drraw (Web-Frontend fÃŒr rrdtool)
  DNX (Distributed Nagios eXecutor, verteiltes Monitoring)
  EventDB
  EventDB
  Gnokii
  Jolokia (JMX on Capsaicin)
  Merlin (Module for Effortless Redundancy/Loadbalancing)
  MNTOS (Multi-Nagios Tactical Overview System)
  mod_gearman (Lastverteilung)
  Monitoring Forge (Plugins + AddOns)
  MonitoringFS (alt: NagiosFS, tuxad)
  Nag(ix)SC (Alternative zu NRPE/NSCA)
  N2RRD (Nagios to RRD)
  NagEventLog (Windows Events --> Nagios NSCA)
  Nagfs (Nagios Event Broker als Filesys)
  Nagios V-Shell
  nagios2cacti (Gateway)
  Nagios Exchange
  NSCA (Nagios Service Check Acceptor)
  Send_NSCA
  NagiosGraph
  NagiosGrapher
  NagiosGrapher
  NagStaMon (Nagios Status Monitor fÃŒr Desktop)
  NagVis (Nagios visualization)
  NagVis (Nagios visualization)
  Nagwin (Nagios(Plugins) unter Windows)
  NaReTo (Nagios Reporting Tool)
  NC_Net (Windows, .NET 2.0)
  NDOUtils
  ndo2fs (NDO auf Filesystem schreiben)
  NeDi (Network Discovery)
  NETWAYSGrapherV2
  NETWAYSGrapherV2
  NETWAYS Portal
  ngtx (MonitoringFS, Tuxad)
  NoMa (Notification Manager)
  Nrpe_nt (Windows NRPE-Port)
  NSClient (Windows)
  NSClient++ (NSCP, Win)
  OPmon (Verbesserungen von OpCfg, OpCp, OpDb, OpMonAgent=Windows)
  OpMon (OpServices)
  PerfParse (perm. Speich. Perf.daten in SQL-DB)
  PNP (PNP is not PerfParse)
  PNP4Nagios (Perf.daten + RRD-DB, Perl)
  PNP4Nagios (Perf.daten + RRD-DB, Perl)
  RRDtool (Round Robin Database: MRTG-Verbesserung)
  SCMxx (Siemens S35i)
  SEC (Simple Event Correlator)
  SEC (Simple Event Correlator)
  SSC Serv (Windows System Statistics Collection Service)
  Yaps (Yet Another Paging Software, SMS-Versand)

34.8) SNMP (Simple Network Management Protocol)   (Toc)

  IANA Enterprise Numbers
  Manubulon (Nagios SNMP Plugins in Perl: check_snmp)
  Anleitung: SNMP fÃŒr Linux CentOS installieren
  MIBdepot
  Nagios SNMP-Plugins
  NagTrap (SNMP-Traps Frontend fÃŒr Nagios/Icinga)
  Net-SNMP
  Printer-MIB
  Scli (SNMP cmd line interface, CSWscli)
  Scli (SNMP cmd line interface, CSWscli)
  Scotty (grafisches SNMP-System)
  SNMP (Wikipedia)
  SNMP Basics
  SNMP (Wikipedia)
  SNMP Basics
  SNMPTT (SNMP Trap Translator)

34.9) Mobile Device Interfaces fÃŒr Nagios (iOS/Android Apps)   (Toc)

  Übersicht: Mobile Device Interfaces
  aNag (Nagios Client fÃŒr Android)
  iNag2 Nagios Viewer (Nagios Client fÃŒr iOS)
  iNag Nagios Viewer (Nagios Client fÃŒr iOS)
  SNMPmon (SNMP Client fÃŒr iOS)

34.10) Nagios Distributionen   (Toc)

  OMD (Open Monitoring Distribution)
  FAN (Fully Automated Nagios)
  FAN (Fully Automated Nagios)

34.11) Nagios-Foren/Blogs   (Toc)

  Nagios
  Steve Shipway (Nagios Utils)
  Check MK Exchange
  Velt
  Lars Michelsen (Nagios-Blog)
  Koehntopp: Ein paar Gedanken zu Zeitreihendaten
  MySQL-Connections
  Cisco-Plugins
  Handy-Check
  Netways
  Frank4dd (Plugins, Howtos, Graphs, Doc)

34.12) Nagios-basierte Alternativen ("Nagios Powered")   (Toc)

  Übersicht Nagios-Zusatzprodukte
  GroundWork Monitor (integrierte Lösung)
  GroundWork Monitor (integrierte Lösung)
  Icinga / Icinga 2 (Nagios-Fork von Netways)
  Icinga Exchange (Erweiterungen zu Icinga)
  Naemon (Nagios 4.0.1 Fork, Andreas Ericsson)
  Naemon (Nagios 4.0.1 Fork, Andreas Ericsson)
  Nagios XI (extended Interface, kommerziell)
  NetEye (Nagios basiertes IT-System, Management von WÃŒrth Phoenix)
  Op5 Monitor (integrierte Lösung)
  Op5 Monitor (integrierte Lösung)
  OpenITCockpit (integrierte Lösung)
  OpenITCockpit (integrierte Lösung)
  Opsview (Nagios + Net-SNMP + RRDtool + Catalyst Web Framework)
  Shinken (Nagios-Ersatz in Python)

34.13) Nagios-Alternativen   (Toc)

  AG-Monitor (AGTech)
  Argus (System und Netzwerk Monitoring)
  Azeti SONARPLEX
  BBWin (Windows-Client fÃŒr BigBrother/Xymon/Hobbit)
  Big Brother (1984)
  Big Brother (1984)
  Big Sister (Network Monitor)
  Centreon (Oreon, integrierte Lösung)
  Cricket (Monitoring System)
  Ganglia (Monitoring System)
  Hobbit Monitor (-> XyMon 8.11.2008)
  Hobbit Monitor (-> XyMon 8.11.2008)
  Hyperic HQ
  Hyperic HQ
  LISA (LAN Information Server, NW-Browser)
  M/Monit
  Monit
  Monitorix (Perl)
  Monitor.us (Cloud basiert, kommerziell)
  Monitis (Cloud basiert, kommerziell)
  MRTG (Multi Router Traffic Grapher)
  MRTG (Multi Router Traffic Grapher)
  Munin (Gr. Netzwerk/System-Langzeitmon)
  Network Monitoring (Tools, Resources)
  NetMRG (Netzwerk Monitor)
  Nino (Netzwerk Managagement Tool: "Nino is not Openview")
  NIST Net (WLAN-Netzwerk-Simulator fÃŒr IP-Perf.-Messung)
  OpenNMS (Network Management Software)
  OpenQRM
  OpenQRM + OpenQRM-ng
  OpenSAF (Service Availability Framewrk)
  OpenSMART (OSS System Monitoring and Reporting Tool)
  PRTG (MRTG fÃŒr Windows auf SNMP-Basis)
  RQH (Network Monitoring, Java)
  RRDtool (Logging + Graphing)
  Sensu (OSS Monitoring Framework)
  Sentinet3
  SmokePing (Netzwerk-Latenzen messen)
  Spong (System- und Netzwerk-Monitoring)
  Splunk
  Sysstat (schlanke Systemmonitor-Suite)
  Webmon (Windows)
  XyMon Demo (Bbgen-Addon von Hobbit)
  XyMon-rclient
  XyMon Extensions
  Zabbix (Netzwerk Monitoring Tool)
  Zenoss

34.14) Kommerzielle Monitoring-Produkte   (Toc)

  * CA-Monitoring (CA Wily Introscope)
  * Guard
  * HL Mon
  * HP Openview NNM/ITO / HP Service Activator (HPSA)
  * IBM Director
  * IBM Tivoli
  * InfoVista
  * OpenManage
  * ServerView
  * Siemens @active friend
  * Whatsup

34.15) Wikipedia Artikel zu Nagios   (Toc)

  + Nagios-Artikel (eng)
  + Icinga-Artikel (eng)
  + Nagios-Artikel (deu)
  + Icinga-Artikel (deu)
  + Check_MK-Artikel (deu)
  + Vergleich Netzwerk-Monitoring Systeme (eng)
  + Netzwerk-Software
  + Netzwerk-Management
  + Open Source Netzwerk-Management Software

35) Hinweise und Tipps   (Toc)

* JEDER Host ist einzeln zu definieren (Mapping auf IP)!

* JEDEM Host MUSS mindestens EIN Service zugeordnet sein
  + Service OK --> kein Host-Check
  --> Solange mindestens ein Service-Check OK liefert, leitet Nagios daraus ab,
      dass auch der Host selbst erreichbar ist und sich im Zustand OK befindet.

* Konfiguration von Objekten getrennt von Kommandos halten.

* FÃŒr Hostgroups, Servicegroups und Contactgroups gibt es 2 Definitionsarten
  + Group --> Member1,Member2,Member3  ODER  Member1 --> Group
                                       ODER  Member2 --> Group
                                       ODER  Member3 --> Group
  + TIPP: Nur EINE davon benutzen!

* Die Standard-Mails von Nagios sind zu lang fÃŒr das Verschicken als SMS
  (vorne steht uninteressanter Teil)
  --> Kommandos "notify-by-email" und "notify-by-sms" anpassen

* "/etc/hosts" fÃŒr Test mit Mapping Host-Name <-> Host-IP fÃŒllen

* Trick zum Erstellen von Nachrichten:
  --> printf "%b" interpretiert "\"-Escapes (Oktale-Form: \0 ... \0NNN)

* Mehrere Adressen zu Host erlaubt --> Plugins mÃŒssen sie korrekt behandeln
  (address 192.168.0.1,192.168.0.2 --> $HOSTADDRESS$ = 192.168.0.1,192.168.0.2)

* Status UNKNOWN (orange=3) nur fÃŒr Services,
         UNREACHABLE (grau=2) nur fÃŒr Hosts.

* Die Schnittstelle der Plugins Àndert sich nicht
  --> Nagios2-Plugin mit Nagios3,Nagios4,Icinga,Shinken,Naemon,... einsetzbar

* alias = Name fÃŒr Anzeige
  + Weglassen wenn identisch zu host_name/service_desc/..._name

* Wechsel WARNING/CRITICAL/UNKNOWN --> OK: Keine Benachrichtigung verschickt!
  Wechsel DOWN/UNREACHABLE         --> OK: Keine Benachrichtigung verschickt!

* State Retention File = Statusinfo Host+Service beim Nagios-Stop
                         fÃŒr Nagios-Start in Datei aufheben.
  + Siehe "Retention Notes" (--> objectdefinitions.html)
    retain_state_information  = 1
    state_retention_file      = /usr/local/nagios/var/retention.dat
    retention_update_interval = 60

* Neue Tricks in Nagios V3 (vererbte Attributwerte löschen/erweitern):
  + Geerbten Host/Service/... ausschließen:       !HOST
  + Geerbten Attribut-Werte löschen:              null
  + Attribut-Wert zu geerbten Werten hinzufÃŒgen:  +...
  + Custom Variable Makro:                        _MAKRO

* "Multiple inheritance" seit V3 möglich --> Vorrang von links nach rechts aufsteigend

* "Multiple parents" seit V3 möglich --> Erreichbar wenn EIN Parent erreichbar

* Host/Service Dependency hat nichts mit parents-Eintrag in Host zu tun!
  + parents (in Host)
    - Physikalische AbhÀngigkeit (Netzwerk-Topologie)
    - Spiegelt sich in automatisch erzeugter Grafik in GUI wieder!
    - Zum Vermeiden ÃŒberflÃŒssiger Host/Service-Checks ausgenutzt
  + dependency (in Host/Service Dependency-Objekt)
    - Logische AbhÀngigkeit (unabhÀngig von Netzwerk-Topologie)
      (z.B. Datenbank fÃŒr Anwendung notwendig)
    - Spiegelt sich NICHT in automatisch erzeugter Grafik in GUI wieder!
    - Zum Vermeiden ÃŒberflÃŒssiger Service-Checks ausgenutzt

* Was hat alles Namen und wo ist GROSS/kleinschreibung relevant?
  +-------------------+--------+----------+---------+
  | Objekttyp         | Intern |  Extern  | Alias   |
  +-------------------+--------+----------+---------+
  | Host              |   ja   | DNS,egal |   ja    |
  | Hostgroup         |   ja   |    --    |   ja    |
  | Service           | desc/ja|    --    |   ja    |
  | Servicegroup      |   ja   |    --    |   ja    |
  +-------------------+--------+----------+---------+
  | Contact           |   ja   |   MAIL   |  MAIL   |
  | Contactgroup      |   ja   |    --    |   ja    |
  | Command           |   ja   |    ja    |   ja    |
  | Timeperiod        |   ja   |    --    |   ja    |
  +-------------------+--------+----------+---------+
  | Hostdependency    |   --   |    --    |   --    |
  | Servicedependency |   --   |    --    |   --    |
  | Hostescalation    |   --   |    --    |   --    |
  | Serviceescalation |   --   |    --    |   --    |
  +-------------------+--------+----------+---------+
  | Hostextinfo       |   --   |    --    |   --    |
  | Serviceextinfo    |   --   |    --    |   --    |
  +-------------------+--------+----------+---------+

* Probleme beim klassischen Monitoring
  + Hosts, Services, Protokolle, Prozesse, Ports
    --> fÌr Anwender zÀhlt nur ANWENDUNG!
  + Monitoring von Prozessen und Ports prÃŒft nur die Serverseite
    und eventuell nur einen Bruchteil der ServerfunktionalitÀt
  + ProprietÀre Protokolle lassen sich schwer prÌfen
  + Auch bei Standard-Protokollen wie HTTP lÀsst sich die
    Applikationslogik nur schwer testen
  + Clientseite fehlt völlig

* Debian: Web-GUI Absetzen von Kommandos erlauben (z.B. Test-Rescheduling):
  + Siehe "/usr/share/doc/nagios3-common/Debian-README"
    Nagios 3 is not configured to look for external commands in the default
    configuration as a security feature. To enable external commands,
    you need to allow the web server write access to the nagios command pipe
      /var/lib/nagios3/rw/nagios.cmd
    Set "check_external_commands=1" in your nagios configuration,
    and then change the permissions in a way which will be maintained
    across package upgrades (otherwise dpkg will overwrite your
    permission changes). The following is the recommended approach:
    + Activate external command checks in the nagios configuration:
        check_external_commands = 1
      in file
        /etc/nagios3/nagios.cfg
    + Perform the following commands to change directory permissions and
      to make the changes permanent:
        /etc/init.d/nagios3 stop
        dpkg-statoverride --update --add nagios www-data 2750 /var/lib/nagios3/rw
        dpkg-statoverride --update --add nagios nagios    751 /var/lib/nagios3
        /etc/init.d/nagios3 start