Probleme erkennen, bevor sie entstehen

Servermonitoring mit Nagios: Build und Konfiguration in Ubuntu
Kommentare

Um die Verfügbarkeit komplexer IT-Infrastrukturen zu gewährleisten, müssen diese automatisiert überwacht werden. Hierfür gibt es diverse Monitoringsoftware auf dem Markt, eine davon ist Nagios. Nagios vereint eine Sammlung von Modulen, die zur Überwachung, beispielsweise von Netzwerken, Hosts und Diensten, genutzt werden kann. Nagios selbst ist als Software frei verfügbar und steht unter der GNU GPL. Es steht als fertige Binary für diverse Linux-Distributionen zur Verfügung, ebenso besteht die Möglichkeit, den Quellcode von der Website zu beziehen und die Binary selbst zu kompilieren.

Das geschilderte Vorgehen möchte ich im folgenden Artikel demonstrieren und eine Anleitung geben, wie Nagios kompiliert und für den ersten Betrieb konfiguriert werden kann. Bevor ich damit startete, gibt es einen kleinen Exkurs zum Aufbau von Nagios, zu den Grundbegriffen und zum Verwendungszweck.

Nagios zeichnet sich dadurch aus, dass es auf einer objektorientierten Konfiguration aufbaut, die sich wie folgt unterteilt:

  1. Hosts
  2. Services
  3. Kommandos
  4. Kontakte

Hosts werden üblicherweise über eine IP-Adresse definiert und angesprochen. Hierbei kann es sich um einen physischen Server, aber auch um einen anderen beliebigen Endpoint handeln, der Services bereitstellt, die es zu überwachen gilt. Services können Dienste oder Eigenschaften sein, die für den Betrieb der IT-Infrastruktur von Bedeutung sind. Das heißt, ein Ausfall oder eine Unregelmäßigkeit dieser Services muss zeitnah signalisiert werden. Oft überwachte Dienste sind z. B. HTTP-Server, Mail- oder Datenbankserver. Nicht nur Dienste können überwacht werden, häufig empfiehlt es sich auch, z. B. den freien Speicherplatz eines Hosts zu überwachen. So können Fehler verhindert werden, die auftreten können, wenn kein Speicherplatz mehr zur Verfügung steht, weil beispielsweise eine Datenbank erhaltene Daten dauerhaft persistieren muss. Die Kommandoobjekte führen die eigentliche Überwachung der Services in definierten Zeitabständen durch und melden, wenn eine nicht erwartete Reaktion der Services auftritt. Gemeldet werden diese Unregelmäßigkeiten oder Ausfälle an Kontaktobjekte. Das können E-Mails sein, SMS oder ein anderer Kommunikationskanal.

Softwarekomponenten

Im Anschluss an diese Einführung werde ich aufzeigen, wie ein Nagios-Server aufzusetzen ist. Hierfür benötigt man ein Linux-Derivat, in unserem Fall Ubuntu, den GCC-Compiler und abhängige Komponenten. Zur Auslieferung und Steuerung des Nagios-Servers verwende ich einen Apache-HTTP-Server inklusive PHP-Modul. Mit diesen Komponenten ist der Nagios Core lauffähig, kann allerdings noch keine Hosts oder Services überwachen. Die eigentliche Überwachungsfunktionalität ist in Modulen, den Nagios-Plug-ins ausgelagert. Diese Plug-ins führen die eigentlichen Überwachungsanfragen aus, z. B. HTTP-Abfragen, um die Erreichbarkeit einer Website zu überwachen.

Überwachungsmethoden

Nagios bietet dank der Plug-ins mehrere Möglichkeiten der Überwachung an, u. a. Überwachung auf Protokollebene, Überwachung interner Eigenschaften und passive Überwachung. Die Überwachungen auf Protokollebene ermöglichen es, unterschiedlichste Netzwerkgeräte zu überwachen, unabhängig davon, welches Betriebssystem sich auf ihnen befindet. Die Überwachung interner Eigenschaften, die nicht an eine Netzwerkschnittstelle propagiert werden, gestalten sich je nach (Betriebs-)System unterschiedlich schwierig. Abhilfe schaffen hier Dienste wie das Simple Network Management Protocol (SNMP), die interne Eigenschaften zur Überwachung nach außen propagieren.

Überwachungsmodule, Alarmlogik und Meldewege

Die Nagios-Plug-ins melden nach ihrer Beendigung – also der Abfrage eines Dienstes oder eines Hosts – den ermittelten Status als Portable Operating System Interface (POSIX) konform an den Nagios Core.

  • ok, Wert 0: Das Objekt ist in Ordnung
  • warning, Wert 1: Es gab eine Warnmeldung
  • critical, Wert 2: Kritischer Fehler
  • unknown, Wert 3: Der Status kann nicht ermittelt werden

Bei vielen Plug-ins können Grenzwerte konfiguriert werden, ab wann der Wert 1 (warning) und ab wann der Wert 2 (critical) zurückgeliefert werden soll. So kann z. B. für das HTTP-Plug-in festgelegt werden, dass der Wert 0 bis zu einer Antwortzeit von 0,5 Sekunden, der Wert 1 zwischen 0,5 und einer Sekunde und ab Antwortzeiten größer als eine Sekunde der Wert 2 zurückgegeben wird. Auf diese Weise kann besser eingeschätzt werden, inwieweit ein Fehlerzustand kritisch oder nur eine Ausnahme ist. Steigt im eben genannten Beispiel die Antwortzeit kontinuierlich an, ist eher davon auszugehen, dass ein Problem vorliegt, als wenn es schlagartig und einmalig passiert. Um solche Zustände korrekt zu bewerten, bedarf es einer weiteren Einstellung, die von Nagios als states bezeichnet wird. Liefert ein Plug-in statt 0 eine 2 zurück, setzt Nagios einen soft state und zählt einen Counter hoch. Die Standardkonfiguration von Nagios sieht vor, dass nach zwei weiteren Überprüfungen und zurückgelieferter 2 dieser soft state in einen hard state umgesetzt wird. Das bedeutet, dass Nagios jetzt Alarm schlägt und das Fehlverhalten meldet. Das kann, wie auch im obigen Beispiel, wichtig sein, um Fehlalarme von echten Alarmen zu unterscheiden. Nagios benachrichtigt nach dem Übergang in einen hard state jene Kontaktpersonen, die hierfür konfiguriert wurden. Wird eine Störung nicht behoben, kann Nagios dahingehend konfiguriert werden, weitere Kontaktpersonen in definierten Zeitabständen zu benachrichtigen.

Server aufsetzen

Die kurze Einführung von Nagios soll Ihnen helfen, einen kurzen Überblick über die Funktionalität von Nagios zu erlangen. In den nächsten Abschnitten werden wir einen Ubuntu-Server aufsetzen, der als hier als Basis für den Nagios-Server dient. Weiter werden Nagios und die Nagios-Plug-ins aus den Sourcen kompiliert und für den ersten Betrieb konfiguriert. Es ist grundsätzlich nicht nötig, Nagios selbst zu kompilieren. Für Ubuntu stehen fertige Pakete zur Verfügung. Ich möchte mit diesem Weg verdeutlichen, wie einfach eine Kompilierung möglich ist, zumal Nagios über diesen Ansatz meiner Erfahrung nach performanter und stabiler ist.

Ubuntu 14.04. LTS

Ubuntu ist eine von zahlreichen Linux-Distributionen, die auf Debian basieren. Seit dem Jahr 2004, in dem Ubuntu das erste Mal erschienen ist, konnte es seine Bekanntheit stetig steigern. Das rührt unter anderem daher, dass die Entwickler von Ubuntu großen Wert darauf gelegt haben, dass ihre Linux-Distribution einfach zu installieren und zu bedienen ist. Auch wurde darauf geachtet, dass die eingesetzten Softwarebestandteile – die Linux-Pakete – gut aufeinander abgestimmt sind, was die Situation für Ein- und Umsteiger erleichtert. Ubuntu wird zweimal pro Jahr herausgegeben, einmal im April (Version 04) und einmal im Oktober (Version 10). Gepaart mit der jeweiligen Jahreszahl ergeben sich hieraus die Versionen 14.04. und 14.10 für das Jahr 2014. Für das Enterprise-Umfeld werden so genannte Long-Term-Support-(LTS-)Versionen angeboten, die sich dadurch auszeichnen, dass ein Support über fünf Jahre angeboten wird. Daher empfiehlt es sich ‑ gerade für Serverumgebungen ‑ auf LTS-Versionen zurückzugreifen, in unserem Beispiel die Ubuntu 14.04. LTS Server Edition (die nächste LTS-Version wird Ubuntu 16.04 sein).

Ubuntu-Basissystem

Wir beginnen damit, das ISO-Image von der Ubuntu-Website herunterzuladen. Das ISO Image können Sie entweder auf einen Datenträger brennen oder Tools benutzen, die z. B. einen bootfähigen USB-Stick erstellen. Die Installation des Grundsystems gestaltet sich Ubuntu-typisch sehr unproblematisch. Aus eigener Erfahrung empfehle ich, die vorzuinstallierenden Softwarepakete auf den Open-Secure-Shell-(SSH-)Server zu beschränken. Das hat den Vorteil, dass Sie im weiteren Verlauf mehr Einfluss auf die zu installierenden Softwarepakete haben und Ihr Basissystem nicht unnötig überfrachten.

Nach der Installation des Basissystems geht es nun darum, alle nötigen Pakete zu installieren, die für den Betrieb von Nagios und des Builds nötig sind. Wir beginnen damit, das Basissystem auf den aktuellen Stand zu bringen und alle nötigen Updates und Patches zu installieren.

Listing 1: Update des Basissystems
aptitude update
// Die Paketverwaltung von Ubuntu aktualisieren
aptitude full-upgrade
// Pakete updaten

Nagios kompilieren

Das Basissystem ist nun auf einem aktuellen Stand, was uns die Möglichkeit eröffnet, die ersten Pakete zu installieren, die für Nagios und dessen Kompilierung benötigt werden. Befolgen Sie hierzu die Befehle in Listing 2, durch die unter anderem der Apache-Webserver und PHP installiert werden. Neben dem Webserver werden auch Compiler und Bibliotheken installiert. Sie werden für die Services benötigt, für deren Überwachung Nagios später eingesetzt werden soll.

Listing 2: Benötigte Pakete für Nagios
// Linux-Paketmanager
aptitude install \
// wget installieren, wget dient zum Herunterladen der Nagios-Sourcen
wget \
// GCC etc.
build-essential \
// Apache-Webserver installieren, wird für den späteren Betrieb von Nagios benötigt
apache2 \
// Bibliotheken für den Apache-Webserver
apache2-utils \
// PHP-Grafikbibliothek
php5-gd \
// Grafikbibliothek
libgd2-xpm-dev \
// Einbindung von PHP in den Apache-Webserver
libapache2-mod-php5 \
// Mailserver zum Versenden der Nagios-Benachrichtigungen
bsd-mailx \
// SNMP zur Überwachung, wird von Nagios für spezielle Kommandos benötigt
snmp \
// SSL-Bibliothek , wird für die Nagios-Plug-ins benötigt, zur Unterstützung der SSL-Funktionalität von Nagios
libssl-dev \
// MySQL-Bibliothek, wird für die Nagios-Plug-ins benötigt, zur Unterstützung der MySQL-Überwachung von Nagios
libmysqld-dev

Apache und PHP sind hiermit korrekt installiert. Um zu überprüfen, ob der Apache-Webserver korrekt läuft, rufen Sie in Ihrem Webbrowser die IP-Adresse des Nagios-Servers auf. Ist alles korrekt installiert, wird hier die Testseite des Apache-Servers angezeigt. Ebenso wurden alle Voraussetzungen geschaffen, die es uns nun ermöglichen, den Nagios-Server aufzusetzen.

User anlegen

Bevor wir Nagios betreiben können, ist es noch nötig, die hierfür benötigten Nutzer in Linux anzulegen. Befolgen Sie hierzu Listing 3.

Listing 3: User anlegen
useradd --system --home /usr/local/nagios -M nagios
groupadd --system nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd www-data

Nagios downloaden und entpacken

Im nächsten Schritt laden wir die Nagios-Source in der aktuellen Version herunter (Listing 4), hier die 4.0.8. für den Nagios-Server und die 2.0.3. für die Nagios-Plug-ins. Gern können Sie auf der Nagios-Website schauen, welches die aktuell verfügbare Version ist.

Listing 4: Nagios-Download
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.8.tar.gz
wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz

Nach dem Download müssen die Sourcen entpackt werden das gelingt wie in Listing 5 dargestellt.

Listing 5: Nagios-Sourcen entpacken
tar -xzvf nagios-4.0.8.tar.gz
tar -xzvf nagios-plugins-2.0.3.tar.gz

Nagios Core kompilieren

Nachdem die Sourcen für den Nagios Core und die Nagios-Plug-ins korrekt geladen und entpackt wurden, beginnen wir damit, den Nagios Core zu kompilieren. Im ersten Schritt konfigurieren wir hierfür die make-Umgebung (Listing 6) und teilen dieser die vorher getroffenen Einstellungen mit.

Listing 6: Nagios konfigurieren
// starten der Konfiguration
./configure \
// Linux-User-Group, die von Nagios genutzt werden soll, siehe Listing 3
--with-nagios-group=nagios \
// Linux-User-Group, die von Nagios-Command genutzt werden soll, siehe Listing 3
--with-command-group=nagcmd \
// Pfad zur Mailinstanz, über welche Nagios Mails versenden wird
--with-mail=/usr/bin/mail \
// Pfad zur Apache-Konfiguration, hier wird später die Nagios-Konfiguration abgelegt
--with-httpd_conf=/etc/apache2/conf-available

Alle relevanten Einstellungen, die der Nagios Core benötigt, sind nun konfiguriert. Die jetzt folgende Kompilierung (Listing 7) der Sourcen zu Binary-Dateien kann je nach Systemumgebung einige Minuten in Anspruch nehmen. Im Anschluss an diese Kompilierung benutzen wir die make-Umgebung, um den Nagios Core entsprechend zu installieren.

Listing 7: Nagios kompilieren
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf

Changes, die das make-Script nicht abdeckt, müssen nun noch manuell ausgeführt werden, siehe Listing 8.

Listing 8: Manuelle Anpassungen
// Nagios Event Handler kopieren
cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/
// Rechte für den Event Handler setzen
chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers
// Start-Script für Nagios Core setzen, damit Nagios beim Serverstart ausgeführt wird
ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios

Nagios Plug-ins kompilieren

Wie bereits erwähnt, ist der Nagios Core für sich genommen blind und kann keine Überwachung durchführen. Hierfür werden die Nagios-Plug-ins benötigt, die wir nun kompilieren wollen. Auch hierbei konfigurieren wir analog zum Nagios Core die Plug-ins entsprechend, siehe Listing 9.

Listing 9: Nagios-Plug-ins konfigurieren
// Starten der Konfiguration
./configure \
// Linux-User, der von den Nagios-Plug-ins genutzt werden soll, siehe Listing 3
--with-nagios-user=nagios \
// Linux-User-Group, die von den Nagios-Plug-ins genutzt werden soll, siehe Listing 3
--with-nagios-group=nagios \
# Aktivierung der Perl-Module
--enable-perl-modules \
# Open SSL aktivieren
--with-openssl \
# MySQL-Plug-in kompilieren
--with-mysql \
# Aktivierung zusätzlicher Parameter
--enable-extra-opts

Grundsätzlich unterscheidet sich die Konfiguration nicht von jener für den Nagios Core. Zwei Stolperfallen sind enthalten, Zeilen 5 und 6 in Listing 9. Diese beiden Optionen haben nur dann eine Auswirkung, wenn die entsprechenden Dev-Bibliotheken vorher auch installiert wurden. Ähnlich verhält es sich mit anderen Plug-ins, die externe Bibliotheken benötigen. Die von uns benötigten Bibliotheken wurden in Listing 2 mittels der letzten beiden Zeilen installiert. Nun genügt es, Listing 10 auszuführen, um die Plug-ins zu kompilieren und zu installieren.

Listing 10: Nagios kompilieren
make
make install

Apache Konfiguration

Der Nagios Core und die Nagios-Plug-ins sind nun korrekt installiert und lauffähig. Zum Abschluss muss noch der Apache-Server konfiguriert werden, um Zugriff auf das Nagios-Frontend zu bekommen. Mit Listing 11, Zeile 1 aktivieren wir den Apache-Mod-CGI, und mit Zeile 2 schützen wir den Nagios-Server vor unberechtigten Zugriffen mittels htaccess (als Nutzer nagiosadmin mit dem Passwort, das Sie in der entsprechenden Abfrage eingeben).

Listing 11: Apache-Grundeinstellung
a2enmod cgi
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Ende
Listing 12: Apache-Konfiguration anpassen
nano /etc/apache2/sites-enabled/000-default.conf
oder
vi /etc/apache2/sites-enabled/000-default.conf

Zu guter Letzt öffnen wir mit einem beliebigen Editor, z. B. nano oder vi (Listing 12) die Datei 000-default.conf vom Apache und fügen vor dem VirtualHost-Block eine Include-Anweisung ein, Include conf-available/nagios.conf. Danach die Datei abspeichern und schließen, im Anschluss den Apache-Server neu starten, service apache2 restart, um die anpasste Konfiguration einzubinden.

Erster Aufruf

Der Nagios Core ist kompiliert und installiert, ebenso die Nagios-Plug-ins und das Frontend, das durch den Apache-HTTP-Server ausgeliefert wird. Zu erreichen ist unsere Nagios-Instanz via http://localhost/nagios. Es folgt eine User- und Passwortabfrage, die mit den Daten aus Listing 12 authentifiziert werden kann. Nach dem Aufruf des Frontends und einem Klick auf Services erscheint die in Abbildung 1 gezeigte Ansicht. Bis jetzt ist der Nagios-Server so konfiguriert, dass er die lokale Instanz überwacht, also sich selbst.

Abb. 1: „localhost“-Übersicht (Anklicken zum Vergrößern)

Abb. 1: „localhost“-Übersicht (Anklicken zum Vergrößern)

localhost

Um die Konfiguration für den localhost einzusehen, wechseln wir in das Verzeichnis /usr/local/nagios/etc/objects/ und öffnen dort die Datei localhost.cfg.

In dieser Datei sind sowohl der Host als auch sämtliche Tests für diesen Host definiert, siehe Listings 13 und 14. Diese Listings definieren einen Host, hier localhost, und einen Service, hier PING, der diesen überwacht.

Listing 13: „localhost“-Hostkonfiguration
define host{
  use                     linux-server
  host_name               localhost
  alias                   localhost
  address                 127.0.0.1
}
Listing 14: „localhost“-Servicekonfiguration
define service{
  use                             local-service
  host_name                       localhost
  service_description             PING
  check_command                   check_ping!100.0,20%!500.0,60%
}

Entwickler Magazin

Den localhost zu überwachen ist für den Anfang ein angenehmer Funktionstest. Um einen anderen Server als den eigenen zu überwachen, modifizieren wir die Listings und speichern sie in einer neuen Datei, hier entwickler.cfg ab. Den Listings 15 und 16 können Sie die Modifikationen entnehmen. Jetzt wird ein Server vom Entwickler Magazin via PING überwacht. Bevor Nagios neu gestartet werden kann, muss noch die Datei /usr/local/nagios/etc/nagios.cfg um folgende Zeile erweitert werden: cfg_file=/usr/local/nagios/etc/objects/entwickler.cfg

Mit dieser Zeile wird Nagios angewiesen, die neue Konfigurationsdatei zu laden. Nach dem Restart mittels service nagios restart wird die neue Datei eingelesen und die Website von entwickler.de entsprechend überwacht.

Listing 15: „entwickler“-Hostkonfiguration
define host{
  use                     linux-server
  host_name               entwickler
  alias                   Entwickler Magazin
  address                 37.44.4.203
}
Listing 16: „entwickler“-Servicekonfiguration
define service{
  use                             generic-service
  host_name                       entwickler
  service_description             PING
  check_command                   check_ping!100.0,20%!500.0,60%
}

Fazit

Der Artikel hat dargelegt, dass eine Überwachung von Netzwerken und deren Komponenten mittels Nagios zuverlässig bewerkstelligt werden kann. Hierfür eignet sich ein eigenständiger Server oder ein Serververbund. Zu empfehlen ist, diesen Server außerhalb der bestehenden Infrastruktur zu positionieren, um einen Ausfall sicher zu bemerken. Liegt der Nagios-Server in der Infrastruktur, die es zu überwachen gilt, besteht die Möglichkeit, dass Nagios selbst bei einem Ausfall betroffen ist und nicht mehr reagieren oder den Ausfall propagieren kann.

Glossar

Long Term Support
Eine gesonderte Form der technischen Unterstützung in der Softwareindustrie ist der Long Term Support. Er bezeichnet hierbei – herstellerabhängig – eine über das übliche Maß hinausgehende Versorgung einer Software mit Aktualisierungen und Bugfixes, die in der Regel der Behebung von sicherheitskritischen Programmfehlern dienen. Das bedeutet meist auch, dass selbst beim Erscheinen eines neueren Versionszweigs die LTS-Versionen weiter gepflegt und angeboten werden, selbst parallel zu weiteren LTS-Versionen.

Portable Operating System Interface
POSIX steht für Portable Operating System Interface. Es wurde gemeinsam von dem Institute of Electrical and Electronics Engineers (IEEE) und der Open Group für Unix entwickelt und bildet ein standardisiertes Application Programming Interface ab, das als Schnittstelle zwischen Betriebssystem und Anwendungssoftware eingesetzt werden kann.

Secure Shell
Zur Anwendung kommt die Secure Shell, die sowohl ein Netzwerkprotokoll als auch ein entsprechendes Programm bezeichnet, wenn man eine verschlüsselte Verbindung mit einem entfernten System aufbauen möchte. Der häufigste Anwendungsfall ist es, wenn man lokal eine entfernte Kommandozeile zur Verfügung gestellt bekommt, um z. B. Server in einem entfernten Rechenzentrum fernzuwarten.

Simple Network Management Protocol
Simple Network Management Protocol (SNMP) ist ein Netzwerkprotokoll. Es wurde von der Internet Engineering Task Force (IETF) entwickelt, um Netzwerkkomponenten wie Router, Server, Switches etc. zentral überwachen und steuern zu können. Mittels SNMP wird die Kommunikation zwischen den überwachten Geräten und den Überwachungsstationen geregelt. Dabei werden der Aufbau der Datenpakete und der Kommunikationsablauf geregelt.

Entwickler Magazin

Entwickler Magazin abonnierenDieser Artikel ist im Entwickler Magazin erschienen.

Natürlich können Sie das Entwickler Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Aufmacherbild: data center via Shutterstock.com / Urheberrecht: White78

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -