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ötigt
  • perfdata - Erfasst Performance-Daten (z. B. Geschwindigkeit von HTTP-Requests) von überwachten Diensten, sofern vorhanden
  • command - 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:

  1. Auswahl der Authentifizierungsquelle (Datenbank bzw. LDAP)
  2. Auswahl und Konfiguration der Datenbank-Resource
  3. Erstellen eines Administrators
  4. Konfiguration des Loggings
  5. 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:

  1. Konfiguration der Datenbank
  2. Auswahl des Icinga2-Hosts und API-Benutzers

Anbei einige Screenshots meiner Installation:

Director setup

Nun fehlt nur noch eins: das Abbilden der eigenen Infrastruktur innerhalb Icinga2 - beispielsweise mit dem Icinga Director! 🙂

Übersetzungen: