Icinga2, Icinga Web 2 und Icinga Director unter EL7 installieren
Mit Icinga2 gibt es ein sehr leistungsfähiges Monitoring-System, welches optional auch mit der taufrischen Web-Oberfläche Icinga Web 2 benutzt werden kann. Gegenüber Icinga 1.x handelt es sich hier jeweils um komplette Neuentwicklungen, die nichts mehr mit dem veralteten Software-Kern zu tun haben.
Dieses Jahr wurde mit Icinga Director ein Konfigurationswerkzeug für Icinga2 vorgestellt. Es kann dazu verwendet werden, den gesamten Icinga2-Stack zu konfigurieren. Auch eine Integration in Configuration Management- und CMDB-Systeme ist möglich.
Dieser Artikel beschreibt die Grundinstallation eines Icinga2-Systems mit der Icinga Web 2-Oberfläche und dem zusätzlichen Icinga Director-Modul.
Installation
LVM-Vorbereitung
Ich persönlich lege die Daten der MySQL-Datenbank gerne in Kombination mit LVM auf eine dedizierte Festplatte. Die folgenden Befehle lagern das Verzeichnis /var/lib/mysql
entsprechend aus:
1# pvcreate /dev/sdb
2# vgcreate vg_data /dev/sdb
3# lvcreate --name lv_mariadb --size 9G vg_data
4# mkfs.ext4 /dev/mapper/vg_data-lv_mariadb
5# vi /etc/fstab
6...
7/dev/mapper/vg_data-lv_mariadb /var/lib/mysql ext4 defaults 1 2
8
9ESC ZZ
10
11# mkdir /var/lib/mysql ; mount -a
12# restorecon -v /var/lib/mysql
13restorecon reset /var/lib/mysql context system_u:object_r:unlabeled_t:s0->system_u:object_r:mysqld_db_t:s0
Paket-Installation
Die Installation der benötigten Pakete erfolgt mit YUM - zuvor muss noch das EPEL-Repository eingebunden werden:
1# yum install icinga{,web}2 icinga2-ido-mysql mariadb-server mysql nagios-plugins-all icingacli php-ldap
Datenbank
Anschließend werden der Apache-Webserver und die MariaDB-Datenbank für Autostart konfiguriert und gestartet. Bei dieser Gelegenheit empfiehlt es sich auch, mittels mysql_secure_installation
ein Root-Passwort für die Datenbank zu vergeben und nicht benötigte Testdaten zu entfernen:
1# systemctl enable httpd; systemctl start httpd
2# systemctl enable mariadb ; systemctl start mariadb
3# mysql_secure_installation
4Set root password? [Y/n] Y
5Remove anonymous users? [Y/n] Y
6Disallow root login remotely? [Y/n] Y
7Remove test database and access to it? [Y/n] Y
8Reload privilege tables now? [Y/n] Y
Anschließend werden dedizierte Datenbanken für Icinga und die Benutzerauthentifizierung erstellt:
1# mysql -u root -p
2mysql> CREATE DATABASE `icinga`;
3mysql> CREATE DATABASE `icinga-auth`;
4mysql> GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON `icinga`.* TO 'icinga'@'localhost' IDENTIFIED BY '...';
5mysql> GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON `icinga-auth`.* TO 'icinga'@'localhost' IDENTIFIED BY '...';
6mysql> FLUSH PRIVILEGES;
Danach wird die Icinga-Datenbank mit dem benötigten Schema versehen:
1# mysql -u root -p icinga < /usr/share/icinga2-ido-mysql/schema/mysql.sql
Features
Icinga2 ist modular aufgebaut und lagert Funktionalitäten in Feature-Modulen aus - diese lassen sich gesondert aktivieren. Zur Steuerung dieses Verhaltens dient das folgende Kommando:
1# icinga2 feature list
2Disabled features: command compatlog debuglog gelf graphite icingastatus ido-mysql livestatus opentsdb perfdata statusdata syslog
3Enabled features: api checker mainlog notification
Das Kommando listet verfügbare und aktivierte Features auf. Von den verfügbaren Features aktivieren wir:
ido-mysql
- MySQL-Datenbank-Broker, speichert Status-Informationen in Datenbank; wird für Icinga Web 2 benötigtperfdata
- Erfasst Performance-Daten (z. B. Geschwindigkeit von HTTP-Requests) von überwachten Diensten, sofern vorhandencommand
- ermöglicht externe Kommandos, für die altbekannten Nagios-Plugins benötigt
Nach Aktivierung von Features muss Icinga2 prinzipiell neu gestartet werden.
1# icinga2 feature enable ido-mysql
2# icinga2 feature enable perfdata
3# icinga2 feature enable command
Bevor Icinga2 nun zum ersten Mal gestartet wird, wird die Konfiguration des IDO-Brokers angepasst. Es werden die Benutzerinformationen der Icinga-Datenbank angegeben:
1# vi /etc/icinga2/features-available/ido-mysql.conf
2library "db_ido_mysql"
3
4object IdoMysqlConnection "ido-mysql" {
5 user = "icinga"
6 password = "xxx"
7 host = "localhost"
8 database = "icinga"
9}
Noch ein Punkt zur Übersichtlichkeit - ich habe es mir angewöhnt, für eigene Konfigurationen eigene Unterordner zu pflegen. Icinga2 legt sämtliche Konfigurationsdateien unterhalb /etc/icinga2/conf.d
ab. Bei größeren Installationen kann es durchaus Sinn machen, seine eigenen Hosts/Checks/Kommandos in einem eigenen Ordner zusammenzufassen - dieser muss dann allerdings dem Icinga-Benutzer gehören, damit sie eingelesen werden können:
1# mkdir /etc/icinga2/conf.d/stankowic.d
2# chown icinga: /etc/icinga2/conf.d/stankowic.d
Anschließend kann Icinga2 gestartet und für Autostart konfiguriert werden:
1# systemctl enable icinga2 ; systemctl start icinga2
Sofern SELinux zum Einsatz kommt, empfiehlt es sich die entsprechenden Module zu erstellen und einzubinden:
1# yum install icinga2-selinux selinux-policy-devel
2# /usr/share/doc/icinga2-selinux-*/icinga2.sh
Icinga Web 2
Bevor Icinga Web 2 installiert werden kann, muss in der PHP-Konfiguration die Zeitzone eingetragen werden, beispielsweise für Deutschland:
1# cp /etc/php.ini /etc/php.ini.initial
2# vi +/date.timezone /etc/php.ini
3...
4date.timezone = Europe/Berlin
5
6ESC ZZ
7
8# systemctl restart httpd
Anschließend muss ein SELinux-Flag aktiviert und der Apache-Benutzer der icingacmd
-Gruppe hinzugefügt werden, damit Icinga2 ferngesteuert werden kann:
1# setsebool -P httpd_unified 1
2# usermod -a -G icingacmd apache
Um die Installation zu starten, muss ein Installationstoken erstellt werden. Dieses wird im Installationsassistenten eingegeben. Der Assistent ist über die URL http://meinServer/icingaweb2/setup erreichbar:
1# icingacli setup config directory --group icingaweb2
2# icingacli setup token create
3The newly generated setup token is: 95f454f8bde828a3
Der Installationsassistent ist weitestgehend selbsterklärend und führt die folgenden Schritte aus:
- Auswahl der Authentifizierungsquelle (Datenbank bzw. LDAP)
- Auswahl und Konfiguration der Datenbank-Resource
- Erstellen eines Administrators
- Konfiguration des Loggings
- Konfigurieren des IDO-Brokers
Anbei einige Screenshots meiner Installation:
Icinga Director
Der Icinga Director steht auf GitHub zum Download bereit. Der Quellcode wird unterhalb des Verzeichnisses /usr/share/icingaweb2/modules
entpackt. Wichtig ist, dass der Ordnername des heruntergeladenen Archivs auf director
geändert wird - ansonsten funktioniert das Modul nicht:
1# cd /usr/share/icingaweb2/modules
2# wget https://github.com/Icinga/icingaweb2-module-director/archive/master.zip
3# unzip master.zip
4# mv icingaweb2-module-director-master director
5# restorecon -R director
Vor Inbetriebnahme des Moduls, wird eine dedizierte Datenbank inklusive Benutzer angelegt. Ein entsprechendes Datenbank-Schema muss noch importiert werden:
1# mysql -u root -p
2mysql> CREATE DATABASE director CHARACTER SET 'utf8';
3mysql> GRANT ALL ON director.* TO 'director'@'localhost' IDENTIFIED BY '...';
4mysql> FLUSH PRIVILEGES;
5# mysql -u root -p director < /usr/share/icingaweb2/modules/director/schema/mysql.sql
Icinga Director verwendet die Icinga2 API-Feature, welches noch aktiviert werden muss. Hierbei werden Zertifikate erstellt, mit welchem sich externe Anwendungen, wie der Icinga Director, an einer Icinga2-Instanz anmelden:
1# setsebool -P httpd_can_network_connect 1
2# icinga2 api setup
Für den Director gilt es einen API-Benutzer mit vollen Berechtigungen anzulegen, da dieser auch die Konfiguration des Dienstes anpassen können muss (wir erinnern uns, der Director dient zur vollständigen Konfiguration von Icinga2):
1# vi /etc/icinga2/conf.d/api-users.conf
2...
3object ApiUser "director" {
4 password = "xxx"
5 permissions = [ "*" ]
6}
7
8ESC ZZ
Anschließend muss in der Firewall der TCP-Port 5665 freigeschaltet und Icinga2 neu gestartet werden:
1# system-config-firewall-tui
2# systemctl restart icinga2
Innerhalb der Web-Oberfläche von Icinga2 kann nun das Modul aktiviert werden - dazu genügen im linken Menü Klicks auf Konfiguration > Module > director > aktivieren.
Anschließend wird im gleichen Menü per Klick auf Icinga-Director ein Installationsassistent gestartet. Dieser ist weitestgehend selbsterklärend und führt die folgenden Schritte aus:
- Konfiguration der Datenbank
- Auswahl des Icinga2-Hosts und API-Benutzers
Anbei einige Screenshots meiner Installation:
Nun fehlt nur noch eins: das Abbilden der eigenen Infrastruktur innerhalb Icinga2 - beispielsweise mit dem Icinga Director! 🙂