Springe zum Hauptinhalt

Archiv

Netzwerk-Management mit Nagios

Einleitung

Netzwerk-Monitoring:
Überwachung und regelmäßige Kontrolle von Netzwerken, deren Hardware (z.B. Server, Router, Switches), Systemen und Dienste (z.B. DNS, DHCP, E-Mail)
  • rechtzeitige Information über Probleme
  • Vereinfachung der Fehlersuche
  • Erkennung von Trends

Nagios

  • Anwendung zur Überwachung von Systemen und Netzwerken (GPLv2)
  • Autor: Ethan Galstad
  • Name: "NetSaint" (1999) --> Nagios (ab 2001)
  • Plattform: UNIX-Varianten (linux, FreeBSD, ...)

topcorp.jpg
Quelle: http://www.nagios.org/userprofiles/quickstats.php

  • Überwachung von beliebigen Plattformen
  • Überwachung von Diensten -> z.B. SMTP, POP3, HTTP, DNS
  • Überwachung von Ressourcen -> z.B. CPU-Last, Platten-Nutzung
  • Darstellung System-/Netzwerkstatus (Web-Interface)
    • Ampelzustände (grün, gelb, rot)
  • Berücksichtigung von Abhängigkeiten in Netzwerktopologie
  • Benachrichtigung bei Problemen
  • aktuelle Versionen:
    • 2.11
    • 3.01

Aufbau und Funktionsweise

Modularer Aufbau:
  • Nagios-Prozess:
    • Aufruf Plugins
    • Auswertung der Plugin-Ergebnisse
    • verarbeitet angelieferte externe Daten
    • Benachrichtigung (über Plugins)
    • ergreift (optional) Maßnahmen
  • Plugins:
    • externe Programme für Service- und Host-Checks
      • Rückgabe der 4 Zustände OK, WARNING, CRITICAL, UNKNOWN
    • Grundausstattung Standard-Plugins
    • Tauschbörse: http://www.nagiosexchange.org/
    • selber schreiben

  • persistente Datenhaltung
    • Konfiguration über Textdateien (Automatisierung)
    • Speicherung Zustandsdaten in Textdateien oder Datenbank (PostgreSQL, MySQL)
    • ausführliche Logdatei (Statusmeldungen, Benachrichtigungen ...)
Tests:
  • Host-Checks:
    • Erreichbarkeit eines Hosts (ICMP)
    • unregelmässig, nur bei Bedarf

nagios1.jpg

  • Service-Checks:
    • direkte Prüfung von Netzwerkdiensten (Ports, Protokollspiel)
    • Plugins via Secure Shell auf entferntem Host ausführen
      • Abfrage lokaler Ressourcen über das Netz
      • Steuerung entfernter Plugins (CPU, Plattenplatz, Prozesse, ...) mittels SSH
      • ermöglicht beliebige Befehle auf Zielhost
    • Nagios Remote Plugin Executor (NRPE)
      • Abfrage lokaler Ressourcen über das Netz
      • Alternative zu SSH
      • ermöglicht vorkonfigurierte Kommandos
    • Überwachung via SNMP
      • Abfrage lokaler Ressourcen über das Netz
      • Simple Network Management Protocol (SNMP) stark verbreitet
    • Nagios Service Check Acceptor (NSCA)
      • passiver NSCA-Daemon wartet auf Testergebnisse
      • Hauptanwendung ist Verteiltes Monitoring -> verteilte Nagios-Server senden Ergebniss an zentralen Nagios-Server

Benachrichtigungen:

  • Konfiguration: wann soll welche Personengruppe über welche Zustände/Ereignisse informiert werden
  • frei konfigurierbare externe Programme (E-Mail, SMS, Voice ...)
  • zeitlich gesteuertes Eskalationsmanagement

Weboberfläche

  • verschiedene Sichtweisen auf Statuszustände/Probleme
  • Austausch/Anzeige von Informationen, Bearbeitungszustände zwischen mehreren Bearbeitern
  • Rückschau über vergangene Probleme, Benachrichtigungen, Verfügbarkeit

Installation

Installation von Nagios

Anlegen notwendiger Gruppen, Nutzer und Verzeichnisse
[root@tosh-psm75e-4 ~]# groupadd nagios 
[root@tosh-psm75e-4 ~]# groupadd nagcmd 
[root@tosh-psm75e-4 ~]# useradd -g nagios -G nagcmd -d /usr/local/nagios -c "Nagios Admin" nagios
[root@tosh-psm75e-4 ~]# usermod -G nagcmd apache 
[root@tosh-psm75e-4 ~]# mkdir /usr/local/nagios /etc/nagios /var/nagios
[root@tosh-psm75e-4 ~]# chown nagios.nagios /usr/local/nagios /etc/nagios /var/nagios

Sourcecode übersetzen
[root@tosh-psm75e-4 ~]# cd /usr/local/src
[root@tosh-psm75e-4 ~]# tar xvfz Pfad/zu/nagios-3.0.1.tar.gz
[root@tosh-psm75e-4 ~]# cd nagios-3.0.1
[root@tosh-psm75e-4 ~]# ./configure --sysconfdir=/etc/nagios --localstatedir=/var/nagios --with-command-group=nagcmd \ 
				--enable-embedded-perl
[root@tosh-psm75e-4 ~]# make all
[root@tosh-psm75e-4 ~]# make install
[root@tosh-psm75e-4 ~]# make install-init		# Init-Skript für Systemstart
[root@tosh-psm75e-4 ~]# make install-commandmode	# optional für Command-File-Mechanismus
[root@tosh-psm75e-4 ~]# make install-config		# erzeugt Beispielkonfigurationen
oder
RPM installieren (Nagios RPM packages for Red Hat, RHEL, CentOS and Fedora)
[root@tosh-psm75e-4 ~]# rpm -Uhv nagios-2.11-1.el5.rf.i386.rpm

Installation Plugins


[root@tosh-psm75e-4 ~]# cd /usr/local/src
[root@tosh-psm75e-4 ~]# tar xvfz Pfad/zu/nagios-plugins.1.4.11.tar.gz
[root@tosh-psm75e-4 ~]# cd nagios-plugins-1.4.11
[root@tosh-psm75e-4 ~]# ./configure --sysconfdir=/etc/nagios --localstatedir=/var/nagios
[root@tosh-psm75e-4 ~]# make
[root@tosh-psm75e-4 ~]# make install	# nach /usr/local/nagios/libexec
                                        # Plugins im contrib-Verzeichnis
                                        # bei Bedarf manuell kopieren

oder

RPM installieren (Nagios Plugins RPM packages for Red Hat, RHEL, CentOS and Fedora)
[root@tosh-psm75e-4 ~]# rpm -Uhv nagios-plugins-1.4.11.el5.rf.i386.rpm

Webinterface

  • Voraussetzung für die Nutzung des Webinterfaces ist eine funktionierende Webserver-Installation (Empfehlung: Apache)
Nagios 3.x
[root@tosh-psm75e-4 ~]# make install-webconf	# installiert nagios.conf in Apache-Konfigurationsverzeichnis 
                                                # (Konfiguration CGI-Verzeichnis und Basis-Webverzeichnis)

  • Nutzer-Authentisierung einrichten

z.B. mittels Kommando htpasswd für Nutzer schier
[root@tosh-psm75e-4]# htpasswd -c /etc/nagios/htpasswd.users schier
New password:
Re-type new password:
Adding password for user schier

[root@tosh-psm75e-4]# chown apache /etc/nagios/htpasswd.users 
[root@tosh-psm75e-4]# chmod 600 /etc/nagios/htpasswd.users
  • alternative Authentifikationsmöglichkeiten -> Apachemodule für LDAP-, PAM-, SMB-Authentifikation ...

Konfiguration

  • Konfiguration: Textdateien

Hauptkonfigurationsdatei nagios.cfg

  • globale Standard-Einstellungen nach Installation
  • verzweigt auf weitere Konfigurationsdateien
# -- /etc/nagios/nagios.cfg
...
cfg_file=/etc/nagios/objects/commands.cfg
cfg_file=/etc/nagios/objects/contactgroups.cfg
cfg_file=/etc/nagios/objects/contacts.cfg
cfg_file=/etc/nagios/objects/hostgroups.cfg
cfg_file=/etc/nagios/objects/hosts.cfg
cfg_file=/etc/nagios/objects/services.cfg
cfg_file=/etc/nagios/objects/timeperiods.cfg
...
# alle .cfg-Dateien im Verzeichnis - rekursive Auswertung
# cfg_dir=/etc/nagios/nagioskurs
...

Objekte

  • beschreiben eine Einheit: Host, Service, Kontakt und dazugehörige Gruppen, Kommandos
  • Vererbung von Eigenschaften (Templates)

 define object-type {
   parameter value
   parameter value
 }

object-type Erläuterung
host zu überwachender Netzwerkknoten
hostgroup Zusammenfassung mehrerer Hosts
service zu überwachender Dienst (immer Host-Service-Paar)
servicegroup Zusammenfassung mehrerer Services
contact Person, die bei Problemen informiert wird (Sicht auf Webfrontend)
contactgroup Benachrichtigung nur über Kontaktgruppe möglich
timeperiod Zeitfenster für Benachrichtigung der Kontaktgruppen
command externe Programme (Plugins, Benachrichtigungsprogramme ...)
servicedependency Abhängigkeiten zwischen Services
serviceescalation Eskalationsmanagement für Services
hostdependency Abhängigkeiten zwischen Hosts
hostescalation Eskalationsmanagement für Hosts

Beispielnetzwerk:

Die Konfigurationsbeispiele basieren auf diesem Beispielnetzwerk und Nagios 3.x:

nagioskurs.jpg

Zu überwachende Hosts festlegen (host)

  • Basis für alle Host- und Service-Checks
# --- /etc/nagios/nagioskurs/hosts.cfg
define host{
        host_name               c37-1b-305-1
        alias                    br-1b-305-1-1
        address                 134.109.137.81
        check_command            check-host-alive
        max_check_attempts      5
        check_period            24x7
        contact_groups          switch-admins
        notification_interval   120
        notification_period     24x7
        notification_options    d,u,r
        }

notification_options
	d	down
	u	unreachable (nicht erreichbar, weil andere Netzkomponente ausgefallen)
	r	recovery (OK-Zustand nach einem Fehler)
	f	flapping (Zustand wechselt sehr schnell)
	s	scheduled downtime (Info über Wartungszeiträume)

Templates
  • Definition von grundlegenden Objekteigenschaften (Hosts, Services)
  • anderen Objekten "mitgeben"

# --- /etc/nagios/nagioskurs/hosts.cfg
define host{
        name                    generic-host    
        register                0      
        check_command           check-host-alive
        max_check_attempts      5
        check_period            24x7
        notification_interval   120
        notification_period     24x7
        notification_options    d,u,r
        }

define host{
        host_name               c37-1b-305-1
        use               	generic-host
        alias                   br-1b-305-1-1
        address                 134.109.137.81
        contact_groups          switch-admins
        }

Hosts gruppieren (hostgroup)

  • Zusammenfassung mehrerer Hosts zu logischen Einheiten
  • gemeinsame Darstellung im Webinterface
  • Anwendung bestimmter Objekte (z.B. Services) auf ganze Hostgruppe
# --- /etc/nagios/nagioskurs/hostgroups.cfg
define hostgroup{
        hostgroup_name  switches
        alias           L2/L3-Switches
        members         c6-1-060-1,c37-1b-305-1,c29-1-060-11,c29-1b-305c-1
        hostgroup_members      hostgroup1,hostgroup2
        }
  • Platzhalter * weist alle Hosts einer Hostgroup zu
  • alternativ Eintrag in hosts.cfg möglich (hostgroup switches)

Zu überwachende Dienste festlegen (service)

  • Service = Kombination aus Host- und Service-Name (eindeutig)
  • Service-Namen können mehrmals in Kombination mit verschiedenen Hosts auftauchen
# --- /etc/nagios/nagioskurs/services.cfg
define service{
        host_name                       c37-1b-305-1
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        max_check_attempts              5
        normal_check_interval           5
        retry_check_interval            1
        check_period                    24x7
        notification_interval           120
        notification_period             24x7
        notification_options            w,u,c,r
        contact_groups                  switch-admins
        }

notification_options
	c	critical
	w	warning
	u	unknown
	r	recovery 
	f	flapping 
	s	scheduled downtime 

Nagios unterscheidet die zwei Zustandsarten Soft-State und Hard-State.

  • Fehler werden wiederholt auf "Echtheit" geprüft
  • Benachrichtigungen nur über Hard States

nagios-soft-hard.jpg

  • Serviceeintrag für mehrere Hosts oder Hostgroups möglich
  • Platzhalter * weist allen Hosts den Service zu

Services zusammenfassen (servicegroup)

# --- /etc/nagios/nagioskurs/servicegroups.cfg
define servicegroup{
        servicegroup_name  all-ping
        alias           All Pings
        members         c6-1-060-1,PING,c37-1b-305-1,PING,c29-1-060-11,PING,c29-1b-305c-1,PING,saturn,PING,lms-1-060-1,PING,testserver,PING
        servicegroup_members   servicegroup1,servicegroup2
        }
  • alternativ Eintrag in services.cfg möglich (servicegroup all-ping)

Adressaten für Fehlermeldungen festlegen (contact)

  • Kontakt = Person, an die über eine Contactgroup adressierte Nachrichten gehen
  • Sicht auf Hosts und Services im Webinterfaces
# --- /etc/nagios/nagioskurs/contacts.cfg
define contact{
        contact_name                    schier		# identisch mit Nutzernamen Webfrontend !
        alias                           Thomas Schier
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,u,r
        service_notification_commands   notify-by-email
        host_notification_commands      host-notify-by-email
        email                           schier@hrz.tu-chemnitz.de
        can_submit_commands		1 
        }

Nachrichtenempfänger (contactgroup)

  • Schnittstelle zwischen Benachrichtigungssystem und Kontakten
# --- /etc/nagios/nagioskurs/contactgroups.cfg
define contactgroup{
        contactgroup_name       switch-admins
        alias                   Etherswitch Administrators
        members                 schier
        contactgroup_members           contactgroup1,contactgroup2
        }

Kommandos (command)

  • command-Objekte definieren auszuführende Kommandos
# --- /etc/nagios/nagioskurs/commands.cfg
...
define command{
        command_name    check_ping
        command_line    $USER1$/check_icmp -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }
...

  • Verwendung von Makros
Makro Beschreibung
$USERx$ 32 User-Makros (x=1...32) definiert in resource.cfg
$ARGx$ commandline-Argumente
$MACRO$ Vielzahl vordefinierter Makros, z.B. $HOSTADDRESS$

Zeitfenster definieren (timeperiod)

  • Zeitfenster, in denen Nagios Benachrichtigungen erzeugt
# --- /etc/nagios/nagioskurs/timeperiods.cfg
define timeperiod{
        timeperiod_name 24x7
        alias           24 Hours A Day, 7 Days A Week
        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{
	...
        monday          00:00-08:00,12:00-13:00,17:00-24:00
        may 1		00:00-24:00
        2008-12-24 - 2009-01-08 / 2	00:00-24:00
	...
        }

CGI-Konfiguration

  • /etc/nagios/cgi.cfg für korrekte Funktion Webfrontend
# --- /etc/nagios/cgi.cfg
main_config_file=/etc/nagios/nagios.cfg		# Nagios-Hauptkonfigurationsdatei
physical_html_path=/usr/local/nagios/share	# Pfad zu Nagios-HTML-Dokumenten
url_html_path=/nagios				# Pfad aus Sicht des Webservers
use_authentication=1				# nur authentisierter Zugriff
refresh_rate=90					# Zeit Browser refresh
default_statusmap_layout=3			# grafische Darstellungsform (3 = Balanced Tree)
authorized_for_all_services=schier		# Sicht auf alle Services
authorized_for_all_hosts=schier			# Sicht auf alle Hosts
...

Ressourcen-Datei

  • Definition von Makros in /etc/nagios/resource.cfg
# --- /etc/nagios/ressources.cfg
$USER1$=/usr/local/nagios/libexec		# Pfad zu den Plugins

Inbetriebnahme

Überprüfen der Konfiguration
[root@tosh-psm75e-4 ~]# /usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg
Manueller Start
[root@tosh-psm75e-4 ~]# /etc/init.d/nagios start
[root@tosh-psm75e-4 ~]# /etc/init.d/nagios reload 	# Reload nach Konfigurationsänderungen
  • neues Scheduling nach Reload
    • Nagios plant, alle Tests neu durchzuführen
  • Spreading
    • Nagios verteilt die Startzeiten der Tests über einen konfigurierbaren Zeitraum (max_host_check_spread, max_service_check_spread)

Plugins

  • eigene, selbständige Programme
  • Standard-Plugins http://www.nagios.org/download/ (Official Nagios Plugins)
  • Tauschbörse http://www.nagiosexchange.org/
  • definierte Nagios-Schnittstellen -> Rückgabewerte:
    Status Bezeichnung Beschreibung
    0 OK alles i.O.
    1 WARNING Warnschwelle überschritten
    2 CRITICAL Kritische Schwelle überschritten oder Abbruch nach Timeout
    3 UNKNOWN Fehler innerhalb des Plugins
  • Administrator definiert Schwellen
  • Textausgabe (human readable), ab Nagios 3.0 mehrzeilig bis 8 KByte lang
    • Empfehlung: einzeilig (Darstellung im Web)
    • ART_DES_CHECKS STATUS - Infotext | evtl. Performancedaten
           z.B. Ausgabe des Plugin check_icmp
                  OK - c37-1b-305-1: rta 1.473ms, lost 0%|rta=1.473ms;100.000;200.000;0; pl=0%;20;40;;
  • Hilfe mittels Option --help (keine Manuals)

Plugins für Netzwerkdienste

  • Prüfung von Diensten auf Basis netzwerkfähiger Prokolle
  • generische Plugins (check_tcp, check_udp) testen nur auf offene Ports
    • TCP-Ports prüfen (check_tcp)
    • UDP-Ports prüfen (check_udp)
  • spezifische Plugins testen, ob sich der Dienst auch wie erwartet verhält
    • z.B. Greeting-Anwort eines Mailservers
		220 mailbox.hrz.tu-chemnitz.de ESMTP
    • Erreichbarkeitstest (check_ping, check_icmp)
    • Mailserver überwachen (check_smtp, check_pop, check_imap)
    • FTP-Server überwachen (check_ftp)
    • Web-Server überwachen (check_http, check_squid)
    • DNS-Server überwachen (check_dns, check_dig)
    • DHCP-Server überwachen (check_dhcp)
    • Datenbanken überwachen (check_mysql, check_oracle, check_pgsql)
    • ...

Wie werden Plugins verwendet ?

Kommandozeilen-Aufruf des Plugin check_icmp
[schier@tosh-psm75e-4 plugins]$ ./check_icmp -H c37-1b-305-1 -w 100.0,20% -c 200.0,40%
OK - c37-1b-305-1: rta 2.081ms, lost 0%|rta=2.081ms;100.000;200.000;0; pl=0%;20;40;;

Kommando-Definition in commands.cfg
define command{
        command_name    check_ping
        command_line    $USER1$/check_icmp -H $HOSTADDRESS$  -w $ARG1$ -c $ARG2$
        }

Service-Definition in services.cfg
define service{
        host_name                       c37-1b-305-1
        service_description             PING
        check_command                   check_ping!100.0,20%!200.0,40%
        ...
        }

Plugins für lokale Tests

  • Test von lokalen Ressourcen
    • Auslastung Festplattenkapazität (check_disk)
    • Auslastung Swap (check_swap)
    • Systemlast (check_load)
    • Prozesse überwachen (check_procs)
    • Logfile kontrollieren (check_log)
    • ...

Kommandozeilen-Aufruf des Plugin check_load
[schier@tosh-psm75e-4 plugins]$ ./check_load  -w 10.0,8.0,5.0 -c 15.0,10.0,8.0
OK - load average: 0.13, 0.14, 0.17|load1=0.130;10.000;15.000;0; load5=0.140;8.000;10.000;0; load15=0.170;5.000;8.000;0;

  • lokale Tests auf entfernten Hosts erfordern Hilfsmittel:
    • Start der Plugins über SSH, NRPE

Plugins via SSH ausführen

  • sinnvoll bei entfernten UNIX-Systemen
  • Installation der Plugins für lokale Tests auf entferntem Rechner
  • Nagios-Account auf entferntem Rechner
  • Erzeugen SSH-Schlüsselpaar und Ablegen Public Key im entfernten Nagios-Home-Verzeichnis

[nagios@tosh-psm75e-4]$ ssh-keygen -b 2048 -f id_dsa -t dsa -N '' 
  • check_by_ssh auf Nagios-Server

Kommandozeilen-Aufruf des Plugin check_by_ssh
[nagios@tosh-psm75e-4 plugins]$ ./check_by_ssh -H testserver -i /usr/local/nagios/.ssh/id_dsa -C "/usr/local/nagios/libexec/check_load -w 10.0,8.0,5.0 -c 15.0,10.0,8.0"
OK - load average: 0.06, 0.07, 0.02|load1=0.060;10.000;15.000;0; load5=0.070;8.000;10.000;0; load15=0.020;5.000;8.000;0;

Kommando-Definition in commands.cfg
define command{
        command_name    check_ssh_load
        command_line    $USER1$/check_by_ssh -H $HOSTADDRESS$ -i /usr/local/nagios/.ssh/id_dsa -C "$USER1$/check_load -w $ARG1$ -c $ARG2$"
        }

Service-Definition in services.cfg
define service{
        host_name                       testserver
        service_description             Load
        check_command                   check_ssh_load!10.0,8.0,5.0!15.0,10.0,8.0
        ...
        }

NRPE

  • Nagios Remote Plugin Executor führt Programme auf entferntem Host aus
    • Plugins für lokale Tests
    • Plugins für Netzwerkdienste (z.B. zum Test nicht direkt erreichbarer Rechner)
  • kein entferntes Nutzerkonto notwendig
  • nur explizit konfigurierte Tests möglich

Voraussetzungen

NRPE-Config auf entferntem Windows-Server in nrpe.cfg
...
command[check_cpuload] ="C:\Program Files\Nagios\nrpe_plugins\nrpe_nt plugins\bin\cpuload_nrpe_nt.exe" 50 80
...

Kommandozeilen-Aufruf des Plugin check_nrpe
[nagios@tosh-psm75e-4 plugins]$ ./check_nrpe -H lms-1-060-1  -c check_cpuload
NOW: Mean:10.631579% Variance: 20.493510% CUMULATIVE: Mean:10.631579% Variance: 20.493510%

Kommando-Definition in commands.cfg
define command{
        command_name    check_nrpe
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }

Service-Definition in services.cfg
define service{
        host_name                       lms-1-060-1
        service_description             CPU-Last
        check_command                   check_nrpe!check_cpuload
        ...
        }

SNMP-Plugins

  • SNMP auf "allen" netzwerkfähigen Geräten verfügbar (Switches, Router, USV, Messfühler, Linux, Windows ...)
  • Voraussetzung -> SNMP-Daemon konfigurieren
  • generisches SNMP-Plugin check_snmp
Abfrage der durchschnittlichen CPU-Last über MIB-Variablen cisco.local.lsystem.avgBusy5
[nagios@tosh-psm75e-4 plugins]$ ./check_snmp -H c29-1b-305c-1 -C [communitystring] -o 1.3.6.1.4.1.9.2.1.58.0 -w 50 -c 90
SNMP OK - 5 | iso.3.6.1.4.1.9.2.1.58.0=5
Abfrage der CPU-Last und RAM-Auslastung
[root@tosh-psm75e-4 plugins]$ ./check_snmp_cisco_loadavg -H c29-1b-305c-1 -C [communitystring] -w 50 -c 90
Status is OK - CPU load average (5 min): 7 %

[root@tosh-psm75e-4 plugins]# ./check_snmp_cisco_memutil -H c29-1b-305c-1 -C [communitystring] -w 80 -c 90
Status is OK - MEMORY: total: 3.88 MB, used: 2.78 MB (72%), free: 1.10 MB

Zusatzinformationen über Host/Services

  • erzeugt zusätzliche Infos (Weboberfläche)

# /etc/nagios/nagioskurs/hosts.cfg
define host{
        host_name               c37-1b-305-1
        notes                   Access-L2-Switch in 1B/305
        notes_url               https://tucoma.hrz.tu-chemnitz.de/tucoma/index.php?VIEW=KOMPONENTE&KP_NR=468449
        action_url               https://c37-1b-305-1.hrz.tu-chemnitz.de/
        icon_image              my_lanswitch.jpg
        statusmap_image         my_lanswitch.jpg
}
	notes_url - verweist auf (HTML)-Datei mit Zusatzinfos (Wartungsverträge, Hotline-Nummern, Systemkonfiguration usw. ) extinfo.gif

	action_url - Link auf auszuführende Aktion (CGI) oder Webseite action.gif

Benachrichtigungssystem

Ob ein Benachrichtigungssystem für die Praxis taugt, entscheidet sich letztlich daran, wie gut es sich an den eigenen Bedarf anpassen lässt.

Wer soll wann wie informiert werden ?

nagios-notif.jpg

  • Wartungszeiten werden über die Weboberfläche konfiguriert (Schedule downtime for this host/service)
  • außerhalb der notification_period werden evtl. Nachrichten unterdrückt (nicht verworfen !), und zu Beginn des Benachrichtigungszeitraumes einmal an den Kontakt versendet (Rescheduling)
  • einer Person können mehrere Kontakte zugeordnet werden
    • z.B. Dienst - Mail und Außerdienst - SMS
  • Formatierung der Mail mit Hilfe der Nagios-Standard-Makros
  • Eskalations-Management -> mehrstufiger Support
    • Basis Anzahl der Benachrichtigungen

Abhängigkeiten

Services von Hosts

  • Ziel Service-Überwachung
  • Service abhängig von mehreren Faktoren (Host, Netzkomponenten)
  • Administrator möchte über die eigentliche Ausfallursache eines Dienstes informiert werden
  • Host-Parameter parents ermöglicht einfache Informationen über Netzwerktopologie
# --- /etc/nagios/nagioskurs/hosts.cfg
define host{
        host_name               c37-1b-305-1
	...
	parents			c6-1-060-1
        }
  • Strukturierung ist Ansichtsache
    • Segmentgrenze sind Switches oder Router
  • Ausgangspunkt Service-Check (wenn OK, keine Host-Checks)

Was geschieht bei einem Service-Ausfall ?

nagios-nettopo.jpg

  1. Dienst HTTP nicht mehr erreichbar
  2. Host-Check von testserver -> nicht erreichbar
  3. Host-Check von c29-1b-305c-1 -> nicht erreichbar
  4. Host-Check von c37-1b-305-1 -> erreichbar

  • Auswirkung auf Host-Zustände (UP, DOWN, UNREACHABLE)
  • topologisch bedingte Störungen in Web-Oberfläche unter Network Outages

Nagios unterstützt alternativ zum Parent-Mechanismus auch Host Dependencies über das Objekt hostdependency. Auf letzteres sollte aus Performancegründen verzichtet werden.

Services von Services (servicedependency)

  • bei Ausfall eines Services werden Fehlermeldungen von abhängigen Services unterdrückt
  • Beispiel: Fällt der Plugin Executor (NRPE) aus, schlagen auch alle darüber laufenden lokalen Plugin-Tests fehl

Konfigurationsbeispiel:

Test, ob NRPE-Service ok
[schier@tosh-psm75e-4 plugins]$ ./check_nrpe -H lms-1-060-1
NRPE_NT v0.8b/2.0

# /etc/nagios/nagioskurs/command.cfg
define command{
        command_name    test_nrpe
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$
        }

# /etc/nagios/nagioskurs/services.cfg
define service{
        host_name                       lms-1-060-1
        service_description             NRPE
        check_command                   test_nrpe
	...
        }

# /etc/nagios/nagioskurs/servicedependencies.cfg
define servicedependency{
        host_name               lms-1-060-1	# Master-Host
        service_description     NRPE		# Master-Service
        dependent_host_name     lms-1-060-1
        dependent_service_description   Load
        notification_failure_criteria   c,u	# wenn Masterservice critical, 
						# unknown, keine "Load"-Meldung
        execution_failure_criteria      n	# dennoch Tests von Load
}

Eventhandler

  • Aufruf beliebiger Programme bei Zustandswechsel OK -> Fehlerzustand eines Hosts/Services
    • z.B. Neustart Dienste
# /etc/nagios/nagioskurs/command.cfg
define command{
        command_name    restart-httpd
        command_line    $USER1$/eventhandler/restart-httpd.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$
        }
# /etc/nagios/nagioskurs/services.cfg
define service{
        host_name               testserver
        service_description     HTTP		
        ...
        event_handler	restart-httpd
        ...
}

Passive Tests

  • Nagios verarbeitet passiv asynchrone Nachrichten
    • verteiltes Monitoring mittels NSCA (Nagios Service Check Acceptor)
      • send_ncsa -> NCSA-Daemon
    • SNMP-Traps
  • über External Command File (Schnittstelle für externe Kommandos)
    • Named Pipe (FIFO)
Named Pipe (FIFO) unter /var/log/nagios/rw
prw-rw----  1 nagios nagcmd 0 16. Mai 10:42 nagios.cmd|
  • Form des Kommandos
	[zeitstempel] kommando;argumente

z.B.
	[zeitstempel] PROCESS_SERVICE_CHECK_RESULT;hostname;service;returnwert;plugin-output

Performance-Daten

  • grafische Darstellung von Meßwerten über die Zeit mittels externer Programme
  • 2 Performancedatenklassen
    • Nagios-interne Performancedaten
    • Performancedaten, die das Plugin mit dem Testresultat übergibt
      • Schreiben in Datei oder direkte Übergabe an externes Programm
  • vordefiniertes Format:
	name=wert;warn;krit;min;max
[schier@tosh-psm75e-4 ~]$ /usr/local/nagios/libexec/check_icmp -H c29-1b-305c-1
OK - c29-1b-305c-1: rta 3.084ms, lost 0%|rta=3.084ms;200.000;500.000;0; pl=0%;40;80;;

Template-Mechanismus

  • Daten werden über ein Schablone (Template) in einer Datei abgelegt
  • Service-Performance-Daten regelmäßig (im Gegensatz zu Host-Performance-Daten)

# /etc/nagios/nagios.cfg
process_performance_data=1
service_perfdata_file=/var/nagios/service-perfdata.dat
service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=0
service_perfdata_file_processing_command=process-service-perfdata-file

/var/nagios/service-perfdata.dat
-----
...
[SERVICEPERFDATA]       1210682172      c6-1-060-1      PING    0.010   0.072   OK - 134.109.254.1: rta 0,843ms, lost 0%        rta=0,843ms;100,000;500,000;0; pl=0%;20;60;;
...

Verarbeitung durch externe Kommandos

  • direkter Kommando-Aufruf nach jedem Testergebnis
  • Performance !

# /etc/nagios/nagios.cfg
process_performance_data=1
service_perfdata_command=process-service-perfdata

Grafische Darstellung graph.png

# Nagiosgraph-Kommandodefinition in /etc/nagios/nagioskurs/commands.cfg
define command{
          command_name process-service-perfdata
          command_line /usr/bin/perl /usr/local/nagios/nagiosgraph/insert.pl  "$LASTSERVICECHECK$||$HOSTNAME$||$SERVICEDESC$||$SERVICEOUTPUT$||$SERVICEPERFDATA$"
        }

Bei anspruchsvollen Anforderungen an Performancemanagement empfielt sich der parallele Einsatz von Tools wie MRTG, cricket oder cacti.

Addons / Alternative Weboberflächen

  • Nuvola-Style basierend auf Javascript
  • NDOUtils (Nagios Data Objects Utilities)
    • Werkzeuge schreiben alle Daten (Konfiguration, Ereignisse, Check-Ergebnisse) in eine Datenbank
  • NagVis visualisiert Host- und Servicezustände in einer vom Anwender vorgegebenen Grafik

Literatur und Verweise

Bücher

Wolfgang Barth
Nagios, System- und Netzwerk-Monitoring
2., aktualisierte und erweiterte Auflage
ISBN 978-3937514468
Open Source Press, 2008

Links

http://www.nagios.org/ - Nagios-Portal

http://www.nagiosexchange.org/ - Tauschbörse Nagios-Plugins/Tools

http://www.nagios-wiki.de/ - deutsche Wiki-Seite

http://www.nagios-portal.de/ - deutsches Nagios-Forum

http://www.nagios.org/support/mailinglists.php - Nagios Mailinglisten

http://www.netways.de/de/produkte/nagios/ - Nagios-Demosystem u.a.