icinga2 mit icinga web 2

Das heutige Ziel ist eine Monitoring-Umgebung basierend auf icinga2 und icinga web 2. Die Plattform ist wie so oft Ubuntu LTS in Version 16.04. Im Gegensatz zum Standard-Webserver Apache, verwenden wir wieder Nginx mit PHP7 und MariaDB

icinga2: Logo

1. Icinga2

Zu Icinga 2 gibt es viel und nichts zu erzählen. Als Nagios Clone ins Leben gerufen löst es immer mehr Nagios Installationen und Monitoring-Umgebungen ab. dabei gibt es wie so häufig in komplexen Umgebungen auch den ein oder anderen Stolperstein. Viel, viel mehr und bessere Informationen findet man auf der offiziellen Webseite.

1.1 Package Repository PPA

Die Einbindung der PPA (offiziell vorgeschlagenes Vorgehen).

→ sudo add-apt-repository ppa:formorer/icinga
→ sudo apt update

 

1.2 Installation Icinga2

Bekanntermaßen unter Ubuntu hilft apt weiter.

→ apt install icinga2

Durch die Standardinstallation werden drei Funktionen aktiviert, die durch → icinga2 feature list nachträglich verifiziert werden können. Ansonsten gibt der Installationsablauf Aufschluss:

enabling default icinga2 features
Enabling feature checker. Make sure to restart Icinga 2 
 for these changes to take effect.
Enabling feature notification. Make sure to restart Icinga 2 
 for these changes to take effect.
Enabling feature mainlog. Make sure to restart Icinga 2 
 for these changes to take effect.

 

1.3 Check Plugins aufsetzen

Ohne Plugins sind keine externen Service Checks durchführbar. Nachfolgender Befehl installiert diese und befriedigt alle Abhängigkeiten.

→ apt install nagios-plugins

 

1.4 Icinga2 nutzen

Die Installation ist abgeschlossen, die Konfiguration folgt der Bedienung. Ubuntu 16.04 LTS verwendete systemd und in Verbindung mit icinga2 stehen die Kommandos start, stop, restart, reload, status und enable zur Verfügung.

→ systemctl icinga2 status
→ systemctl enable icinga2
icinga2.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install enable icinga2

→ systemctl restart icinga2

 

2. Icinga Web 2

2.1 Datenbank

Mit dem DB IDO (Database Icinga Data Output) werden Konfigurationen und Statusinformationen in MariaDB geschrieben. Neben der Installation der Datenbank selbst wird icinga2-ido-mysql installiert

→ apt install icinga2-ido-mysql

Unter Ubuntu 16.04 kann dbconfig-common die Installation, in eine neu zu erstellende Datenbank icinga2 übernehmen. Wer das nicht möchte folgt der offiziellen Anleitung.

IDO MySQL Modul aktivieren

→ icinga2 feature enable ido-mysql
Enabling feature ido-mysql. Make sure to restart Icinga 2 for 
these changes to take effect.

 

2.2 Webserver

Icinga Web 2 benötigt einen Webserver und PHP. Nachfolgend beschränke ich mich auf die Konfiguration. Einrichtung ist hier kein Thema. Zu beachten ist, dass die Domains, evtl. auch die Pfade sowie verwendete Namen vor der Übernahme angepasst werden (z.B. monitoring.domain.tld).

2.2.1 Nginx

# monitoring.domain.tld

# PHP 7.0 Socket for this server
# =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
upstream php_monitoring_domain_tld {
    # This socket, and therefore the behaviour of PHP is controlled, 
    # maintained and modified in 
    # /etc/php/7.0/fpm/pool.d/monitoring.domain.tld.conf
    server unix:/run/php/php7.0-fpm.monitoring_domain_tld.sock; 
}

# 80 -> 443
# =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
server {
    listen 80;
    listen [::]:80;
    server_name monitoring.domain.tld;
    # Umleitung
    return 301 https://$server_name$request_uri;
}

server {
	
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name monitoring.domain.tld icinga.domain.tld;

    # SSL 
    include snippets/ssl-__params.conf;
    include snippets/ssl-_monitoring.domain.tld.conf;

    root /usr/share/icingaweb2/public;
    index index.php;

    location = /favicon.ico {
 	log_not_found off;
 	access_log off;
 	expires max;
    }
 
    location = /robots.txt {
	 allow all;
	 log_not_found off;
	access_log off;
    }
 
    location ~ /\. {
	deny all;
	access_log off;
	log_not_found off;
    }
 
    location ~ \..*/.*\.php$ {
	return 403;
    }
  
    if (!-d $request_filename) {
	rewrite ^/(.+)/$ /$1 permanent;
    }
 
    location / {
	try_files $1 $uri $uri/ /index.php$is_args$args;
    }
 
    location ~ ^/index\.php(.*)$ {
	fastcgi_index index.php;
	include /etc/nginx/fastcgi_params;
	try_files $uri =404;
	fastcgi_split_path_info ^(.+\.php)(/.+)$;
	fastcgi_pass php_monitoring_domain_tld;
	fastcgi_param SCRIPT_FILENAME /usr/share/icingaweb2/public/index.php;
	fastcgi_param ICINGAWEB_CONFIGDIR /etc/icingaweb2;
	fastcgi_param REMOTE_USER $remote_user;
    }

}

 

Die SSL Einstellungen sind hier separiert in den verlinkten Dateien. Der Inhalt der snippets/ssl-__params.conf gilt hier prinzipiell für alle virtuellen Hosts.

# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Die Einstellungen der snippets/ssl-_monitoring.domain.tld.conf hingegen sind spezifisch. Hier befinden sich die Pfade zu den Zertifikaten die in 2.2.3 angelegt werden. Hier vorgegriffen dargestellt. Unter Verwendung von Certbot werden diese Zertifikate auch tatsächlich hier zu finden sein. Die Domains entsprechend angepasst.

ssl_certificate /etc/letsencrypt/live/monitoring.domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/monitoring.domain.tld/privkey.pem;

 

Abschließend kann mit nginx -t ein Syntax-Check der Nginx-Konfiguration durchgeführt werden. Im Anschluß wird der Dienst neu gestartet

systemctl restart nginx

 

2.2.2 PHP

Die Integration von PHP (V7) erfolgt mittels PHP-FPM. Auch hier ist die Installation von PHP und grundlegende Konfiguration kein Bestandteil. Wichtig ist, das die Angaben (Socket, Pfad und Name) aus der Nginx Konfiguration mit denen von PHP übereinstimmen. Die Datei liegt wie im Kommentar der Nginx-Konfiguration zu entnehmen im Verzeichnis /etc/php/7.0/fpm/pool.d/. Die Dateiendung ist *.conf.

[php_monitor_domain_tld]

user = www-data
group = www-data

listen = /run/php/php7.0-fpm.monitoring_domain_tld.sock
listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
env[PATH] = /usr/local/bin:/usr/bin:/bin

php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.monitor_domain_tld.log
;php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 128M
php_admin_value[cgi.fix_pathinfo] = 1

Anpassungen an der Konfiguration sind mit einem Service-Neustart verbunden:

→ systemctl restart php7.0-fpm

 

2.2.3 Certbot – Let’s encrypt

Wenn die Konfiguration von Nginx steht, kann für die Generierung der Zertifikate folgender Befehl verwendet werden. Die einzelnen Parameter sind dabei u.a. von den Domains und dem Betriebssystem abhängig. Jeder Domain für die das SSL-Zertifikat verwendet werden soll, wird mit vorangestelltem -d hinzugefügt. Der Befehl innerhalb der Schalter –pre-hook und –post-hook hängt com Betriebssystem ab. Weitere Informationen stehen in einem eigenen Tutorial zur Verfügung.

→ certbot-auto certonly --standalone -d monitoring.domain.tld -d icinga.domain.tld --pre-hook "systemctl stop
nginx" --post-hook "systemctl start nginx"

 

2.2.4 External Command Pipe

Als weitere Vorbereitung ist das Aktivieren der External Command Pipe notwendig (falls nicht bereits geschehen). Dadurch kann das Icinga Web Interface (oder auch andere Addons) Kommandos an Icinga senden.

→ icinga2 feature enable command
→ systemctl restart icinga2
→ usermod -a -G nagios www-data

2.3 Icinga Web 2 installieren

Die Installation über apt install icingaweb2 installiert u.a. Apache als Webserver, was in diesem Setup nicht erwünscht ist. Daher nutzen wir das GIT-Repo für die Installation (offizielle Dokumentation)

→ cd /usr/share
→ git clone git://git.icinga.org/icingaweb2.git
→ apt install php-intl php-imagick php-zend-code 
  php-zend-db

Die Webserver-Konfiguration kann zu diesem Zeitpunkt auch generiert werden:

→ ./bin/icingacli setup config webserver nginx \
 --document-root /usr/share/icingaweb2/public

 

2.3.1 Weitere Maßnahmen

2.3.1.1 Erstellen der Systemgruppe icingaweb2
→ addgroup --system icingaweb2

 

2.3.1.2 Benutzer anlegen
→ usermod -a -G icingaweb2 www-data
→ systemctl restart nginx

Mit diesem Schritt kommen wir der Nutzung der Web-GUI schon greifbar nahe:

icinga2: Icinga Web 2 w/o Auth

2.3.1.3 Icinga Web 2 Konfiguration schreiben

Immer noch im Verzeichnis /usr/share/icingaweb2 wird die Konfiguration nach /etc/icingaweb2 geschrieben.

./bin/icingacli setup config directory --group www-data

 

2.3.1.4 Authentifizierung erstellen
./bin/icingacli setup token create
The newly generated setup token is: 5852315fa87sgifga97c

Damit kann an der GUI die Einrichtung begonnen werden.

2.4 Icinga Web 2 Setup

Die Einrichtung erfolgt im Browser unter http(s)://monitor.domain.tld/setup (oder /icingaweb2/setup). Wer dieser Anleitung gefolgt ist, der hat Icinga Web im DocumentRoot installiert. Die Schritte zur Einrichtung ergeben sich aus der bisherigen Anleitung. Token, Datenbank, Passwörter usw.

3. Icinga Director

3.1 Vorbereitungen

apt install php-curl
icinga2 api setup

 
Update: Was im späteren Verlauf nützlich sein könnte ist die Definition der Zone in der entsprechenden Konfigurationsdatei von icinga2: /etc/icinga2/zones.conf. Kontrolliert ob folgender Eintrag gesetzt ist; ich bin erst sehr viel später darüber gestolpert:

object Zone "director-global" {
  global = true
}

(https://monitoring-portal.org/index.php?thread/35787-import-von-kommandos-aus-manueller-icinga-2-konfiguration/)
 

3.2 API Benutzer anlegen

Dem Inhalt der Datei /etc/icinga2/conf.d/api-users.conf entsprechend wird ein neues Objekt angelegt. Als Name z.B. director.

systemctl restart icinga2

 

3.3 Modul installieren

cd /usr/share/icingaweb2/modules
git clone https://github.com/Icinga/icingaweb2-module-director.git director

 

3.4 Datenbank anlegen und füllen

CREATE DATABASE icinga2director CHARACTER SET 'utf8';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT ALL ON icinga2director.* TO 'director'@'localhost' IDENTIFIED BY 'auchgeheim';
Query OK, 0 rows affected (0.00 sec)

 

cd /usr/share/icingaweb2/modules/director/schema
mysql -u director -p icinga2director < mysql.sql

 

3.5. Einrichtung

Der Rest passiert in der GUI. In Icingaweb 2 wird eine Ressource angelegt Configuration → Application → Resources → +Create a New Resource. Die Konfiguration dazu validieren und mit Save changes speichern. In Betrieb genommen wird Director Unter Configuration → Modules → director → auf enable.

Wichtig: Endpoint ist der Name, der bei dem Aufruf von icinga2 api setup als Name des Zertifikats verwendet wurde. Man kann dies unter /etc/icinga2/pki/ nachschauen. Der Dateiname vor .crt oder .key ist der Endpoint.

icinga2 Director Dashboard

Jetzt kann es losgehen!


Beitrag veröffentlicht

in

, , , , , , ,

von

Schlagwörter:

Kommentare

Eine Antwort zu „icinga2 mit icinga web 2“

  1. Für alle die den Einstieg in Icinga suchen gibt es hier: http://www.book2look.de/book/oQ6FOCZQcd eine interssante Ressource.

Schreibe einen Kommentar