Seite wählen

NETWAYS Blog

Icinga Director auf Ubuntu 20.04 / 22.04 installieren

Du willst Icinga lieber grafisch als über die API und das Terminal konfigurieren? Der Icinga Director als grafische Konfigurationsmöglichkeit für Icinga bietet genau da. Was vor Jahren als ein unabhängiges Modul für die Open Source Monitoring Lösung Icinga (auch bekannt als Icinga 2) entwickelt wurde, ist heute ein vollwertiger Teil des Icinga Stacks.

Unser Icinga Director Installationsguide hilft dir dabei, den Icinga Director auf Ubuntu 20.04 / 22.04 zu installieren. Wenn du zunächst noch einen Guide zu Installation von Icinga oder Icinga Web benötigst haben wir die passenden Gudie für dich!

Voraussetzungen für die Icinga Director Installation

  • Icinga Open Source Monitoring mit folgenden Komponenten:
    • Icinga Core
    • Icinga Web
    • Icinga DB
    • Icinga DB Web
  • Internetzugang
  • Zugang zu Icinga Web
  • Installations- und Administrationsrechte für den Icinga Config Master

Du kannst hinter alle diese Punkte einen Haken setzen? Dann legen wir los!

Anmerkung: Alle nachfolgende Schritte werden als root-User durchgeführt. Überprüfe, ob du den richtigen Benutzer verwendest!

Schritt 1: Icinga Repository zu Ubuntu hinzufügen

Um das Icinga Repository zu einem Ubuntu-System hinzuzufügen, nutzt du folgende Befehle:

apt update 
apt -y install apt-transport-https wget gnupg 
wget -O - https://packages.icinga.com/icinga.key | gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
. /etc/os-release; if [ ! -z ${UBUNTU_CODENAME+x} ]; then DIST="${UBUNTU_CODENAME}"; else DIST="$(lsb_release -c| awk '{print $2}')"; fi; \
 echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-${DIST} main" > \
 /etc/apt/sources.list.d/${DIST}-icinga.list  
echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-${DIST} main" >> \
 /etc/apt/sources.list.d/${DIST}-icinga.list

apt update

 

Schritt 2: Icinga Director installieren

Icinga Director auf Ubuntu installieren

Nachdem das Repository zum System hinzugefügt ist, kann der Icinga Director mit einem einfachen Befehl installiert werden:

apt install icinga-director

 

Schritt 3: Icinga Director Datenbank aufsetzen

Hinweis: In deiner eigenen Umgebung muss SICHERES_PASSWORT mit einem richtigen Passwort deiner Wahl ausgetauscht werden.

Damit das neue Icinga Modul seine Daten schreiben und speichern kann, ist eine eigens dafür eingerichtete Datenbank notwendig. Das geschieht mit:

MySQL/MariaDB

mysql -e "CREATE DATABASE director CHARACTER SET 'utf8'; 
CREATE USER director@localhost IDENTIFIED BY 'SICHERES_PASSWORT'; 
GRANT ALL ON director.* TO director@localhost;"

PostgreSQL

psql -q -c "CREATE DATABASE director WITH ENCODING 'UTF8';" 
psql director -q -c "CREATE USER director WITH PASSWORD 'SICHERES_PASSWORT'; 
GRANT ALL PRIVILEGES ON DATABASE director TO director; 
CREATE EXTENSION pgcrypto;"

Damit sind alle Schritte im Terminal abgeschlossen. Die nächsten Schritte finden in Icinga Web statt.

Schritt 4: Icinga Director konfigurieren

Damit der Icinga Director in Icinga Web 2 auch funktioniert wie gewünscht, müssen weitere Konfigurationsschritte innerhalb der Icinga 2 Weboberfläche vorgenommen werden.

Anlegen einer neuen Icinga Datenbank Ressource

Im unteren Bereich des linken Icinga Web Menüs befindet sich ein Zahnrad. Gehe mit der Maus darüber, um das „Hauptmenü“ von Icinga Web anzeigen zu lassen. Hier folgst du diesen Menüpunkten, um zu den Datenbankressourcen zu gelangen:

Configuration –> Application –> Resources

Mit einem Klick auf Create a New Ressource kommst du zu einer Eingabemaske. Hier trägst du die in Schritt 3 angelegten Zugangsdaten für die Icinga Director Datenbank ein und validierst die Konfiguration.

Screenshot der Icinga Web Umgebung des Monitoring Systems Icinga. Zu sehen ist das Anlegen einer neuen Datenbankressource zur Nutzung des Icinga Moduls "Icinga Director" inklusive der erfolgreichen Validierung

Icinga Director Kickstart Wizard

Um den Icinga Director für den ersten Einsatz zu konfigurieren, gibt es den Icinga Director Kickstart Wizard. Zum Ausführen klickst du zunächst auf den nun vorhandenen Menüpunkt Icinga Director. Beim ersten Öffnen des Menüs muss noch die gerade eben angelegte Datenbankressource ausgewählt werden, damit der Director seine Daten auch in die gewünschte Datenbank schreibt.

Screenshot der Icinga Web Umgebung des Monitoring Systems Icinga. Zu sehen ist das Auswählen einer neuen Datenbankressource zur Nutzung des Icinga Moduls "Icinga Director"

Mit einem Klick auf Create Schema wird das Datenbankschema übertragen und der Kickstart Wizard gestartet.

Screenshot der Icinga Web Umgebung des Monitoring Systems Icinga. Zu sehen ist der Kickstart Wizard des Icinga Moduls "Icinga Director" der dafür sorgt, dass das Modul automatisiert in das bestehende System integriert wird

An dieser Stelle müssen drei Felder ausgefüllt werden, bevor der Prozess weitergehen kann:

  • Endpoint Name
  • API User
  • (API) Password

Wenn du dich jetzt fragst, was genau der Icinga Endpoint ist, dieser wurde in Schritt 5 des Icinga Installationsguide für Ubuntu im Rahmen des Icinga Node Wizard angelegt. Es handelt sich dabei um den Objektnamen deines Icinga Master.
Er kann jederzeit unter /etc/icinga2/zones.conf nachgelesen werden. Wenn du deinen Icinga API User und das dazugehörige Passwort noch einmal nachschlagen willst, kannst du das unter /etc/icinga2/conf.d/api-users.conf.

Hast du alle erforderlichen Felder ausgefüllt und den Import gestartet, dauert es einen kurzen Moment. Sobald der Prozess erfolgreich abgeschlossen ist, solltest du im Icinga Director Menü neben Activity log eine dreistellige Zahl, ähnlich dem hier gezeigten Bild, sehen:

Screenshot der Icinga Web Umgebung des Monitoring Systems Icinga. Zu sehen ist der Kickstart Wizard des Icinga Moduls "Icinga Director" im Status der erfolgreich durchgeführten Integration

Diese Zahl zeigt die Anzahl der getätigten Änderungen an, die über den Director durchgeführt wurden, jetzt aber noch auf dein Icinga Monitoring ausgerollt werden müssen. Diesen letzten Schritt führst du aus, indem du auf Activity log klickst und im oberen Bereich des neuen Menüs auf Deploy XXXX pending changes klickst.

Screenshot der Icinga Web Umgebung des Monitoring Systems Icinga. Zu sehen ist die Ansicht der durchzuführenden Deployments

Damit hast du den Icinga Director auf Ubuntu erfolgreich installiert und damit den letzten Teil des Icinga Stack aufgesetzt und konfiguriert.

Wie geht es jetzt weiter?

Egal ob du unsere Guides zur Icinga Installation seit der Anleitung für Ubuntu genutzt hast oder nur für den Guide zur Icinga Director Installation hier gelandet bist: Herzlichen Glückwunsch zum erfolgreichen Abschluss dieses Guides!

Mit dem Icinga Director besitzt du nun ein mächtiges grafisches Konfigurationstool für Icinga, dass dir die tägliche Arbeit sicher erleichtern kann. Zusammen mit IcingaIcinga WebIcinga DB und Icinga DB Web steht dir nun der volle Icinga Stack zur Verfügung.
An dieser Stelle bleibt mir nur noch übrig dir viel Spaß mit deinem Open Source Monitoring System Icinga zu wünschen.

Sollten bei dir zukünftig weitere Fragen zu Icinga auftauchen, stehen dir meine NETWAYS Kolleg:innen aus dem Consulting-Team jederzeit mit all ihrem Wissen und ihrer Erfahrung zur Seite. Egal ob du deine Monitoringumgebung weiterentwickeln, optimieren oder vergrößern willst, sie finden mit dir zusammen die passende Lösung.
Egal welches Anliegen du zu Icinga hast, ich bin mir sicher, dass du mit ein paar Klicks auf unserer Kontaktseite die passenden Antworten von echten Icinga Expert:innen bekommst.

Icinga Web und Icinga DB Web auf Ubuntu 20.04 / 22.04 installieren

Damit du Daten, die dein Icinga Monitoring (auch bekannt als Icinga 2) sammelt, grafisch darstellen und daraus Erkenntnisse gewinnen kannst, ist eine grafische Oberfläche für viele User nicht wegzudenken.
Icinga Web ist das Frontend des Icinga Stack und die optimale Lösung, wenn es darum geht, die Abläufe und Checks deines Open Source Monitoring zu visualisieren.
Dieser Guide hilft dir bei der Installation und Konfiguration von Icinga Web und Icinga DB Web auf Ubuntu 20.04 / 22.04.

Wenn du bereits unseren Guide zur Installation und Konfiguration von Icinga und Icinga DB durchgeführt hast, kannst du direkt loslegen. Wenn du noch kein Icinga installiert hast, dann solltest du jetzt zu unserem Icinga Installationsguide wechseln und anschließend hier weiterlesen.

Voraussetzungen für die Icinga Web und Icinga DB Web-Installation

Damit dieser Guide erfolgreich umgesetzt werden kann, gibt es einige wichtige Voraussetzungen:

  • Ein bereits vorhandenes Icinga bestehend aus:
    • Ubuntu 20.04 / 22.04 Server mit mindestens 2 GB RAM und 20 GB freiem Speicherplatz
    • IcingaIcinga DBIcingaDB-Redis und MySQL/MariaDB/PostgreSQL
  • sudo – Benutzer ist auf dem Server eingerichtet und du hast das Recht ihn zu nutzen
  • Die aktuellste PHP-Version
  • Eine Internetverbindung auf den Server
  • Ein Webserver (Apache, Nginx, etc.) ist auf dem Server installiert

Du kannst hinter alle diese Punkte einen Haken setzen? Dann legen wir los!

Anmerkung: Alle nachfolgende Schritte werden als root-User durchgeführt. Überprüfe, ob du den richtigen Benutzer verwendest!

Schritt 1: Icinga Repository hinzufügen

Dieser Schritt sollte bereits bei der Installation von Icinga 2 ausgeführt worden sein und muss grundsätzlich nicht wiederholt werden. Falls diese Installation jedoch eine Weile her ist oder du auf „Nummer sicher“ gehen willst, sind hier die Befehle, mit denen du das offizielle Icinga-Repository zu deinem System hinzufügst:

apt update 
apt -y install apt-transport-https
wget gnupg wget -O - https://packages.icinga.com/icinga.key | gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
. /etc/os-release; if [ ! -z ${UBUNTU_CODENAME+x} ]; then DIST="${UBUNTU_CODENAME}"; else DIST="$(lsb_release -c| awk '{print $2}')"; fi; \
 echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-${DIST} main" > \
 /etc/apt/sources.list.d/${DIST}-icinga.list  
echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-${DIST} main" >> \
 /etc/apt/sources.list.d/${DIST}-icinga.list
apt update

Schritt 2: Icinga Web und Icinga DB Web auf Ubuntu 20.04 / 22.04 installieren

Bevor es mit der Konfiguration von Icinga Web losgeht, wird das icingadb-web Paket installiert. Dieser Schritt ist nötig, damit im späteren Verlauf der Icinga Web Installationsanleitung das Modul direkt aktiviert und konfiguriert werden kann. Zu Installation nutzt du:

apt-get install -y icingadb-web

Der Vorteil dieses Befehls ist, dass dabei NICHT NUR das angesprochene Modul installiert wird!
Zusätzlich installiert dieser Befehl direkt alle noch nicht vorhandenen Abhängigkeiten direkt mit. Namentlich sind das unter anderem Icinga Web, icingacli und libapache2-mod-php.

Dieser kleine Befehl ist somit das Multifunktionstool der Installation. Weiter geht es mit der Konfiguration und Webinstallation von Icinga Web 2.

Schritt 3: Icinga Web konfigurieren und installieren

Um einen besseren Überblick und Verständnis für die einzelnen Punkte zu schaffen, wird dieser Schritt in einzelne Teilschritte unterteilt.


Schritt 3.1: Konfigurationsdatei für den Webserver anlegen

Ob du den folgenden Befehl ausführen musst, ist von der Wahl deines Webservers abhängig.
Hast du dich für Apache entschieden, ist eine Konfigurationsdatei für die Nutzung von Icinga Web bereits installiert. Nutzt du Nginx, musst du eine Konfigurationsdatei erstellen und sie im Konfigurationsverzeichnis von Nginx speichern.

icingacli setup config webserver nginx --document-root /usr/share/icingaweb2/public

Schritt 3.3: Authentifizierungs-Token erstellen

Damit du Icinga Web mit dem Icinga Web Setup Wizard schnell und einfach installieren und konfigurieren kannst, benötigst du ein Token zu Authentifizierung. Dieses erstellst du ganz einfach mit folgendem icingacli-Befehl:

icingacli setup token create

Für den Fall, dass das Token zu einem späteren Zeitpunkt erneut aufgerufen werden muss, gibt es diesen Befehl:

icingacli setup token show

Schritt 3.3: Icinga Web Datenbank anlegen

Ein weiterer wichtiger Schritt ist das Anlegen einer Icinga Web Datenbank und eines Icinga Web Datenbank-Nutzers.
Diese beiden Befehle kann Icinga Web aufgrund von Sicherheitseinschränkungen des lokalen Systems nicht automatisiert durchführen. In diesem Guide nutze ich MariaDB als Datenbank. Andere Datenbanken wie etwa PostgreSQL sind ebenfalls möglich. Die Anleitung hierfür findest du in den Icinga Docs.

mysql -u root -p 
CREATE DATABASE icingaweb2;
CREATE USER 'icingaweb2'@'localhost' IDENTIFIED BY 'USE_A_SECURE_PASSWORD_HERE';
GRANT ALL ON icingaweb2.* TO icingaweb2@localhost;

Damit sind alle Vorbereitungen abgeschlossen und die eigentliche Einrichtung von Icinga Web kann beginnen.

Schritt 4: Icinga Web im Browser einrichten

Um das Icinga Web 2 Setup zu starten du die IP-Adresse deiner Icinga-Instanz im Browser auf und hängst /icingaweb2/setup hinten an.

Icinga Token einfügen

Auf der ersten Seite trägst du das in Schritt 3.2 erzeugt Token ein und beginnst damit das Setup:

Screenshot des Icinga Web Setups, bei dem die Eingabemaske für das Icinga Token zu sehen ist

Hier fügst du das in Schritt 3.2 erzeugt Token ein und klickst auf Next.

Icinga Web Module auswählen

Auf dieser Seite wählst du aus den fünf vorgeschlagenen Modulen die aus, die du nutzen willst. Standardmäßig ist bereits das Icingadb Modul ausgewählt, was beibehalten werden muss!

WICHTIG: Da wir eine aktuelle Installation von Icinga 2 und Icinga Web 2 durchführen, kommt Icinga DB anstelle der bisher verwendeten IDO zum Einsatz. Von daher kann auf das Modul Monitoring verzichtet werden!

Ansicht der Icinga Web Setup Oberfläche zur Einrichtung von Icinga Web Modulen (dunkelblauer Hintergrund, hellblauer Header). In der aktuellen Ansicht ist das Modul IcingaDB zur EInrichtung ausgewählt.

Icinga Web PHP Module überprüfen

Du erhältst eine Übersicht über alle benötigten und vorhandenen Bauteile, die Icinga Web benötigt. Hier kannst du überprüfen, ob alle kritischen Abhängigkeiten vorhanden sind.

Ansicht der Icinga Web Setup Oberflächemit einer Übersicht der aktiven PHP Module (dunkelblauer Hintergrund, hellblauer Header). In der aktuellen Ansicht sind ausser ein optionales Modul alle PHP Module aktiv

Authentifizierungsmethode wählen

Um eine Zugangsauthentifizierung zu Icinga Web 2 durchzuführen, stehen dir drei verschiedene Möglichkeiten zur Verfügung:
DatabaseLDAP oder External.

Hier kannst du die von dir oder deinem Unternehmen präferierte Authentifizierungsmethode nutzen. Die Eingabe der nötigen Daten erfolgt in einem späteren Schritt.
In diesem Guide beziehen wir uns auf die Authentifizierung über die Datenbank.

Ansicht der Icinga Web Setup Oberflächezur Auswahl der Authentifizierungsmethode (dunkelblauer Hintergrund, hellblauer Header). In der aktuellen Ansicht wird die Datenbank zur Authentifizierung genutzt

Datenbank-Authentifizierung

Im Formular zur Datenbank-Authentifizierung trägst du alle wichtigen Informationen ein.

Ansicht der Icinga Web Setup Oberfläche mit einem Formular zur Eingabe der Datenbank Zugangsdaten (dunkelblauer Hintergrund, hellblauer Header). In der aktuellen Ansicht ist das leere Formular zu sehen

Daten, welche in die einzelnen Felder eingetragen werden müssen (oder können, wenn sie nicht explizit gefordert sind):

  • Ressource Name: Name deiner Datenbank-Ressource. Kann den Default Namen behalten
  • Database Type: Je nachdem, ob du MySQL/MariaDB oder PostgreSQL verwendest, wählst du hier den entsprechenden Typen aus
  • Host:Auf welchem Host liegt deine Datenbank? In dem meisten Fällen kannst du hier den Default localhost beibehalten
  • Port: Hast du einen speziellen Port für deine Datenbank freigegeben? Dann musst du diesen hier eintragen
  • Database Name: Namen der Datenbank ein, die du in Schritt 3.3 für Icinga Web angelegt hast
  • Username: Username aus Schritt 3.3
  • Password: Passwort für den User aus Schritt 3.3
  • Character Set: Du nutzt ein bestimmtes Character Set? Hier optional angeben
  • Use SSL: Nutzt du Verschlüsselung und SSL-Zertifikate? Aktiviere den Button und gib deine Daten ein

 

Hast du deine Daten eingegeben, drückst du Validate Configuration. War alles richtig, erhältst du diese Ansicht:

Ansicht der Icinga Web Setup Oberfläche mit einem Formular zur Eingabe der Datenbank Zugangsdaten (dunkelblauer Hintergrund, hellblauer Header). In der aktuellen Ansicht ist das ausgefüllte Formular inklusive erfolgreicher Validierung zu sehen

Icinga Web Backend Authentifizierung

Wähle nun einen Namen für dein Icinga Web Authentifizierungsbackend aus.

Ansicht der Icinga Web Setup Oberfläche zur Auswahl er Backend Authentifizierung (dunkelblauer Hintergrund, hellblauer Header).

Icinga Web Admin User anlegen

Es wird Zeit, den ersten Icinga Web Admin anzulegen. Gib ihm einen Benutzernamen und ein sicheres Passwort!

Ansicht der Icinga Web Setup Oberfläche zum Anlegen eines administrativen Benutzers (dunkelblauer Hintergrund, hellblauer Header).

Icinga Web Anwendungs- und Loggingeinstellungen

Auf dieser Seite hast du die Möglichkeit, ein paar individuelle Konfigurationen an der Anwendung so wie dem Loggingverhalten von Icinga Web 2 vorzunehmen. Für diesen Guide werden die Standardeinstellungen beibehalten.

Ansicht der Icinga Web Setup Oberfläche zur Auswahl der individuellen Logging-Einstellungen für die Monitoring-Umgebung (dunkelblauer Hintergrund, hellblauer Header).

Übersicht der bisherigen Icinga Web Konfiguration

Zum Abschluss der Konfiguration erhältst du eine Übersichtsseite, auf der du noch einmal alle von dir gewählten Einstellungen überprüfen kannst. Wenn du zufrieden bist und keinen Fehler erkennst, drücke auf Finish und schließe die Icinga Web 2 Konfiguration ab.

Ansicht der Icinga Web Setup Oberfläche mit allen bisher getätigen Einstellungen zur Übersicht am Ende des aktuellen Einrichtungsschrittes (dunkelblauer Hintergrund, hellblauer Header).

Icinga DB Web konfigurieren

Nach der Übersicht startet als letzter Schritt der Installation und Konfiguration von Icinga Web die Konfiguration von Icinga DB Web.

Ansicht der Icinga Web Setup Oberfläche mit dem Beginn der IcingaDB Konfiguration (dunkelblauer Hintergrund, hellblauer Header).

Folge dem Wizard auf die nächste Seite. Hier musst du die Datenbank Daten von Icinga DB eingeben, die während der Konfiguration der entsprechenden Datenbank in der Anleitung zur Installation und Konfiguration von Icinga und Icinga DB erstellt wurden.

Ansicht der Icinga Web Setup Oberfläche mit einem Formular zur Eingabe der IcingaDB Datenbank Zugangsdaten (dunkelblauer Hintergrund, hellblauer Header).

Wurden alle Felder richtig ausgefüllt und die Konfiguration validiert, erscheint eine Erfolgsmeldung.

Ansicht der Icinga Web Setup Oberfläche mit ausgefülltem Formular der IcingaDB Datenbank Zugangsdaten und erfolgreicher Validierung dieser Daten (dunkelblauer Hintergrund, hellblauer Header).

Nachdem die Verbindung zur Datenbank erfolgreich eingerichtet wurde, muss nun noch die Verbindung zu Icinga DB Redis hergestellt werden.

Ansicht der Icinga Web Setup Oberfläche mit einem Formular zur Eingabe der IcingaDB-Redis Datenbank Zugangsdaten (dunkelblauer Hintergrund, hellblauer Header).

Wie bei der Datenbank werden hier die Zugangsdaten eingeben und die Konfiguration validiert.
(Da während der Einrichtung von Redis auf ein Passwort verzichtet wurde, kann das Feld hier ebenfalls freigelassen werden)

Ansicht der Icinga Web Setup Oberfläche mit ausgefülltem Formular der IcingaDB-Redis Datenbank Zugangsdaten und erfolgreicher Validierung dieser Daten (dunkelblauer Hintergrund, hellblauer Header).

Icinga API mit Icinga Web verbinden

Der letzte Schritt vor dem erfolgreichen Abschluss der Konfiguration von Icinga Web ist das Herstellen der Verbindung von Icinga Web zur Icinga 2 API.
Der standardmäßige API-Nutzer root. Dieser und das dazugehörige Passwort wurden im Guide zur Installation und Konfiguration von Icinga und Icinga DB erstellt.

Das Passwort kann jederzeit unter /etc/icinga2/conf.d/api-users.conf nachgeschlagen werden.

Ansicht der Icinga Web Setup Oberfläche mit ausgefülltem Formular zur mit der Icinga API und erfolgreicher Validierung dieser Daten (dunkelblauer Hintergrund, hellblauer Header).

Die Konfiguration endet mit einer Übersichtsseite, auf der alle eingegebenen Daten noch einmal überprüft werden können.

Ansicht der Icinga Web Setup Oberfläche mit allen bisher getätigten Einstellungen für IcingaDB zur Übersicht am Ende des aktuellen Einrichtungsschrittes (dunkelblauer Hintergrund, hellblauer Header).

Waren alle hier beschriebenen Schritt erfolgreich, strahlt dir ein grünes Congratultaions! Icinga Web 2 has been successfully set up entgegen.

Nun steht deinem ersten Icinga Web Login nichts mehr im Weg.

Schritt 5: Der erste Icinga Web Login

Mit den Zugangsdaten, die du im Laufe des Icinga Web 2 Wizards angelegt hast, kannst du nun deinen ersten Login vornehmen.

Ansicht des Icinga Web Dashboards nach erfolgtem Login. Zu sehen sind alle Menüpunkte sowie einige Monitoringbeispiele

Damit neue Nutzer:innen einen ersten Eindruck davon erhalten, wie die gesammelten Daten vom Systemmonitoring oder Netzwerkmonitoring dargestellt werden, kommt Icinga mit einer Beispielkonfiguration. Diese kann gelöscht werden, sobald man selbst damit beginnt, Icinga mit seinen eigenen Daten und Templates zu füllen.

Wie gehts es nun weiter?

Herzlichen Glückwunsch, du hast erfolgreich Icinga, Icinga DB und Icinga Web installiert und konfiguriert! Damit steht deiner aktiven Nutzung der Open Source Monitoring Lösung nichts mehr im Weg.
Du kannst direkt loslegen und über die Icinga 2 API Objekte anlegen, Actions triggern oder Templates bauen. Welche API-Calls dafür zur Verfügung stehen, erfährst du ausführlich in den Icinga Docs.

Die Verwaltung und Nutzung von Icinga über die API ist eine häufig genutzt und valide Option. Eine weitere Möglichkeit, diese Einstellungen vorzunehmen, ist der Icinga Director. Dieser gibt Nutzer:innen die Möglichkeit, den Icinga Stack grafisch innerhalb von Icinga Web zu konfigurieren.
Wenn du dich dafür interessierst, wie der Icinga 2 Director installiert und konfiguriert wird und wie du ihn einsetzen kannst, lege ich dir unseren Guide Icinga Director auf Ubuntu installieren ans Herz.

Icinga mit IcingaDB auf Ubuntu 20.04 / 22.04 installieren

Wer nach einer Open Source Monitoring Lösung zur System- und Netzwerküberwachung sucht, kommt an Icinga (auch als Icinga 2 bekannt) nicht vorbei. Es hilft dir dabei Verfügbarkeit, Leistung und Trends der gesamten IT-Infrastruktur zu überwachen. Dank individualisierbarer Benachrichtigungseinstellungen kommen die Informationen immer genau an der gewünschten Stelle an.

Mit diesem Guide wollen wir dir dabei helfen, einen leichten Einstieg ins Icinga Monitoring zu finden und Icinga, Icinga DB und Redis erfolgreich installierst.
In diesem Guide spielt die IDO keine Rolle mehr, da diese von Icinga DB als Datenbackend abgelöst wurde. Die neue Komponente sorgt für eine bessere Performance und Skalierbarkeit von Icinga.

Voraussetzungen für die Icinga und Icinga DB Installation

Damit dieser Guide erfolgreich umgesetzt werden kann, gibt es einige wichtige Voraussetzungen:

  • Einen Ubuntu 20.04 / 22.04 Server mit mindestens 2 GB RAM und 20 GB freiem Speicherplatz
  • Der sudo – Benutzer ist auf dem Server eingerichtet und du hast das Recht, ihn zu nutzen
  • Zugriff auf eine SQL-Datenbank (in diesem Guide wird MariaDB verwendet)
  • Die aktuellste PHP-Version ist auf dem Server installiert
  • Eine Internetverbindung auf den Server
  • Optional: Ein Webserver (Apache, Nginx, etc.) ist auf dem Server installiert (als Teil des LAMP-Stack)

Du kannst hinter alle diese Punkte einen Haken setzen? Dann legen wir los!

Anmerkung: Alle nachfolgende Schritte werden als root-User durchgeführt. Überprüfe, ob du den richtigen Benutzer verwendest!

Schritt 1: Icinga Repository hinzufügen

Um die aktuelle Version von Icinga zu installieren, wird das offizielle Icinga-Repository zu unserem System hinzugefügt. Dazu führst du in deinem Terminal die folgenden Befehle aus:

apt update 
apt -y install apt-transport-https wget gnupg 
wget -O - https://packages.icinga.com/icinga.key | gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
. /etc/os-release; if [ ! -z ${UBUNTU_CODENAME+x} ]; then DIST="${UBUNTU_CODENAME}"; else DIST="$(lsb_release -c| awk '{print $2}')"; fi; \
 echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-${DIST} main" > \
 /etc/apt/sources.list.d/${DIST}-icinga.list  
echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-${DIST} main" >> \
 /etc/apt/sources.list.d/${DIST}-icinga.list
apt update

Sobald dieser Befehlsblock erfolgreich durchgelaufen ist, siehst du in deinem Terminal, dass die neuen Repos nun in deiner Liste zu finden sind. Es sollte in etwa so aussehen:

Screenshot eines Ubuntu Terminals, bei dem eine Auflistung aller dem System hinzugefügten Repositories zu sehen ist. Der Screenshot soll verdeutlichen wie es aussieht, wenn die offiziellen Icinga Repositores zum System hinzugefügt wurden

Schritt 2: Icinga-Paket auf Ubuntu 20.04 oder Ubuntu 22.04 installieren

Da du nun Zugriff auf das Icinga-Repository hast, kannst du direkt damit weiter machen und das Icinga Paket installieren. Dafür nutzt du:

apt install -y icinga2

Dieses Paket ist die Basis der gesamten Icinga 2 Monitoring Installation. Um zu überprüfen, ob die Installation erfolgreich war, nutzt du

icinga2 daemon -C

Mithilfe dieses Befehls kannst zukünftige Konfigurationsanpassungen mit einem Terminalbefehl überprüfen.

Screenshot eines Ubuntu Terminals, bei dem das Kommando icinga2 daemon -C inklusive seiner Ausgabe zu sehen ist. Der Screenshot soll verdeutlichen wie die Ausgabe dieses Befehls im Terminal visualisiert wird

Schritt 3: Aktivieren der Icinga API und Installieren der Monitoring Plugins

Ein Monitoringsystem ist nur so gut wie die Daten, die es sammelt und die Checks, die ausgeführt werden.
Für moderne, aus Nagios hervorgegangene Open Source Monitoring Systeme haben sich die bereits am Anfang angesprochenen Monitoring Plugins etabliert. Diese installierst du im nächsten Schritt.

Damit kannst du direkt nach Abschluss dieses Icinga Installationsguides die ersten Checks anlegen und mit deinem System Monitoring oder Netzwerk Monitoring starten. Dafür nutzt du im Terminal den folgenden Befehl:

apt install monitoring-plugins

 

Um die Ergebnisse der Check Plugins abzurufen oder mit Icinga zu interagieren, muss die Icinga API eingerichtet werden. Das machst du ganz einfach mit diesen beiden Befehlen:

icinga2 api setup
systemctl restart icinga2

Damit legst du in der Konfigurationsdatei /etc/icinga2/conf.d/api-users.conf einen API-User (inkl. zufallsgeneriertem Passwort) an.
(Die hier erzeugten Zugangsdaten benötigst du im weiteren Verlauf bei der Einrichtung von Icinga Web. Du wirst im entsprechenden Schritt noch einmal darauf hingewiesen!)

Falls du bestimmte Vorgaben erfüllen musst oder generell mehr über die Icinga API erfahren willst, lege ich dir entsprechende Seite in den Icinga Docs ans Herz.

Weiter geht es mit der Einrichtung von Icinga DB.

Schritt 4: Icinga DB einrichten

Icinga DB ist keine, wie der Name vielleicht vermuten lässt, eigenständige Datenbank.
Vielmehr handelt es sich hierbei um eine Sammlung von Komponenten zur Veröffentlichung, Synchronisierung und Visualisierung von Überwachungsdaten im Icinga-Ökosystem. Dazu gehören Redis, das IcingaDB-Feature des Icinga Core und der Icinga DB-Daemon.

Schritt 4.1: Redis Server installieren

Um Icinga DB zu nutzen, benötigst du einen Redis Server. Für einen reibungslosen Installations- und Konfigurationsprozess bietet das Icinga Team ein eigenes Redis-Paket an, das speziell auf Icinga zugeschnitten ist.
icindadb-redis umfasst deshalb eine aktuelle Version von Redis und kommt out of the box mit Anpassungen der Freigabe auf Port 6380 statt dem sonst für Redis üblichen Port 6379.
Das Paket installierst du mit:

apt install icingadb-redis

Hinweis: Der Redis Server kann grundsätzlich überall in deiner Icinga Umgebung installiert werden. Es ist jedoch sinnvoll, diesen auf dem zentralen Icinga-Node zu installieren, um die Latenz so niedrig wie möglich zu halten.
Ein bereits vorhandener und selbst konfigurierter Redis Server kann ebenso verwendet werden. Hier sind jedoch entsprechende Anpassungen notwendig, weshalb die Nutzung des entsprechenden Icinga-Pakets empfohlen wird.

Schritt 4.2: Aktivieren von Redis

Die Installation von icingadb-redis installiert automatisch alle systemd Dateien, die Icinga DB Redis braucht. Der Service kann also direkt aktiviert und gestartet werden:

systemctl enable --now icingadb-redis-server

Standardmäßig lauscht icingadb-redis nur auf 127.0.0.1, also deinem localhost. Wenn Icinga Web 2 oder Icinga 2 auf einer anderen Node laufen als Redis, dann muss das in der Konfigurationsdatei

/etc/icingadb-redis/icingadb-redis.conf

angepasst werden.

Auch wenn in diesem Guide alle Schritte auf einer Icinga-Node durchgeführt werden, wird die Konfigurationsdatei so angepasst, dass das Aufsetzen weiterer Nodes in der Zukunft kein Problem darstellen.
Dafür sind innerhalb der Konfigurationsdatei zwei kleine Anpassungen notwendig:

  • protected-mode von yes auf no
  • bind von 127.0.0.1 auf 0.0.0.0 –> Dadurch können alle Interfaces auf Redis zugreifen

Um die Änderungen zu aktivieren, muss der Service neu gestartet werden:

systemctl restart icingadb-redis

Damit Icinga über Icinga DB später Daten an Redis weitergibt, muss das entsprechende Feature aktiviert und Icinga anschließend neu gestartet werden:

icinga2 feature enable icingadb 
systemctl restart icinga2

Sicherheitshinweis:
Redis hat standardmäßig KEINE Authentifizierung aktiviert!
Mit der Änderung von bind auf 0.0.0.0 wird dringend, um unbefugten Zugriff zu verhindern, empfohlen, einige Sicherheitsmaßnahmen durchzuführen. Dazu gehören: Einrichten eines Passworts, Aufstellen von Firewall-Regeln oder Einrichten von TLS.
Zur einfacheren Installation wird in diesem Guide jedoch auf diese Schritte verzichtet! Diese Anpassungen lassen sich ebenfalls nachträglich durchführen.

Schritt 4.3: Installieren von Icinga DB und einrichten der Datenbank

Nachdem im gerade abgeschlossenen Schritt die Schnittstelle von Icinga 2 zu Icinga DB aktiviert wurde, wird nun Icinga DB selbst installiert:

apt-get install icingadb

Damit das gerade installierte Paket die verarbeiteten Daten auch speichern kann, muss eine Datenbank für Icinga DB angelegt und Zugriff dazu gewährt werden. (In diesem Guide wird MariaDB 10.6.12 verwendet. Die Einrichtung von MySQL ist mit den gleichen Befehlen möglich. Nutzt du PostgreSQL findest du die entsprechenden Befehle in den offiziellen Icinga Docs.)

mysql -u root -p 
CREATE DATABASE icingadb; 
CREATE USER 'icingadb'@'localhost' IDENTIFIED BY 'SAFEPASSWORDINHERE'; 
GRANT ALL ON icingadb.* TO 'icingadb'@'localhost';

Damit hast du die Datenbank und den Datenbank-Nutzer erfolgreich angelegt. Icinga DB stellt zudem ein Datenbankschema zur Verfügung, dass nun importiert wird:

mysql -u root -p icingadb </usr/share/icingadb/schema/mysql/schema.sql

Schritt 4.3: Zugriffsberechtigungen anpassen

Während der Installation von Icinga DB wird unter /etc/icingadb/config.yml eine Konfigurationsdatei angelegt, die mit Standardwerten gefüllt ist. Damit die Verbindung von Icinga DB zu Redis und MariaDB erfolgreich stattfinden kann, müssen diese Werte überprüft und gegebenenfalls angepasst werden.

Öffne also den Pfad mit einem Texteditor deiner Wahl und passe die folgenden Parameter gegebenenfalls an.

Für die Datenbank:
host mit dem entsprechenden Hostname/Host-IP deiner Datenbank, database mit dem Namen deiner Datenbank (in diesem Guide icingadb), user mit dem Namen deines Datenbanknutzers und password mit dem Passwort, dass du für deine Datenbank vergeben hast.

Für Redis:
host mit dem entsprechenden Hostname/Host-IP deiner Redis Instanz. Wenn du während der Installation deines Redis-Servers den port geändert oder ein password gesetzt hast, musst du dies hier ebenfalls eintragen.

Sobald diese Änderungen abgeschlossen sind, kann der Icinga DB Service aktiviert werden:

systemctl enable --now icingadb

Schritt 5: Icinga Node Wizard ausführen

Nachdem die Grundkomponenten für die Nutzung von Icinga installiert und konfiguriert wurden, muss noch er Node Wizard ausgeführt werden. Dieses interaktive Skript hilft dir dabei, Zonen einzustellen und die Endpunkte deines Icinga Monitoring festzulegen.

Dafür gibst du im Terminal diesen Befehl ein:

icinga2 node wizard

Da hier einige wichtige Einstellungen vorgenommen werden, hier eine Übersicht der einzelnen Punkte:

  • Is this agent/satellite setup? –> Hier ’n‘ eingeben und mit Enter bestätigen
  • Specifiy common name (FQDN of your master) –> Nichts eingeben und mit Enter bestätigen
  • Master zone name –> Nichts eingeben und mit Enter bestätigen
  • Specify additional global zones –> Nichts eingeben und mit Enter bestätigen
  • Specify API bind host/port –> Nichts eingeben und mit Enter bestätigen
  • Bind Host –> Nichts eingeben und mit Enter bestätigen
  • Bind Port –> Nichts eingeben und mit Enter bestätigen
  • Disable inclusion of conf.d directory –> Nichts eingeben und mit Enter bestätigen

Screenshot der Ubuntu Terminalausgabe, bei dem das Kommando icinga2 node wizard inklusive seiner Ausgabe zu sehen ist. Der Screenshot soll verdeutlichen wie die Ausgabe dieses Befehls im Terminal visualisiert wird

Im Anschluss verifizierst du die getätigte Konfiguration und lädst Icinga 2 neu:

icinga2 daemon -C 
systemctl reload icinga2

Damit hast alle wichtigen Schritte zur Icinga und Icinga DB abgeschlossen!

Wie gehts es nun weiter?

Herzlichen Glückwunsch, du hast erfolgreich ein lokales Icinga installiert und konfiguriert! Damit könntest du nun direkt loslegen und über die Icinga2 API deine ersten Objekte anlegen, Actions triggern oder Templates bauen. Welche API-Calls dir dafür zur Verfügung stehen, kannst du übersichtlich in den Icinga Docs nachlesen.

Grundsätzlich ist die Icinga Installation nun einsatzbereit. Damit eine Open Source Monitoring Lösung wie Icinga aber produktiv genutzt werden kann, müssen die gesammelten Daten noch visualisiert werden.
Dabei helfen Icinga Web und Icinga DB Web. Wie diesen beiden Tools installiert und mit der hier aufgesetzten Basis verbunden werden erfährst du im Installationsguide zu Icinga Web und Icinga DB Web auf Ubuntu 20.04 / 22.04.

Linux Monitoring mit Icinga – so löst du bekannte Probleme

Beim Betrieb von Computerinfrastrukturen treten früher oder später Probleme auf. Typischerweise schon bei der Einrichtung und später bei Änderungen, aber auch im “Normalbetrieb”. Die Ursachen dafür sind entweder extern, intern oder eine Mischung aus beidem. Zu regelmäßig auftretenden externen Ursachen zählen zum Beispiel eine Änderung des Kontextes der Maschinen, wie etwa ein Strom- und/oder Netzwerkausfall oder Updates, die etwas am äußeren Verhalten eines Programmes ändern.
Aber auch schlicht der Fortlauf der Zeit muss hier erwähnt werden. Eine tragische und unaufhaltsame Gewissheit, die durchaus technische Bedeutung hat, etwa in der Gültigkeit von Zertifikaten oder Problemen mit der Zeitsynchronisation.

Intern können Probleme durch eine bestehende Fehlkonfiguration entstehen. Dieser Begriff ist jedoch etwas Vorsicht zu genießen, da es durchaus Szenarien gibt, in denen eine bestimmte Konfiguration zum Zeitpunkt der Entstehung durchaus richtig und angemessen war. Oftmals zeigt sich erst im Verlauf von Monaten oder Jahren oder durch Änderung des Kontextes, dass die damals „richtigen“ Einstellungen problematisch sind.

An dieser Stelle tritt Monitoring auf den Plan und nimmt seinen Platz in einer gut geplanten IT-Infrastruktur ein. Enterprise-Monitoringlösungen wie Icinga versuchen bei der Voraussage, Entdeckung und Behebung von Problemen zu helfen. Um dir einen guten und vielfältigen Eindruck von den Möglichkeiten eines gut eingerichteten Monitoringtools zu geben, gehe ich in diesem Blogpost auf einige klassische und häufige Probleme, speziell im Kontext von Linux (und damit häufig auch anderen unixoiden Betriebssystemen) ein.

Im Laufe meines Beitrags werde ich regelmäßig auf die Monitoring Plugins eingehen, da diese beim Erkennen von Problemen eine wichtige Rolle spielen. Diese Zusammenstellung an Plugins ist neben Icinga auch für den Einsatz mit anderen Monitoring-Systemen geeignet, solange diese die Monitoring Plugins unterstützen.

Gängige Probleme auf Linux-Maschinen und Monitoringlösungen mit Icinga

Dateisysteme erreichen die Kapazitätsgrenzen

Ein nicht sehr häufiges (bezogen auf die Auftretenswahrscheinlichkeit), aber fatales Problem ist ganz klassisch, dass im Betrieb ein Dateisystem bis an die Kapazitätsgrenzen vollläuft. Dies führt üblicherweise dazu, dass das System seinen Betrieb ganz oder teilweise einstellt, jedoch ist das Fehlerbild potenziell auf den ersten Blick nicht offensichtlich. Beispielsweise können Programme keine großen Dateien mehr anlegen, beziehungsweise wird das Schreiben derselben abgebrochen, aber kleine, temporäre Dateien sind vielleicht (für den Moment) noch möglich.
Das führt je nach betrachteter Software und deren Fehlerbehandlung dazu, dass erst mal noch alles in Ordnung erscheint. Ein Webdienst wird weiterhin ansprechbar sein und kleine Abfragen durchaus beantworten, dann aber bei anderen (bei denen dann versucht wird größere Dateien zu schreiben) die Bearbeitung abbrechen und nur noch Fehler ausgeben, aber nicht vollständig abstürzen.

Ein anderes Beispiel ist eine Datenbank, die zwar noch lesende Zugriffe durchführen kann, aber eben keine Schreibenden. In diesen Fällen wird ein einfacher Test auf die Funktionalität des Dienstes (das init-System des Systems bescheinigt, dass der Dienst läuft; entsprechende Anfragen auf bestimmten Ports werden noch angenommen) ein positives Ergebnis bescheinigen. Trotzdem ist die eigentliche Hauptfunktionalität nicht mehr gegeben.

In einem typischen Szenario, in dem die Checks für das System lokal (oder aus der Ferne über gängige Transportwege wie SSH) ausgeführt werden, ist die klassische und gängigste Wahl beim Monitoring mit Icinga check_disk ( aus den Monitoring Plugins (Debian- und Suse-artige Distributionen) bzw. nagios-plugins (RedHat-Familie)). Zwar ist die Benutzung teilweise etwas ungewöhnlich (Stichwort Gruppierung), aber für unkomplizierte Dateisystem-Setups (und damit die häufigsten) durchaus noch ausreichend.

Ein typischer Aufruf könnte etwa so aussehen:

# ./plugins/check_disk -w 2% -c 1% \
    -X none -X tmpfs -X fuse.portal -X fuse.gvfsd-fuse \
    -X sysfs -X proc -X squashfs -X devtmpfs
DISK OK - free space: / 32892MiB (58% inode=83%); /boot 257MiB (57% inode=99%); /var 147782MiB (65% inode=92%); /home 154929MiB (34% inode=96%); /boot/efi 503MiB (98% inode=-);| /=24961351680B;61414781747;62041463193;0;62668144640 /boot=197132288B;482974105;487902412;0;492830720 /var=83065044992B;245826626519;248335061483;0;250843496448 /home=314740572160B;492755872645;497783993794;0;502812114944 /boot/efi=7340032B;524078284;529426022;0;534773760

# ./plugins/check_disk -w 2% -c 1% -N ext2 -N ext4
DISK OK - free space: / 32892MiB (58% inode=83%); /boot 257MiB (57% inode=99%); /var 147782MiB (65% inode=92%); /home 154935MiB (34% inode=96%);| /=24961351680B;61414781747;62041463193;0;62668144640 /boot=197132288B;482974105;487902412;0;492830720 /var=83065044992B;245826626519;248335061483;0;250843496448 /home=314734280704B;492755872645;497783993794;0;502812114944

In diesem Beispiel werden die Grenzwerte für Dateisysteme so gesetzt, dass der Warnzustand bei weniger als zwei Prozent freiem Speicherplatz und der Kritische bei weniger als einem Prozent auftritt. Die Sammlung an -X-Parametern (beziehungsweise das komplementäre -N) schließt diverse Dateisystemtypen aus, die nicht geprüft werden sollen. Die von mir in diesem Beispiel ausgeschlossenen Dateisystemtypen fallen nicht unter die Kategorie, die man hier im Auge hat. Hierbei handelt es sich um Dateisysteme die meine Dateien persistent auf magnetische Platten oder Halbleiterspeicher fixieren.

Alternativ können check_disk gezielt ein oder mehrere Befestigungspunkte übergeben werden:

./plugins/check_disk -w 2% -c 1% -p /home -p /boot
DISK OK - free space: /home 154935MiB (34% inode=96%); /boot 257MiB (57% inode=99%);| /home=314733232128B;492755872645;497783993794;0;502812114944 /boot=197132288B;482974105;487902412;0;492830720

Zur Feinjustierung existieren noch mehr Optionen, ein check_disk --help kann sehr hilfreich sein. Das Setzen von Grenzwerten für die Benutzung von Inodes mittels -W und -K ist leider ein viel zu häufig vergessenes Problem. Ein Mangel an freien Inodes bietet ein sehr ähnliches Bild wie eine Mangel an freiem Platz, jedoch ist es weniger offensichtlich (und tritt auch deutlich seltener auf).

Alternativen zu check_disk sind diverse andere Monitoring Plugins, wie etwa disk_usage der Linuxfabrik. Damit wird zu großen Teilen dieselbe Problematik abgedeckt. Weiterhin gibt es Plugins, die Rand- oder Sonderfälle behandeln, die außerhalb des Funktionsumfangs der klassischen Plugins liegen.
Sonderfälle dieser Art wären etwa kompliziertere Setups mit Dateisystemen mit einer größeren Menge an Funktionen wie etwas btrfs, xfs oder zfs. Hier ist eine einfache Aussage, wie die von mir bereits betrachtete “Wie viel Platz ist frei/belegt?” nicht so einfach zu treffen. Als wäre das noch nicht genug, gibt es hierbei noch die Problematik von Netzwerk- und verteilten Dateisystemen, die auch etwas komplexer ist.

TLDR

Mindestens das root-Dateisystemen sollte mit check_disk oder etwas Ähnlichem überwacht werden, als Checkintervall reichen fünf Minuten locker aus. Zusätzliche Dateisysteme für das Persistieren von Daten sollten äquivalent überwacht werden. Auch sollte überwacht werden, ob noch genügend Inodes frei sind.

Swapping

Swap-Speicher ist ein Bereich im Langzeitspeicher, der zur Auslagerung von Arbeitsspeicherinhalten dienen kann (Stichwort “Auslagerungsdatei” unter Windows). In Zeiten von sehr limitierter Arbeitsspeicherkapazität eine nützliche Funktion, um kurzfristige Kapazitätsengpässe handhaben zu können, ohne Nutzerprogrammen den angeforderten Speicher zu verweigern. Zusätzlich dient der Swap-Bereich heutzutage oft als Speicherort für Arbeitsspeicherinhalte, wenn eine Maschine in einen Ruhezustand versetzt und der (physikalische) Arbeitsspeicher ebenfalls außer Betrieb geht (Stichwort: “Hibernation”).

Diese Möglichkeiten kommen natürlich mit einem Preis. Festspeicher (“long term storage”) ist immer noch um Größenordnungen langsamer als Arbeitsspeicher (der wiederum deutlich langsamer als die
Speicher (“L*-Caches”) in der CPU ist). Die Auslagerung von aktiv genutzten Arbeitsspeicherinhalten kann dazu führen, dass ein System langsam bis an die Grenze der Benutzbarkeit gebracht wird. Das ist bei einem PC störend und frustrierend, kann jedoch bei Produktivmaschinen teilweise noch schlimmere Konsequenzen haben.
Eine Maschine, die ohnehin gerade unter Last steht, weil sie zum Beispiel sehr viele Abfragen erhält, wird, wenn das Swapping beginnt, sehr viel langsamer werden, was dann die Belastung typischerweise nicht senkt. Es sollte deshalb sichergestellt sein, dass die Nutzung von Swapspeicher (im Normalbetrieb) sowohl in Hinsicht der Quantität (Prozent an freiem/benutzten Speicher) als auch im zeitlichen Rahmen begrenzt ist.

Klassisch bietet sich hier check_swap (wiederum Monitoring Plugins|nagios-plugins) an, beispielsweise:

# ./plugins/check_swap -w 60% -c 20%
SWAP OK - 100% free (36863MB out of 36863MB) |swap=38653657088B;23192194200;7730731400;0;38653657088

In diesem Beispiel wird getestet, ob weniger als 60 Prozent des Swapspeichers frei ist (Grenzwert für WARNING) bzw. 20 Prozent (Grenzwert für CRITICAL). Eine temporär hohe Nutzung mag (je nach Szenario) durchaus erlaubt sein, aber längerfristig dürfte dies ein Problem darstellen.
Als groben Richtwert könnte man vielleicht fünfzehn Minuten anlegen, nach denen jemand alarmiert werden sollte. Das Checkintervall dürfte mit ein, zwei oder drei Minuten ausreichend bedient sein.

Wie hoch ist die Systemlast?

Ganz generell sind Systemressourcen limitiert, seien es CPU-Zeit, Speicher, andere Prozessoren und natürlich die ganzen Schnittstellen dazwischen. Manchmal lässt sich nicht oder nur schlecht an einzelnen kleinen Metriken ablesen, wenn ein Engpass besteht, zumindest wenn die Werte nur eine Teilmenge aller Werte darstellen und die wichtigen Metriken nicht enthalten sind. In unixoiden Systemen gibt es aus diesen und anderen Gründen die load-Metrik, die zwar die Details vermissen lässt, aber zuverlässig einen Indikator für ein Problem liefert.

Händisch kann die load mit dem Programm uptime (beispielsweise) abgerufen werden:

# uptime
 12:21:58 up  1:25,  1 user,  load average: 0.40, 0.38, 0.23

Die load besteht hier aus den drei Zahlenwerten 0.40,0.38 und 0.23, mit einem Aggregatswert über eine Minute, fünf Minuten und fünfzehn Minuten.

Alternativ direkt aus dem Proc-Dateisystem:

# cat /proc/loadavg
0.00 0.06 0.12 1/1316 27272

Und in “proc (5)” findet sich dann auch eine Erklärung der Zahlen.

Wer sich jetzt nicht jedes Mal die Arbeit machen will, diese Werte mit einem händisch eingegebenen Befehl aufzurufen und auszulesen, kann auf eine automatisierte Überwachung durch Check-Plugins, in diesem Fall check_load (Monitoring Plugins|nagios-plugins) setzen. Die Grenzwerte sind in diesem Fall etwas schwierig zu bestimmen, da die “zu hohe Last” stark vom Kontext abhängt.
Generell lässt sich sagen, dass eine load von eins fast der Idealwert ist, da sich damit (im Durchschnitt) immer ein Prozess in der Warteschlange befindet.

Für Werte größer als eins wird die Beurteilung schwieriger. Die Zahlenwerte aus meinem Beispiel stammen von einem Laptop ohne größere Aktivitäten (nur zwei Webbrowser). Für eine größere Maschine, etwa einen Datenbankserver mit 16 (oder mehr) CPU-Kernen, kann ein Wert von 40 auch normal sein und durchaus noch einen akzeptablen Betriebszustand darstellen. Die Option -r für check_load dividiert die load-Werte durch die Anzahl der CPU-Kerne, um eine gewisse “Normalisierung” der Werte zu erreichen, die meistens angemessen ist.

Ein angemessenes Monitoring wäre ein Checkintervall von einer bis drei Minuten mit Benachrichtigung nach fünfzehn Minuten. Als Grenzwerte wären 3,3,3 für WARNING und 5,5,5 für CRITICAL als einigermaßen konservative Einschätzung angemessen.

Ausfälle von Services (systemd) und Prozessen

In den meisten Fällen stellen Maschinen Dienste für Menschen oder andere Maschinen bereit und es ist normalerweise von gesteigertem Interesse, ob dieser Dienst auch läuft. In den meisten Linux-Distributionen ist systemd als Event- und Servicemanager im Einsatz und sollte dazu benutzt werden, durchgängig laufende Programme zu verwalten.

Mittels check_systemd lässt sich ermitteln, ob Dienste (bzw. generalisiert, systemd-units) in einem fehlerhaften Zustand sind oder nicht.

Dazu ein Beispiel mit dem SSH-Serverdienst (openssh):

# ./check_systemd.py -u ssh
SYSTEMD OK - ssh.service: active | count_units=490 data_source=cli startup_time=6.193;60;120 units_activating=8 units_active=332 units_failed=2 units_inactive=148

Im Hintergrund sind Dienste am Ende aber auch “nur” Prozesse und du möchtest potenziell diverse Eigenschaften von Prozessen überprüfen (etwa CPU-Nutzungszeit (in Prozent), oder die Größe des benutzten Speicherbereichs). Erste Anlaufstelle ist für mich check_procs.

Beispielsweise kannst du damit überprüfen, ob Zombieprozesse vorhanden sind:

# ./plugins/check_procs -s Z -w 1
PROCS OK: 0 processes with STATE = Z | procs=0;1;;0;

Ein weiterer Anwendungsfall ist die Überprüfung aller Prozesse, die mehr als zwei Prozent der CPU-Zeit verschlingen:

# ./plugins/check_procs --metric CPU -w 2
CPU WARNING: 1 warn out of 310 processes | procs=310;;;0; procs_warn=1;;;0; procs_crit=0;;;0;

Dateieigenschaften – warum Probleme auftreten können

An vielen Stellen muss überprüft werden, ob eine oder mehrere Dateien vorhanden sind und/oder bestimmte Eigenschaften aufweisen, beispielsweise ob sie älter oder jünger als ein gewisses (relatives) Datum sind, größer oder kleiner als ein Grenzwert sind oder bestimmte Berechtigungen haben. Die Ergebnisse einer solchen Überprüfung können als Indikator für ein Problem in einem Programm dienen, etwa, dass Dateien in einem Spooler-Verzeichnis nicht schnell genug abgeholt werden.

Glücklicherweise ist das ein Bereich, der sich relativ einfach durch selbstgeschriebene, auf den Nutzungsfall abgestimmte Skripte abdecken lässt. Wenn man den passenden find Befehl zusammengebaut hat, kann man nach den Monitoring Plugins Guidelines dann ein Monitoring Plugin bauen, dass den eigenen Spezialfall abdeckt.

Für etwas generellere Fälle gibt es mit check_file_age aber bereits eine Option, die zumindest das Überprüfen auf Alter und Größe erlaubt.

# ./plugins-scripts/check_file_age -f plugins-scripts/check_file_age -w 300:30000000 -c 1: -W 1:300
FILE_AGE WARNING: plugins-scripts/check_file_age is 516096 seconds old and 5193 bytes | age=516096s;300:30000000;1: size=5193B;1:300;0:;0

In diesem Beispiel sollte die Datei plugin-scripts/check_file_age älter als eine Sekunde sein (kritische Bedingung), zwischen 300 und 30000000 Sekunden alt (Bedingung für den WARNING-Zustand) und zwischen einem und 300 Bytes gross (zweite Bedingung für WARNING).

Für alle die es etwas vielfältiger mögen, wären die Monitoring Plugins der Linuxfabrik, die mit file beginnen, eine Option.

Schlusswort

Die angesprochenen Probleme sind natürlich nur ein kleiner Teil der möglichen Problemstellungen, mit denen man als Systemadministrator konfrontiert wird. Zudem habe ich mich für diesen Beitrag auch ausschließlich auf Themen innerhalb einer Maschine limitiert. Die Thematik der Netzwerkproblembehandlung hätte den Rahmen mehr als gesprengt, bietet aber ein gutes Thema für weitere Blogposts.

Ich hoffe, ich konnte anhand meiner gewählten Beispiele verdeutlichen, welche Möglichkeiten der Einsatz von Monitoringlösungen wie Icinga bietet, besonders dann, wenn du ein Unix-basiertes Rechner- oder Servernetz betreibst. Und auch wenn ich mich im Rahmen dieses Posts auf die Ausführung der Checks über die Konsole beschränkt habe, lass dich davon bitte nicht abschrecken. Natürlich können all diese Eingaben auch (bis zu einem gewissen Punkt) mit der grafischen Lösung Icinga Director und die Weboberfläche Icinga Web durchgeführt werden.

Falls du und dein Unternehmen jetzt noch Hilfe bei der Einrichtung und Konfiguration von Icinga benötigt, lass es uns einfach wissen!

In der Zwischenzeit, bleibt zu hoffen dass diese Lektüre jemandem geholfen hat und wenn (aber auch wenn nicht), dann würde sich der Autor über Kommentare freuen.

Lorenz Kästle
Lorenz Kästle
Systems Engineer

Lorenz hat seinen Bachelor der Informatik an der FAU gemacht und sich zuletzt mit Betriebssystemen dort beschäftigt. In seiner Freizeit beschäftigt er sich ein wenig mit XMPP und der Programmiersprache Erlang.

NETWAYS GitHub Update Mai 2023

Willkommen beim NETWAYS GitHub Update, unser monatlicher Überblick über unsere neuesten Releases.

Unsere GitHub Projekte vom Mai 2023 umfassen unter anderem ein Update für Icinga-Powershell, den Icinga Installer und zwei aktualisierte Trainingsunterlagen!

Für weitere und schnellere Informationen kannst du uns auch auf GitHub folgen: https://github.com/NETWAYS/

icinga-powershell-connector Release v0.3.0

Changelog

  • Hinzugefügt: Bessere Fehlermeldung für Timeouts
  • Hinzugefügt: Timeout ist jetzt konfigurierbar
  • Performance Optimierungen des Parsers
  • Diverse Optimierungen im Buildprozess
  • Abhängigkeiten aktualisiert

https://github.com/NETWAYS/icinga-powershell-connector/releases/tag/v0.3.0

check-disk-btrfs Release v3.1.0

Changelog

  • Viele neue Tests für zukünftige Wartbarkeit
  • Hinzugefügt: Neue Optionen für Sub-Checks –missing und –error
  • Hinzugefügt: –no-sudo und –no-unallocated Optionen zum Deaktivieren der Funktionen

https://github.com/NETWAYS/check_disk_btrfs/releases/tag/v3.1.0

check-hp-ilo Release v0.1.0

Changelog

  • Großer Refactor für zukünftige Wartbarkeit
  • Hinzugefügt: –exclude Option kann nun mehrfach genutzt werden
  • Hinzugefügt: Nicht installierte Komponenten werden ignoriert.
  • Hinzugefügt: Gerätname in der Status Ausgabe
  • Bugfix: Sub-Checks zeigen jetzt nicht mehr die ILO Ausgabe als Status sondern Icinga-konforme Status
  • Perfdata Ausgabe optimiert

https://github.com/NETWAYS/check_hp_ilo/releases/tag/v0.1.0

icinga-installer Release v1.2.4

Changelog

  • Bugfix: Parameter in Server Manifest angepasst
  • Diverse Anpassungen in der Dokumentation

https://github.com/NETWAYS/icinga-installer/releases/tag/v1.2.4

Training Foreman Release v1.7

Changelog

  • Update auf Foreman 3.5 und Katello 4.7
  • Refactor: Katello als Basis
  • Update von Plugins, Screenshots und Grafiken

https://github.com/NETWAYS/foreman-training/releases/tag/v1.7

Training GitLab Release v4.0.0

Changelog

  • Leichterer Einstieg in Git
  • Refactor: mehr GitLab Themen und einige Git Themen entfernt
  • Formulierung auf vielen Folien optimiert

https://github.com/NETWAYS/gitlab-training/releases/tag/v4.0.0

Markus Opolka
Markus Opolka
Senior Consultant

Markus war nach seiner Ausbildung als Fachinformatiker mehrere Jahre als Systemadministrator tätig und hat währenddessen ein Master-Studium Linguistik an der FAU absolviert. Seit 2022 ist er bei NETWAYS als Consultant tätig. Hier kümmert er sich um die Themen Container, Kubernetes, Puppet und Ansible. Privat findet man ihn auf dem Fahrrad, dem Sofa oder auf GitHub.