Seite wählen

NETWAYS Blog

Icinga Director auf RHEL 7 / 8 / 9 installieren

Der Icinga Director ist die grafische Konfigurationsmöglichkeit für Icinga. Zu Beginn als unabhängiges Modul für die Open Source Monitoring Lösung Icinga entwickelt, ist er heute ein vollwertiger Teil des Icinga Stacks.
Wenn du statt der Konfiguration mit der Icinga API auf eine grafische Icinga Konfigurationslösung umsteigen willst, bist du bei uns richtig.

Unser Icinga Director Installationsguide hilft dir dabei, den Icinga Director auf RHEL 7 / 8 / 9 zu installieren.

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 RHEL hinzufügen

Hinweis: Die Schritte die hier für Red Hat Enterprise Linux beschrieben werden, sind ebenso für alle RHEL-basierten Linux Betriebssysteme, zum Beispiel Rocky Linux, Alma Linux, Alpine Linux oder Oracle Linux möglich.

Beachte zudem, dass es sich beim Icinga RHEL Repository um ein kostenpflichtiges Repo handelt. Der Zugang ist Teil der Icinga Subscription Repositories.

Das Repository fügst du mit zwei einfachen Befehlen zu deinem System hinzu:

rpm --import https://packages.icinga.com/icinga.key 
wget https://packages.icinga.com/subscription/rhel/ICINGA-release.repo -O /etc/yum.repos.d/ICINGA-release.repo

Schritt 2: Icinga Director installieren


Um das das Icinga Director Paket aus dem gerade hinzugefügten Repo auf RHEL zu installieren nutzt du diesen Befehl:

RHEL 8 oder später:

dnf install icinga-director

RHEL 7:

yum install icinga-director

 

Schritt 3: Icinga Director Datenbank aufsetzen

Damit der Icinga Director Daten lesen und schreiben kann, benötigt das Icinga 2 Modul eine eigene Datenbank.

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

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 funktioniert, müssen weitere Konfigurationsschritte innerhalb der Icinga Weboberfläche vorgenommen werden.

Anlegen einer neuen Icinga Datenbank Ressource

Im unteren Bereich des linken Icinga Web Menüs befindet sich ein Zahnrad. Sobald du mit der Maus darüber gehst, siehst du das „Hauptmenü“ von Icinga Web. Hier folgst dem folgenden Pfad, 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

Nutze den Icinga Director Kickstart Wizard, um den Icinga Director zu konfigurieren. Klicke dafür im nun vorhandenen Menüpunkt unter „Ressources“ auf Icinga Director. Wähle die gerade angelegte Datenbankressource aus, 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 Name noch mal ist, dieser wurde in Schritt 5 des Icinga Installationsguides für Ubuntu oder des Icinga Installationguides für RHEL 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. Ist der Prozess erfolgreich abgeschlossen, siehst du im Icinga Director Menü neben Activity log eine dreistellige Zahl, ähnlich der im Screenshot:

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 Icinga Director durchgeführt wurden, jetzt aber noch auf dein Icinga 2 Monitoring ausgerollt werden müssen. Diesen letzten Schritt führst du aus, indem du auf Activity log klickst und im oberen Bereich des sich öffnenden 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 erfolgreich den Icinga Director auf RHEL installiert und 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 zur Installation von Icinga auf RHEL 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 nutzt du nun ein mächtiges grafisches Konfigurationstool für Icinga, dass dir die tägliche Arbeit sicher erleichtern kann. Zusammen mit dem 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.

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 Director – grafische Konfiguration für alle?

Um dir einen reflektierten und ehrlichen Einblick in meine Entscheidungsgrundlage zu geben, gehe ich so vor, als würde ich im Consulting einen Kunden beraten und mit ihm zu einem für ihn passenden Lösungsansatz kommen. Bevor ich die jeweiligen Vor- und Nachteile von Konfigurationsdateien und der grafischen Oberfläche, dem Icinga Director, beleuchte, möchte ich als Einstieg allerdings erst über die Icinga DSL reden. Dies soll dazu dienen, dass Du meine Argumente besser verstehst und nachvollziehen kannst. Nach dem Pro und Kontra werde ich dann mein persönliches Fazit ziehen und Dir verraten, wie ich mich entscheiden würde. Das muss aber nicht der Schluss sein, zu dem Du kommst. Hier darf gerne jede:r mit seiner eigenen Gewichtung zu einem persönlichen Ergebnis kommen. Und eigentlich handelt es sich hierbei nur um ein Zwischenfazit. Denn im Anschluss möchte ich noch auf die Möglichkeiten für eine Automatisierung der Konfiguration eingehen. Und falls Du Automatisierung in Betracht ziehst, wird auch das Deine endgültige Entscheidung maßgeblich beeinflussen. Also, schauen wir uns die Möglichkeiten einmal genauer an!

Icinga DSL

Nun hab ich die Abkürzung DSL bereits zweimal verwendet ohne sie auszuschreiben! Was ich meinen Auszubildenden angekreidet hätte, will ich aber bewusst als Stilmittel verwenden. Denn tatsächlich verwendet Icinga 2 zur Konfiguration nicht eine einfache Konfigurationssprache sondern eine Domain-Specific-Language (DSL). Das Gegenstück wäre eine General-Purpose-Language (GPL) wie beispielsweise YAML. Mit einer solchen ließen sich bestimmt auch alle Monitoring-Objekte abbilden, aber die Icinga DSL erlaubt noch mehr. Dank DSL lassen sich Verzweigungen und Funktionen umsetzen und damit die Konfiguration vereinfachen, was auch die Wartung vereinfacht.

Ein Beispiel für eine Host-Definition:

object Host "localhost" {
  imports "Default Host"
  address = "127.0.0.1"
  vars.os = "Linux"
}

Was aber für mich viel wichtiger ist, ist der Ansatz dahinter. War mit Icinga 1 die Konfiguration noch sehr objekt-basierend, so dass mehr oder weniger jedes Objekt einzeln angelegt und gepflegt werden musste, ist nun die DSL für eine regel-basierte Konfiguration gedacht. Das ermöglicht es, sich Regeln für Überwachung und Benachrichtigung zu überlegen und dann die Host-Objekte mit den passenden Eigenschaften auszustatten, damit die Regeln greifen.

Ein Beispiel für eine solche Regel zur Service-Definition:

apply Service "SSH" {
  import "Default Service"
  check_command = "ssh"

  assign where host.vars.os == "Linux"
}

Auch wenn Du Dich bisher nicht eingehender mit der Icinga DSL befasst hast, kannst Du vermutlich dieses einfache Beispiel nachvollziehen und erkennen, dass für jedes System inklusive unserem „localhost“ mit dem Betriebssystem Linux nun ein Service zur Überwachung des SSH-Diensts erzeugt wird. Natürlich kann es auch durchaus komplexer werden, aber auch das wollen wir vielleicht konfigurieren. Auch für einen komplexeren Befehl möchte ich Dir ein Beispiel geben.

Zeitabhängige Schwellwerte für die Überwachung der Auslastung als Beispiel für komplexere Konfiguration:

apply Service "Load" {
  import "Agent Service"
  check_command = "load"

  vars.load_wload1 = {{
    if (get_time_period("backup").is_inside) {
      return 20
    } else {
      return 5
    }
  }}
  vars.load_cload1 = {{
    if (get_time_period("backup").is_inside) {
      return 40
    } else {
      return 10
    }
  }}

  assign where host.vars.os == "Linux"
}

In diesem Beispiel werden die Schwellwerte für die Auslastung des Systems während der für das Backup definierten Timeperiod hoch gesetzt. Dadurch werden fehlerhaft-positive Alarme vermieden, ohne die Überwachung oder Alarmierung komplett abzuschalten.

Ich hoffe diese kleine Einleitung macht deutlich, was und wie wir aufgrund der Eigenschaften der Icinga DSL konfigurieren müssen. Egal ob in Konfigurationsdateien oder mit Hilfe der grafischen Oberfläche, dem Icinga Director.

Konfigurationsdateien

Der Vorteil von Konfigurationsdateien ist oftmals der „Haben wir schon immer so gemacht“-Faktor. Zwar muss man für den Einstieg die Icinga DSL lernen, aber man kann mit gewohnten Werkzeugen, Strukturen und Arbeitsweisen an die Konfiguration von Icinga herangehen. Auch eine Versionskontrolle mittels Git oder eine Automatisierung mit Ansible oder Puppet ist einfach möglich.

Eine Zusammenarbeit an den Dateien wird schon etwas komplizierter, denn alle müssen das gleiche Verständnis der Struktur mitbringen. Sollen dabei auch noch verschiedene Rollen eingenommen werden, müssen entsprechend feine Dateirechte her oder es braucht zumindest wirklich eine Versionskontrolle und damit verbundene Reviews.

Syntax-Highlighting ist für die wichtigsten Editoren vorhanden, aber trotzdem dürfte das Hauptproblem die Fehleranfälligkeit des Menschen sein. Sowohl syntaktische als auch logische Fehler fallen erst bei der Validierung durch Icinga auf und sind gerade wenn mehrere Personen parallel Änderungen vorgenommen haben auch nicht immer leicht zu finden.

Der größte Vorteil steht dem direkt entgegen, denn ohne eine weitere Abstraktion habe ich direkten und vollen Zugriff auf alle Möglichkeiten der Icinga DSL. Somit sind zahlreiche Anpassungen möglich wie die oben gezeigten zeitabhängigen Schwellwerte, aber noch vieles mehr wie das Erzeugen von Objekten per Schleife auch über komplexe Datenstrukturen oder das Auswerten und Zusammenfassen von bestehenden Checks zu einem Gesamtergebnis. Aber auch ohne die komplexen Beispiele kann eine einfache Ergänzung, wie etwa eine Fallunterscheidung, schon Arbeitserleichterung bringen und doppelte Pflege vermeiden!

Icinga Director

Übersicht des Icinga DirectorsDer Icinga Director als grafisches Frontend zur Konfiguration stellt eine Abstraktion der Icinga DSL dar, denn es müssen natürlich für alle Objekte mit allen Attributen Eingabemasken existieren. Um das noch etwas klarer zu machen, gebe ich Dir einen kurzen Einblick in die Funktionsweise des Icinga Directors. Der Director importiert von einer Icinga-Instanz grundlegende Objekte wie Check-Kommandos, Endpunkte und Zonen. Nach diesem Kickstart musst Du für die allermeisten Objekte zunächst Templates anlegen, wobei direkt Felder für zusätzliche Eigenschaften zu erstellen und anzuhängen sind. Sobald Du auch konkrete Objekte angelegt hast, kannst Du die Konfiguration für Icinga rendern und über den entsprechenden API-Endpunkt produktiv nehmen.

Das heißt auch beim Director können Fehler erst durch die Validierung durch Icinga sichtbar werden. Aber die Eingabemasken reduzieren das Fehlerpotential stark, da Syntax-Fehler weitestgehend ausgeschlossen werden. Bei der Erstellung von Templates, Feldern und Regelwerk kannst Du durch sprechende Namen, Beschreibungen, Filter die nur passende Kombinationen erlauben sowie weitere ähnliche Maßnahmen das Risiko für logische Fehler weiter senken.

Hostansicht im Icinga DirectorsAuf der Trennung von Templates und Objekten baut auch das Rechtesystem des Directors auf, denn der Zwang zur Erstellung von Templates bereitet auch eine entsprechende Rollentrennung vor. So soll gewährleistet werden, dass ein Monitoring-Administrator ganz leicht Vorgaben machen kann und beispielsweise der Linux-Administrator anschließend einfach seine Hosts einpflegen braucht. Wer darauf geachtet hat, dem ist hier mein zögerliches Zugestehen aufgefallen. Denn ein Nachteil, den ich nicht verschweigen möchte, ist leider die Dokumentation des Directors. Alles Grundsätzliche ist in der Dokumentation durchaus enthalten. Manche Details jedoch werden erst durch Ausprobieren klar und Best Practices kristallisieren sich erst mit einiger Erfahrung heraus.

Was erklärt Dir die Dokumentation gut? Komfortfunktionen wie die, dass Du über ein Attribut den Host zu einem Icinga Agenten erklären kannst, finden sich relativ einfach. Die Erklärung, dass es uns Arbeit abnimmt, nochmal separat Endpoint- und Zonen-Objekte für jeden Host zu definieren, findet sich auch. Ebenso ein Hinweis auf die Installations- und Konfigurationshilfe, die sich hinter einem neuen Tab verbirgt. Anderes ist meines Erachtens weniger optimal dokumentiert. Wie ich Checks auf einem anderen Agenten ausführe und was es für das Feature bedeutet, ist dann außer für den erfahrenen Benutzer schwer ersichtlich. Ähnlich geht es mir auch mit anderen Features wie Choices oder Datenfeldkategorien. Diese sind sicher alle optional, dienen jedoch die Benutzerführung zu verbessern und wie bereits angemerkt Fehleranfälligkeiten zu reduzieren.

Auch wenn es nicht ganz offensichtlich ist und die Möglichkeit erst einmal einschränkend wirkt, können mit dem Icinga Director sogar bei Argumenten von Check-Kommandos komplexere Konstrukte mit der Icinga DSL eingebaut werden. Das bedeutet, dass auch das Beispiel mit zeitgesteuerten Schwellwerten möglich ist. Nur muss es halt etwas anders gelöst werden.

Erwähnt werden wollen noch die integrierte CLI und API. Solche Schnittstellen sehe ich immer als Plus. Sie ermöglichen hilfreiche zusätzliche Arbeitsweisen. Die ein oder andere schnelle Schleife über die CLI hat mir schon einiges an Klick-Arbeit gespart.

Zwischenfazit

Für meine eigene kleine Instanz wären wohl Konfigurationsdateien meine erste Wahl, denn ich bin ziemlich schnell im VIM unterwegs, kenne die Icinga DSL doch ganz gut und vor allem bin dann auch nur ich auf dem System unterwegs.

Ansonsten möchte ich Dir aber den Icinga Director ans Herz legen! Mit entsprechender Vorbereitung durch einen erfahrenen Admin oder wenn Du selbst Dir die Zeit nehmen kannst, Dich einzuarbeiten, kannst Du aus dem Director einiges rausholen. Ein großer Vorteil: Du kannst im Director die Arbeit leicht auf mehrere Personen verteilen, ohne dass alle ganz tief in die Materie einsteigen müssen. Das erlaubt es euch, leicht im Team zusammenzuarbeiten und die Abhängigkeit von einzelnen Personen zu reduzieren. Auch die Qualität des Monitorings wird in der Regel besser, wenn Administratoren das Monitoring eigenverantwortlich für ihre Systeme und Dienste pflegen können. Dazu tragen auch die erwähnten Komfortfunktionen und Möglichkeiten zum Aufhübschen bei, denn zumindest ein Umdenken erfordert der Director: Weg von der einfachen Konfiguration, die das primäre Ziel verfolgt,möglichst schnell etwas zu konfigurieren, hin zu einer möglichst übersichtlichen Konfiguration, die leicht zu verstehen und damit auch zu pflegen ist!

Nun fragt sich der eine oder die andere vielleicht, ob er oder sie mit einer Mischung aus beidem nicht die Vorteile beider Welten bekommen kann. Davon möchte ich jedoch abraten! Es ist zwar theoretisch und auch praktisch möglich, erfordert aber definitiv ein sehr tiefes Verständnis. Spätestens bei der Fehlersuche kann dies zum Verhängnis werden. Zudem schränkt es die Möglichkeiten des Directors ein, Objekte aus den Konfigurationsdateien zu verwalten. Du hast beispielsweise nicht mehr die Möglichkeit, wenn Du einen Check-Command importierst, alle Eigenschaften zu pflegen. Gerne behalte die Option im Hinterkopf und denke daran, wenn Du zum Beispiel Check-Kommandos als Konfigurationsdatei beim Plugin mitgeliefert bekommst. Aber bitte plane nicht damit! Daher auch hier meine übliche Empfehlung, dass Du Dich direkt zu Beginn für einen der beiden Wege entscheidest. So ersparst Du Dir später eine Migration und damit einhergehendes Umdenken.

Möglichkeiten der Automatisierung

Automatisierung mit Jobs im Icinga DirectorsFür mich ist schlussendlich meistens nicht entscheidend, wie einzelne Objekte konfiguriert werden können, da ich im Idealfall das Monitoring gar nicht manuell pflegen möchte. Und hier kommt eine der größten Stärken des Directors zum tragen: Der Director bietet die Möglichkeit, Daten aus einer Datenquelle zu importieren und aus diesen Daten dann Monitoring-Objekte zu erzeugen. Dabei können sogar noch Modifikatoren genutzt werden, um die Daten für den Verwendungszweck anzupassen.

Als erstes einfaches Beispiel möchte ich skizzieren, wie ein Import von Benutzern aussehen könnte. Die gleiche LDAP-Ressource, die für die Authentifizierung hergenommen wird, kann im Director als Importquelle verwendet werden. Ich gehe üblicherweise her und erstelle eine erste Import-Regel, die Gruppen importiert, und da hier meist keine Anpassungen nötig sind, kann ich sie direkt zu Usergroups für Icinga synchronisieren.Als zweites erstelle ich eine Import-Regel, die Benutzer importiert, dabei die Gruppenmitgliedschaften filtert und in ein passendes Format bringt, bevor über die Synchronisation daraus User-Objekte werden. Und schon muss ich für Benachrichtigungen nur noch benötigte Templates und die eigentlichen Benachrichtigungen pflegen. Das Management der hierfür benötigten Benutzer und ihrer Gruppen übernimmt das Active Directory, egal ob neue Kolleg:innen, Namensänderungen, Team-Wechsel oder was auch immer anstehen.

Das zweite Beispiel ist in der Praxis oftmals komplizierter. Denn um das Management der Hosts zu automatisieren, braucht es eine geeignete Quelle. Gibt es eine gut gepflegte CMDB (Configuration Management Database) oder Asset Management (oder wie auch immer es im jeweiligen Unternehmen genannt wird)? Perfekt! Eventuell stellst Du fest, dass die Datenqualität nicht so hoch ist, wie Du dies gerne hättest. Und auch hier kommen Modifikatoren zum Einsatz und schaffen Abhilfe. So können etwa alle Hostnamen zum FQDN ergänzt, die Schreibweise beispielsweise des Betriebssystems vereinheitlicht, die fehlende IP-Adresse durch DNS-Abfragen herausgefunden werden oder was sonst noch nötig ist.

Falls Daten fehlen, kannst Du sie aus einer anderen Quelle beziehen, denn viele weitere Module liefern Import-Quellen für den Director. Du kannst Dir etwa Systeminformationen aus dem Konfigurationsmanagement mit Hilfe der PuppetDB oder aus der zugrunde liegenden Plattform wie VMware vSphere oder AWS holen. Und der Vorteil ist: die Daten sind garantiert richtig! Sollten immer noch Daten fehlen, kannst Du diese mit einer eigenen Quelle anreichern. Vielleicht ist die Information schon in einem Excel-Dokument gepflegt oder Du kannst Dir schnell eine CSV-Datei bauen, denn beide Möglichkeiten bringt der Fileshipper. Letzteres nutze ich so regelmäßig, um Standortinformationen anzureichern, dass diese Option sogar als Beispiel in die Schulung Icinga 2 Advanced eingeflossen ist.

Je nachdem wie sehr man dem Automatismus dann vertraut, lässt der Director sich noch weiter automatisieren, so dass Import, Synchronisation und sogar das anschließende Deployment vollautomatisch passiert. Wer im Fehlerfall nicht nachts raus geklingelt werden möchte, kann auch gerne einstellen, dass dies nur während der Arbeitszeit passiert! 😉

Fazit

Mein Zwischenfazit hat ja bereits gezeigt, dass ich zum Director tendiere, selbst wenn es nur um manuelle Konfiguration geht. Aber auch wenn Importe natürlich individuell sind und man sich Konfigurationsdateien anders auch automatisch erstellen kann: hier trumpft der Director wirklich auf! Nicht nur der Workflow ist gut gedacht und vorbereitet, sondern durch die Möglichkeit mit weiteren spezialisierten Modulen, die Zahl der Importquellen und Modifikatoren zu erweitern. Das ist bei Bedarf sogar selbst in wenigen Zeilen zu erreichen. Damit wird der Icinga Director zum ganz klaren Sieger!

Falls Du Dir nun Hilfe bei der Einrichtung des Directors wünscht oder Unterstützung bei der Automatisierung suchst, aber auch wenn Du trotz meiner Ausführungen noch nicht entscheiden kannst, was für Dich der richtige Ansatz ist, melde Dich gerne! Ich oder ein:e Kolleg:in führen gerne eine individuelle Betrachtung zu Deiner IT-Umgebung und ihren Anforderungen durch. Im Rahmen eines solchen Consultingtermins erstellen wir Dir zunächst ein Konzept und können gerne auch direkt mit der Umsetzung beginnen.

Dirk Götz
Dirk Götz
Principal Consultant

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Puppet, Ansible, Foreman und andere Systems-Management-Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich wie nun bei NETWAYS.

Icinga Director Branches veröffentlicht

Der Icinga Director kommt mit einer Vielzahl an Features um Icinga Konfigurationen im Web Interface zu erstellen und zu bearbeiten und wird genau aus diesem Grund von vielen Nutzer:Innen so gerne genutzt. Um dieses Featureset noch weiter auszubauen, hat Icinga das Director Branches Modul veröffentlicht – eine neue Erweiterung für den Icinga Director.

Dieses Modul stellt eine sichere, virtuelle Arbeitsumgebung im Director zur Verfügung. Nach der Umstellung auf einen Custom Configuration Branch werden alle Änderungen nur dann Teil der Icinga Konfiguration, wenn ihr euch zu einem Merge entscheidet. In diesen Branches können sowohl einzelne Nutzer als auch ganze Teams arbeiten und die jeweiligen Konfigurationen verwalten.

Arbeiten mit Configuration Branches

Mit den Configuration Branches könnt ihr eure Icinga Konfiguration in einem parallelen Branch erstellen und bearbeiten. Damit lassen sich in aller Ruhe Änderungen vorbereiten, ohne dass ihr die Deployments von anderen Nutzer:Innen blockiert. Wenn die Arbeiten in dem Branch abgeschlossen sind, können ihr einen Merge Request erstellen. So fließen eure Anpassungen zurück in den Hauptbranch des Directors und das Deployment erfolgt dann über den Hauptbranch.

Dieser Workflow ermöglicht es eurem Team bestimmte Tasks auf verschiedene Teams zu verteilen, wobei ihr euch eine saubere und überprüfbare Konfiguration bewahrt. Jeder Merge Request beinhaltet einen Kommentar, welcher die Änderungen im Detail beschreibt. Weiterhin könnt ihr jederzeit in die einzelnen User Branches springen, um euch alle Anpassungen genau anzusehen.

Erweitertes Activity Log

Bei der Nutzung der Director Branches wird das Activity Log des Directors in zwei Teile aufgesplittet. Oben seht ihr jetzt nur noch die Änderungen innerhalb eines Branches. Im unteren Teil der Anzeige finden sich alle Einträge des Hauptbranches, welcher für das Deployment der Konfiguration genutzt wird. Außerdem ist jeder Eintrag im Activity Log mit einem Kommentar versehen.

Erzwungene Configuration Branches

Die Director Branches kommen mit unterschiedlichen Berechtigungen für Benutzer und Teams. Somit können die Nutzer:Innen genau die Services und Hosts bearbeiten, für die sie zuständig sind, ohne sich Sorgen machen zu müssen, ob dies ggf. Auswirkungen auf das komplette Deployment hat.

Verfügbarkeit des Moduls

Die Icinga Director Branches stehen in der Version 1.1 allen Icinga Supportvertrags- und Icinga Subscriptionkunden zur Verfügung. Falls ihr euch für einen Test für 60 Tage, einen Supportvertrag oder eine Icinga Subscription interessiert, fragt uns einfach! Weitere Informationen zu den Director Branches findet ihr in der Dokumentation.

Martin Krodel
Martin Krodel
Head of Sales

Der studierte Volljurist leitet bei NETWAYS die Sales Abteilung und berät unsere Kunden bei ihren Monitoring- und Hosting-Projekten. Privat reist er gerne durch die Weltgeschichte und widmet sich seinem ständig wachsenden Fuhrpark an Apple Hardware.

Modifier im Icinga-Director selbstgemacht

Ich bin sowohl als Consultant als auch als Ausbilder ein großer Fan von Hilfe zur Selbsthilfe. Der Blogpost wird also zum einen dem geneigten Leser hoffentlich helfen sich bei Bedarf seine eigenen Modifier für den Icinga-Director zu bauen, zum anderen will ich anhand des Beispiels auch beleuchten was ich so unter Hilfe zu Selbsthilfe verstehe. Daher will ich etwas weiter ausholen bevor der erste Code-Schnipsel kommt, wer also schon weiß was Modifier sind, wie man sie nutzt und warum man vielleicht Bedarf nach einem eigenen hat, darf gerne die Einleitung überspringen.

Modifier im Director ermöglichen es Daten aus der Import-Quelle anzupassen oder auch anzureichern, sprich es erlaubt der Monitoring-Administration auszubügeln was in der Datenquelle nicht passt oder auch einfach nicht für das geplante Regelwerk in Icinga 2 geeignet ist. Einfache Stringoperationen ermöglichen es bereits aus Hostnamen einen FQDN zu machen oder diesen aus möglicherweise getrenntem Hostnamen und Domäne zu kombinieren, komplexere Modifier machen beispielsweise einen DNS-Lookup um Icinga 2 zur Laufzeit vom DNS unabhängig zu machen. Bereits an den Beispielen sieht man hoffentlich, wie hilfreich diese Optionen sein können, und wenn damit dann Icinga 2 voll automatisiert mit Tausenden von Hosts befüllt wird, wird hoffentlich klar wie kritisch die Funktion ist. Nun gibt es natürlich trotzdem Bugs, einen hat Tom mit dem Release 1.9.1 gefixt und zwar dass bei Stringoperationen aus NULL-Werten ein leerer String wurde. Nachdem dieses Verhalten nun bereits länger so war, hat vielleicht der ein oder andere sich darauf verlassen, so dass es nun statt eines lang ersehnten Bug-Fix wie für mich, für diese Nutzer wie ein Bug erscheinen mag. Der Supportkunde der nun bei Patrick aufgeschlagen war, da dieser gerade wieder im Rahmen der Ausbildung das Operations-Team verstärkt, hatte zum Glück Verständnis für den Bug-Fix, aber trotzdem war nun sein Workflow kaputt. Als ein Beispiel wurde genannt, dass sie aktuell einen DNS-Lookup als Modifier nutzen, der gegebenenfalls wenn ein Name nicht auflösbar ist einen NULL-Wert zurückgibt, im nächsten Schritt wurde daraus ein leerer String und dann wurde der leere String durch einen regulären Ausdruck zum String „Unknown“. Von Patrick um eine kurze Einschätzung gebeten, sagte ich ihm er soll mal schauen ob der Modifier statt einem NULL-Wert direkt einen leeren String zurückgeben kann oder ein anderer Modifier genutzt werden kann um NULL-Werte zu befüllen. Nachdem diese Suche erfolglos geblieben war, hat er das Ticket in Richtung Icinga eskaliert, da das Kundenproblem nicht ohne Software-Änderung zu lösen war.

Nun hätten wir es darauf beruhen lassen können, da ich aber bei meinen Auszubildenden den Drang fördere, eine Lösung zu suchen statt das Problem nur jemand anders zuzuschieben und Patrick auch von Natur aus nicht zufrieden ist wenn er ungelöste Probleme vor sich hat, kam er erneut auf mich zu. Mit meiner Antwort, dass so ein Modifier in etwa 10 Minuten geschrieben sei, und dass er dies doch übernehmen könne, war er natürlich nicht ganz zufrieden bis ich ihm dafür meine Unterstützung angeboten habe. Da ich hier schon entsprechendes beigetragen habe, konnte ich ihm direkt sagen was zu tun ist und es kam dabei der Commit 4692b28 für den Director heraus. Dieser fügt einen Modifier hinzu der es erlaubt NULL-Werte direkt durch einen angegebenen String zu ersetzen, heißt der Kunde kann wieder seinen Workflow bauen und dieser dürfte sogar einfacher sein.

Modifier: Replace null value with String

Wenn man sich den Commit nun anschaut sind es nur zwei veränderte Dateien, zum einen der neu erstellte Modifier und zum anderen ist eine Registrierung notwendig. Der Modifier selbst besteht quasi aus einem Rumpf aus Namespace, verwendeten Klassen und seiner eigenen Klasse als Implementierung der Basisklasse sowie drei Funktionen in der Datei library/Director/PropertyModifier/PropertyModifierReplaceNull.php. Die Funktion getName() erlaubt es eine Beschreibung für das Auswahlfeld der Modifier zurückzugeben, addSettingsFormFields(QuickForm $form) erlaubt es zusätzliche, für den Modifier benötigte Eingabefelder zu definieren und transform($value) ist dann die eigentliche Modifikation, also bei einem NULL-Wert den eingegebenen String zurückzugeben ansonsten den ursprünglichen Wert. Entstanden ist das Ganze durch Kopieren und Anpassen eines ähnlichen Modifiers in 5 Minuten Arbeitszeit und 30 Minuten Erklärung.

<?php

namespace Icinga\Module\Director\PropertyModifier;

use Icinga\Module\Director\Hook\PropertyModifierHook;
use Icinga\Module\Director\Web\Form\QuickForm;

class PropertyModifierReplaceNull extends PropertyModifierHook
{

    public function getName()
    {
        return 'Replace null value with String';
    }

    public static function addSettingsFormFields(QuickForm $form)
    {
        $form->addElement('text', 'string', array(
            'label'       => 'Replacement String',
            'description' => $form->translate('Your replacement string'),
            'required'    => true,
        ));
    }

    public function transform($value)
    {
        if ($value === null) {
            return $this->getSetting('string');
        } else {
	    return $value;
	}  
    }
}

Zusätzlich muss der Modifier noch in register-hooks.php registriert werden, dazu benötigt es zwei Einträge. Zum einen muss der Modifier an sich bekannt gemacht werden und zum anderen dann noch als Umsetzung des Hook angeboten werden was der Director über eine Iteration durch ein mehrdimensionales Array löst, so dass der Modifier nur an entsprechender Stelle dem Array hinzugefügt werden muss. Dabei der Ordnung halber an die alphabetische Reihe gehalten und schon ist es auch hübsch. Dafür nehmen wir mal 1 Minute Arbeitszeit und 5 Minuten erklären an.

...
use Icinga\Module\Director\PropertyModifier\PropertyModifierReplaceNull;
...
        PropertyModifierReplaceNull::class,
...

Noch mal den Git-Workflow erklärt, den Commit in Patrick’s Fork gepusht, auf seinem Testsystem ausgecheckt, getestet und für gut befunden, Pull-Request erstellt, macht weitere 5 Minuten Arbeitszeit und 5 Minuten Erklärung, wobei ich mir diese hier spare und stattdessen auf einen älteren Blogpost verweise, den zusammen mit Kollegen geschrieben hatte. In Summe macht das in etwa eine Stunde aufgewandte Zeit, aber ich habe nun einen Auszubildenden, der beim nächsten Mal ein ähnliches Problem besser verstehen wird, es direkt lösen kann und als Bonus neben dem Erfolgserlebnis auch als Contributor beim Director auftaucht. Patrick hat sein Wissen erweitert, den Icinga-Kollegen Arbeit abgenommen und dem Kunden ohne lange Wartezeit eine Lösung geliefert, von der auch andere zukünftig profitieren werden. Beim nächsten Mal sind es dann vermutlich wirklich 10 Minuten Arbeit für Patrick! 😉

Was aber nun wenn man einen so speziellen Modifier benötigt, dass es keinen Sinn macht diesen dem Director und damit der Allgemeinheit zur Verfügung zu stellen? Durch den modularen Aufbau von Icinga Web 2 lassen sich Modifier als Hook auch aus einem eigenen Modul anbieten. Heißt wenn der Modifier speziell für eine bestimmte Import-Quelle benötigt wird, kann der Modifier im gleichen Modul eingebaut werden. Ist er dagegen nur für die eigene Umgebung relevant kann man ihn in ein separates Modul packen oder vielleicht mit in das Modul für das Theme des Unternehmens. Dafür müssten nur ein paar Kleinigkeiten angepasst werden. Der Modifier wäre dann im Modul an der Stelle library/MODULENAME/ProvidedHook/Director/PropertyModifier/ abzulegen, dementsprechend wäre der Namespace Icinga\Module\MODULENAME\ProvidedHook\Director\PropertyModifier und statt einer register-hooks.php erstellt man eine run.php mit folgendem Inhalt:

<?php

use Icinga\Module\MODULENAME\ProvidedHook\Director\PropertyModifier\PropertyModifierMODIFIERNAME;

$this->provideHook('director/PropertyModifier', PropertyModifierMODIFIERNAME::class);

Ich hoffe das Beispiel und die Erklärungen helfen demjenigen, der einen eigenen Modifier braucht, und ich konnte auch zeigen warum ich so ein großer Fan von Hilfe zur Selbsthilfe bin. Wer noch gar nichts mit den Import-Möglichkeiten des Directors anfangen kann, ist in der überarbeiteten Schulung Icinga 2 Advanced willkommen. Das Kapitel zu Import kommt aus meiner Feder und erklärt ausführlich und anhand von Übungen wie man Daten mittels SQL aus einer Datenbank importiert und mit dem Inhalt einer CSV-Datei ergänzt um Hosts anzulegen und aus einem LDAP-Verzeichnisdienst Benutzer und Gruppen zieht. Wer dagegen jemanden kennt, der ein bisschen Hilfe zur Selbsthilfe bekommen will, wir haben noch Ausbildungsplätze bei uns im Professional Services frei! Ich verspreche aber auch allen anderen Kollegen zu helfen, wenn sich jemand für eine der anderen Stellen interessiert! 😉

Das Beitragsbild kombiniert den Director von rones auf Openclipart mit dem Icinga-Logo.

Dirk Götz
Dirk Götz
Principal Consultant

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Puppet, Ansible, Foreman und andere Systems-Management-Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich wie nun bei NETWAYS.