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:

# pvcreate /dev/sdb
# vgcreate vg_data /dev/sdb
# lvcreate --name lv_mariadb --size 9G vg_data
# mkfs.ext4 /dev/mapper/vg_data-lv_mariadb
# vi /etc/fstab
...
/dev/mapper/vg_data-lv_mariadb /var/lib/mysql   ext4   defaults   1 2

ESC ZZ

# mkdir /var/lib/mysql ; mount -a
# restorecon -v /var/lib/mysql
restorecon 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:

# 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:

# systemctl enable httpd; systemctl start httpd
# systemctl enable mariadb ; systemctl start mariadb
# mysql_secure_installation
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Anschließend werden dedizierte Datenbanken für Icinga und die Benutzerauthentifizierung erstellt:

# mysql -u root -p
mysql> CREATE DATABASE `icinga`;
mysql> CREATE DATABASE `icinga-auth`;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON `icinga`.* TO 'icinga'@'localhost' IDENTIFIED BY '...';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON `icinga-auth`.* TO 'icinga'@'localhost' IDENTIFIED BY '...';
mysql> FLUSH PRIVILEGES;

Danach wird die Icinga-Datenbank mit dem benötigten Schema versehen:

# 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:

# icinga2 feature list
Disabled features: command compatlog debuglog gelf graphite icingastatus ido-mysql livestatus opentsdb perfdata statusdata syslog
Enabled 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.

# icinga2 feature enable ido-mysql
# icinga2 feature enable perfdata
# 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:

# vi /etc/icinga2/features-available/ido-mysql.conf
library "db_ido_mysql"

object IdoMysqlConnection "ido-mysql" {
  user = "icinga"
  password = "xxx"
  host = "localhost"
  database = "icinga"
}

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:

# mkdir /etc/icinga2/conf.d/stankowic.d
# chown icinga: /etc/icinga2/conf.d/stankowic.d

Anschließend kann Icinga2 gestartet und für Autostart konfiguriert werden:

# systemctl enable icinga2 ; systemctl start icinga2

Sofern SELinux zum Einsatz kommt, empfiehlt es sich die entsprechenden Module zu erstellen und einzubinden:

# yum install icinga2-selinux selinux-policy-devel
# /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:

# cp /etc/php.ini /etc/php.ini.initial
# vi +/date.timezone /etc/php.ini
...
date.timezone = Europe/Berlin

ESC ZZ
# 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:

# setsebool -P httpd_unified 1
# 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:

# icingacli setup config directory --group icingaweb2
# icingacli setup token create
The 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:

# cd /usr/share/icingaweb2/modules
# wget https://github.com/Icinga/icingaweb2-module-director/archive/master.zip
# unzip master.zip
# mv icingaweb2-module-director-master director
# restorecon -R director

Vor Inbetriebnahme des Moduls, wird eine dedizierte Datenbank inklusive Benutzer angelegt. Ein entsprechendes Datenbank-Schema muss noch importiert werden:

# mysql -u root -p
mysql> CREATE DATABASE director CHARACTER SET 'utf8';
mysql> GRANT ALL ON director.* TO 'director'@'localhost' IDENTIFIED BY '...';
mysql> FLUSH PRIVILEGES;
# 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:

# setsebool -P httpd_can_network_connect 1
# 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):

# vi /etc/icinga2/conf.d/api-users.conf
...
object ApiUser "director" {
        password = "xxx"
        permissions = [ "*" ]
}

ESC ZZ

Anschließend muss in der Firewall der TCP-Port 5665 freigeschaltet und Icinga2 neu gestartet werden:

# system-config-firewall-tui
# 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

Director setup

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

Sharing is caring


Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInShare on XingShare on RedditPrint this pageEmail this to someone

15 Kommentare Schreibe einen Kommentar

  1. Hallo Christian,
    bin zufällig darauf gestossen. Muss aber sagen der director ist noch sehr bug überseht und alles funktioniert auch nicht über ihn. Bis der ausgereift ist, würde ich immer eine Konfiguration über die shell empfehlen, da man sonnst schnell graue haare bekommt – außer ich natürlich 🙂
    Gruß
    Thomas

    • Hey Thomas!
      Das stimmt – der Director ist noch sehr jung, wurde ja erst vor Kurzem veröffentlicht. Ich schaue mir den aktuell erstmal in meinem Homelab an – denke nicht, dass ich das gleich in der Produktion ausrolle. 😀

      Beste Grüße,
      Christian!

  2. Pingback: Stankowic development – Simpler CMDB-Import mit Icinga Director

  3. You left out a part about creating the Resource of the Icinga Director…. other than that, you have a solid write-up, helped me out!

    • Hey!
      Thanks for the feedback – happy to hear, that the post helped you.

      Which resource do you mean? I’d love to add this to the post.

      Best wishes,
      Christian!

      • In the GUI, I went to Configuration -> Application -> Resources -> (Create New DB Resource) . In this screen, I had to enter the following fields:
        Resource Type: SQL Database
        Resource Name: Director DB
        Database Type: MySql
        Host: localhost
        Port: 3306
        Database Name: director
        Username: director
        Password: ******* . (whatever you set the DB Password to)
        Character Set: utf8

        Validate Configuration
        Save Changes

  4. The one thing you left out was, how do we define the endpoint name? When I ran ‚icinga2 api setup‘ I was not prompted to enter anything for the name. Are you using your host’s fqdn as your endpoint name?

    • Hey Matthew,
      good point! I was using my host’s FQDN as endpoint name which was a suggesstion in my case. Should be the same for other installations if you have working DNS (forward and reverse lookups).

      Best wishes,
      Christian!

  5. I am missing a part when running # mv icingaweb2-modules-director-master director
    No such file or directory ;). the rest was helpful. thanxs
    Oscar

  6. Hi

    Can anyone pls help me with in details step how to add hosts via icinga2 director ?

    How can i edit the configuration file for client deployed by icinga2 director

Schreibe einen Kommentar