Wie Icinga2 auf einem Centos 7 installiert wird wurde bereits hier beschrieben: Installation von Icinga2 auf Centos 7
Mit Icinga Web 2 hat der Benutzer die Möglichkeit Downtimes, Acknowledgments, Kommentare zu setzen oder auch die Anweisung bestimmte Checks sofort auszuführen zu senden. In früheren Versionen wurden diese Informationen über einen Unix-Socket gesendet, was seit Icinga Web 2 Version 2.4 veraltet ist.
Nun werden alle Kommandos von Icinga Web 2 an den API-Port von Icinga 2 gesendet, standardmäßig ist das der TCP-Port 5665.
Aktivieren der API-Schnittstelle
Zuerst überprüfen wir ob das Feature api aktiviert ist:
$ icinga2 feature list
Disabled features: api command compatlog debuglog elasticsearch gelf graphite influxdb livestatus opentsdb perfdata statusdata syslog
Enabled features: checker ido-mysql mainlog notification
Sofern dies wie hier gezeigt nicht der Fall sein sollte, aktivieren wir es wie folgt:
$ icinga2 feature enable api
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
Bevor wir Icinga2 reloaden lassen wir noch die benötigten Zertifikate für die API-Schnittstelle erstellen:
$ icinga2 api setup
information/cli: Generating new CA.
information/base: Writing private key to '/var/lib/icinga2/ca//ca.key'.
information/base: Writing X509 certificate to '/var/lib/icinga2/ca//ca.crt'.
information/cli: Generating new CSR in '/var/lib/icinga2/certs//centos02.csr'.
information/base: Writing private key to '/var/lib/icinga2/certs//centos02.key'.
information/base: Writing certificate signing request to '/var/lib/icinga2/certs//centos02.csr'.
information/cli: Signing CSR with CA and writing certificate to '/var/lib/icinga2/certs//centos02.crt'.
information/pki: Writing certificate to file '/var/lib/icinga2/certs//centos02.crt'.
information/cli: Copying CA certificate to '/var/lib/icinga2/certs//ca.crt'.
information/cli: Adding new ApiUser 'root' in '/etc/icinga2/conf.d/api-users.conf'.
information/cli: Enabling the 'api' feature.
warning/cli: Feature 'api' already enabled.
information/cli: Updating 'NodeName' constant in '/etc/icinga2/constants.conf'.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating 'ZoneName' constant in '/etc/icinga2/constants.conf'.
information/cli: Backup file '/etc/icinga2/constants.conf.orig' already exists. Skipping backup.
Done.
Now restart your Icinga 2 daemon to finish the installation!
centos02 ist hierbei der Hostname meines Systems.
Der Befehl icinga2 api setup
schreibt, neben dem erstellen der Zertifikate, das object root mit einem zufällig generierten Passwort in die API-Konfigurationsdatei /etc/icinga2/conf.d/api-users.conf
.
Diese sieht nun ungefähr wie folgt aus:
/**
* The APIUser objects are used for authentication against the API.
*/
object ApiUser "root" {
password = "a5a19965d3c3cde6"
// client_cn = ""
permissions = [ "*" ]
}
Konfigurieren der API-Schnittstelle
Nun legen wir in dieser Datei einen Benutzer für Icinga Web 2 an, diesen nennen wir der Übersicht halber icingaweb2.
Dies geschieht, indem wir ein neues object ApiUser anlegen, ein Passwort festlegen und die gewünschten Rechte vergeben.
Der Inhalt der Datei /etc/icinga2/conf.d/api-users.conf
sollte nun wie folgt aussehen:
/**
* The APIUser objects are used for authentication against the API.
*/
object ApiUser "root" {
password = "a5a19965d3c3cde6"
// client_cn = ""
permissions = [ "*" ]
}
object ApiUser "icingaweb2" {
password = "AhRai7vaihun9Ei"
permissions = [
"status/query",
"actions/*",
"objects/modify/*",
"objects/query/*",
]
}
Nun reloaden wir icinga2 per systemctl reload icinga2.service
Installation von Icinga Web 2
Bei dem von mir verwendeten CentOS Linux release 7.5.1804 ist PHP nur in Version 5.4.16 verfügbar, darum installieren wir noch die Repos der „Software Collection for Linux“ um PHP in der Verion 7.1 instzallieren zu können.
yum install -y centos-release-scl
Wenn die Installation der Pakete per yum install httpd icingaweb2 icingacli
erfolgt, werden auch automatisch die entsprechenden PHP-Paket mit installiert. Um auch auf dem Terminal Befehle ausführen zu können wird das Paket icingacli
gleich mit installiert.
Des weiteren werden auch die passenden PHP-Extensions für MySQL und Postgres mit installiert.
Bei PHP muss noch in der Konfigurationsdatei /etc/opt/rh/rh-php71/php.ini
die Option date.timezone
aktiviert und mit einem entsprechenden Parameter versehen werden, z.B.: date.timezone = Europe/Berlin
Jetzt starten wir sowohl den Webserver als auch den PHP-FPM-Dienst und sorgen dafür das diese auch nach einem Neustart wieder gestartet werden.
systemctl start httpd.service && systemctl enable httpd.service
systemctl start rh-php71-php-fpm.service && systemctl enable rh-php71-php-fpm.service
Den Assistenten zur Einrichtung findet man nun unter http://<IP/Domain des Systems>/icingaweb2/setup
Dort finden sich auch noch weitere Hinweise, z.B. das eine Gruppe icingaweb2 angelegt werden muss und diese zur Gruppe apache hinzugefügt wird.
groupadd -r icingaweb2;
usermod -a -G icingaweb2 apache;
Um mit der Einrichtung dann zu beginnen, sollte per icingacli setup config directory --group icingaweb2;
ein Verzeichnis für die Konfiguration angelegt werden und per icingacli setup token create;
im Terminal ein Token zur Verifikation erzeugt werden.
$ icingacli setup token create;
The newly generated setup token is: 51b4909858c05496
Wenn dieser generierte Token in das entsprechende Feld eingetragen wurde und man auf Weiter klickt kommt man zur Auswahl der Module. Hier kann man sich aussuchen ob man die Dokumentation und die Übersetzungen mit verwenden will.
Nach einem weitern Klick auf Weiter findet man eine Übersicht der benötigten Einstellungen. Die Kacheln sollten mindestens Gelb sein und im Idealfall Grün.
Troubleshooting
- Das PHP-Modul Imagick fehlt.
Hier muss man die enstprechende PHP-Extension installieren:
yum install -y sclo-php71-php-pecl-imagick
und anschliessend PHP-FPM neu starten
systemctl restart rh-php71-php-fpm.service
- Das Verzeichnis /etc/icingaweb2 ist nicht beschreibbar.
Ursache: Dies ist der Fall sofern SELinux aktiv ist und zeigt sich durch entsprechende Logeinträge in der /var/log/audit/audit.log
, die wie folgt aussehen:
type=AVC msg=audit(1533649582.056:769): avc: denied { write } for pid=8313 comm="php-fpm" name="icingaweb2" dev="dm-0" ino=52899199 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:etc_t:s0 tclass=dir
Genauere Informationen finden sich per:
$ audit2allow -w -a
type=AVC msg=audit(1533812740.498:908): avc: denied { write } for pid=29900 comm="php-fpm" name="icingaweb2" dev="dm-0" ino=9042890 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:etc_t:s0 tclass=dir
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
oder etwas kürzer:
$ audit2allow -a
#============= httpd_t ==============
#!!!! WARNING: 'etc_t' is a base type.
allow httpd_t etc_t:dir write;
#============= icinga2_t ==============
allow icinga2_t sysfs_t:dir read;
Lösung:
- SELinux deaktivieren (nicht zu empfehlen)
- sofern das Paket icinga2-selinux installiert wurde, kann man per
audit2allow
ein entsprechendes Policy Package erstellen und anschließend aktivieren:
$ audit2allow -a -M icingaweb2
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i icingaweb2.pp
$ semodule -i icingaweb2.pp
Nun sollte nach einem Klick auf Refresh (ganz unten auf der Seite) auch diese Kachel Grün sein (Das Verzeichnis /etc/icingaweb2 ist lesbar und beschreibbar.)
Somit sollten alle Systemvoraussetzungen erfüllt sein.
weitere Konfiguration
Im nächsten Fenster Authentifizierung legt man fest wie die Zugriffe auf Icinga Web 2 authentifiziert werden sollen. Der Standard ist hierbei Datenbank.
Nach Auswahl von Datenbank ist das nächste Fenster Datenbank-Ressource.
Der Datenbaktyp richtet sich nach dem Installierten Backend (MySQL oder Postgres). Sofern die Angabe des Ports leer gelassen wird, wird der Standard verwendet. Das glreiche gilt auch für den Zeichensatz.
Ansonsten legt man hier einen DB-Benutzer an mit Benutzername, Passwort und Name der zu erstellenden Datenbank.
Anmerkung: MySQL erlaubt es, dass man sich per root anmelden darf dun damit die Berechtigung erhält eine Datenbank zu erstellen. Ausnahme ist allerdings Debian 9. Hierfür muss die Datenbank per Hand angelegt werden. Gleiches gilt für eine Datenbank welche auf einem anderen Server liegt.
Anschliessend gibt man die Zugangsdaten des administrativen Benutzers ein dun klickt wieder auf Weiter.
Im nächsten Schritt gibt man einen Namen für das Authentifizierungs-Backend an.
Bevor die abschließende Konfiguration erfolgt muss noch der Administrator-Zugang zum Icinga Web 2 erstellt werden.
Hierbei vergibt man einen entsprechenden Benutzernamen und Passwort.
Auf der nächsten Seite Konfiguration der Anwendung legt man noch die Einstellungen für das Logging fest.
Anschließend wird dann die Zusammenfassung der letzten Schritte angezeigt.
Konfiguration des Icinga Web 2 Monitoring Moduls
Im ersten Schritt konfiguriert man wie Icinga Web 2 Monitoringinformation abrufen soll.
Da wir bei dieser Installation das entsprechende mysql-ido-Paket (Icinga Data Out) installiert haben, wird dieses nun noch für das Monitoringmodul konfiguriert werden.
Hierfür benötigt man die Zugangsdaten, wie man sie in /etc/icinga2/features-enabled/ido-mysql.conf
eingetragen hat.
Nun geht es um den Befehls-Transport, also die Schnittstelle, mit der Icinga Web 2 vom Benutzer angestoßene Kommandos an den Icinga2-Core weitergibt.
Die Zugangsdaten wurden in der Konfigurationsdatei /etc/icinga2/conf.d/api-users.conf
ja bereits hinterlegt.
In der letzten Eingabemaske des Assistenten wird angegeben , welche Werte zu welchen Icinga-Attributen nicht im Webinterface angezeigt werden, weil sie z.B. Passwörter enthalten.
Auch hier wird nach Abschluss der Konfiguration eine entsprechende Zusammenfassung angezeigt.
Damit ist die Einrichtung abgeschlossen und man kann sich mit den vergebenen Zugangsdaten unter http://<IP/Domain>/icingaweb2
anmelden.