So installierst du die Icinga 2 Überwachungssoftware unter Ubuntu 22.04 LTS

Icinga2 ist eine kostenlose, quelloffene Netzwerküberwachungssoftware, die die Verfügbarkeit von Ressourcen aus dem Netzwerk überprüfen kann und Nutzer über Ausfälle benachrichtigt. Mit Icinga2 kannst du Netzwerkdienste (SMTP, POP3, HTTP, NNTP, ping), Host-Ressourcen (CPU-Auslastung, Festplattennutzung) und Netzwerkkomponenten (Switches, Router, Temperatur- und Feuchtigkeitssensoren) überwachen. Es kann mit Nagios-Plugins integriert werden.

In der folgenden Anleitung lernst du, wie du Icinga2 auf einem Ubuntu 22.04 Server installierst und wie du ihn mit einem Client-Knoten verbindest. Anstelle des standardmäßigen Apache-Servers werden wir Nginx verwenden, um Icinga2 Web zu betreiben.

Voraussetzungen

  • Zwei Rechner mit Ubuntu 22.04. Einer davon wird als Master-Server fungieren und der andere als Client für die Überwachung.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten auf beiden Servern.
  • Einen vollqualifizierten Domainnamen (FQDN) für den Master-Server, icinga.example.com, und den Client-Knoten, client.example.com.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo apt update
    $ sudo apt upgrade
    
  • Ein paar Pakete, die dein System benötigt.
    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    Einige dieser Pakete sind möglicherweise bereits auf deinem System installiert.

Schritt 1 – Firewall auf dem Master-Server konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Ubuntu wird standardmäßig mit ufw (Uncomplicated Firewall) ausgeliefert.

Überprüfe, ob die Firewall aktiv ist.

$ sudo ufw status

Du solltest die folgende Ausgabe erhalten.

Status: inactive

Erlaube den SSH-Port, damit die Firewall die aktuelle Verbindung nicht unterbricht, wenn du sie aktivierst.

$ sudo ufw allow OpenSSH

Erlaube Port 5665, den der Icinga2-Client benötigt, um sich mit dem Server zu verbinden.

$ sudo ufw allow 5665

Erlaube auch HTTP- und HTTPS-Ports.

$ sudo ufw allow http
$ sudo ufw allow https

Aktiviere die Firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Überprüfe den Status der Firewall erneut.

$ sudo ufw status

Du solltest eine ähnliche Ausgabe sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
5665                       ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
5665 (v6)                  ALLOW       Anywhere (v6)

Schritt 2 – Installiere MySQL

Ubuntu 22.04 wird mit der neuesten Version von MySQL ausgeliefert. Du kannst sie mit einem einzigen Befehl installieren.

$ sudo apt install mysql-server

Überprüfe die Version von MySQL.

$ mysql --version
mysql  Ver 8.0.32-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))

Dieser Schritt ist für die MySQL-Versionen 8.0.28 und höher notwendig. Rufe die MySQL-Shell auf.

$ sudo mysql

Führe den folgenden Befehl aus, um das Passwort für deinen Root-Benutzer festzulegen. Achte darauf, dass es eine Mischung aus Zahlen, Groß- und Kleinbuchstaben und Sonderzeichen enthält.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

Beende die Shell.

mysql> exit

Führe das Skript für die sichere Installation von MySQL aus.

$ sudo mysql_secure_installation

Zuerst wirst du nach deinem Root-Passwort gefragt. Gib es ein. Als Nächstes wirst du aufgefordert, die Validate Password Component zu installieren. Sie prüft die Stärke der in MySQL verwendeten Passwörter. Drücke Y, um sie zu installieren. Als Nächstes wirst du aufgefordert, die Stufe der Passwortüberprüfung festzulegen. Wähle 2, da dies die stärkste Stufe ist.

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Using existing password for root.

Estimated strength of the password: 100

Gib N ein, um die Änderung deines Root-Passworts abzulehnen. Gib außerdem Y ein, um anonyme Benutzer zu entfernen, Remote-Root-Logins zu verbieten, die Testdatenbank zu entfernen und die Berechtigungstabellen neu zu laden.

Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

Schritt 3 – MySQL konfigurieren

Melde dich in der MySQL-Shell an. Gib dein Root-Passwort ein, wenn du dazu aufgefordert wirst.

$ sudo mysql -u root -p

Erstelle die Icinga-Datenbank.

mysql> CREATE DATABASE icinga2;

Erstelle das SQL-Benutzerkonto für Icinga2. Ändere die Datenbank und den Benutzernamen nicht, da sie bereits standardmäßig eingestellt sind. Wenn du sie ändern möchtest, musst du bei der Installation des MySQL-Treibers in Schritt 5 einige zusätzliche Schritte durchführen. Wenn du das Passwort eingibst, bekommst du eine Fehlermeldung und wirst dann zur Neukonfiguration aufgefordert, bei der du deinen eigenen Datenbanknamen und die Benutzer angeben kannst.

mysql> CREATE USER 'icinga2'@'localhost' IDENTIFIED BY 'Your_password2';

Erteile dem Benutzer alle Berechtigungen für die Datenbank.

mysql> GRANT ALL PRIVILEGES ON icinga2.* TO 'icinga2'@'localhost';

Lösche die Benutzerrechte.

mysql> FLUSH PRIVILEGES;

Beende die Shell.

mysql> exit

Schritt 4 – Installiere Icinga2 und die Überwachungsplugins auf dem Master-Server

Wir verwenden das offizielle Icinga2-Repository für die Installation. Lade den Icinga2 GPG-Schlüssel herunter und importiere ihn.

$ wget -O - https://packages.icinga.com/icinga.key | sudo gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg

Führe die folgenden Befehle aus, um die Informationen zum Icinga2-Repository zu erstellen und der APT-Quellenliste hinzuzufügen.

$ echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-`lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list
$ echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] http://packages.icinga.com/ubuntu icinga-`lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list

Aktualisiere die Liste der System-Repositories.

$ sudo apt update

Installiere Icinga2 und die Überwachungsplugins.

$ sudo apt install icinga2 monitoring-plugins -y

Schritt 5 – Installiere den IDO MySQL-Treiber auf dem Master-Server

Damit Icinga2 funktionieren kann, braucht es eine Datenbank. Dazu müssen wir den IDO MySQL-Treiber installieren und die Datenbankverbindung einrichten. Führe den folgenden Befehl aus, um den MySQL-Treiber zu installieren.

$ sudo apt install -y icinga2-ido-mysql

Du wirst aufgefordert, den Treiber einzurichten und eine Datenbank mit dem Dienstprogramm dbconfig-common zu erstellen. Wähle Ja, um fortzufahren.

Datenbank für Icinga2 konfigurieren

Als nächstes wirst du nach dem MySQL-Passwort für die icinga2-Datenbank gefragt. Gib das in Schritt 3 konfigurierte Passwort ein, um fortzufahren.

Datenbank-Passwort für Icinga2 eingeben

Du wirst erneut aufgefordert, das Passwort zu bestätigen.

Icinga2 Passwort bestätigen

Als nächstes wirst du gefragt, ob du die Funktion ido-mysql aktivieren möchtest. Wähle Ja, um fortzufahren.

Icinga IDO-MySQL-Funktion

Du kannst die Details der Datenbank in der Datei /etc/icinga2/features-available/ido-mysql.conf überprüfen.

$ cat /etc/icinga2/features-available/ido-mysql.conf
/**
 * The db_ido_mysql library implements IDO functionality
 * for MySQL.
 */

library "db_ido_mysql"

object IdoMysqlConnection "ido-mysql" {
  user = "icinga2",
  password = "Your_password2",
  host = "localhost",
  database = "icinga2"
}

Aktiviere die Funktion ido-mysql.

$ sudo icinga2 feature enable ido-mysql

Starte den Icinga2-Dienst neu.

$ sudo systemctl restart icinga2

Überprüfe den Status des Dienstes.

$ sudo systemctl status icinga2
? icinga2.service - Icinga host/service/network monitoring system
     Loaded: loaded (/lib/systemd/system/icinga2.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/icinga2.service.d
             ??limits.conf
     Active: active (running) since Mon 2023-05-01 08:02:36 UTC; 1s ago
    Process: 9823 ExecStartPre=/usr/lib/icinga2/prepare-dirs /etc/default/icinga2 (code=exited, status=0/SUCCESS)
   Main PID: 9828 (icinga2)
     Status: "Startup finished."
      Tasks: 10
     Memory: 17.6M
        CPU: 657ms
     CGroup: /system.slice/icinga2.service
             ??9828 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??9846 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??9849 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log

Schritt 6 – Icinga2 API konfigurieren

Um die Icinga2-Überwachung über HTTP zu verwalten und zu konfigurieren, musst du die Icinga2-API konfigurieren. Führe den folgenden Befehl aus, um die Icinga2-API zu aktivieren, TLS-Zertifikate für Icinga2 zu erzeugen und die Icinga2-Konfigurationen zu aktualisieren.

$ sudo icinga2 api setup

Du wirst eine ähnliche Ausgabe erhalten.

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//icinga.example.com.csr'.
information/base: Writing private key to '/var/lib/icinga2/certs//icinga.example.com.key'.
information/base: Writing certificate signing request to '/var/lib/icinga2/certs//icinga.example.com.csr'.
information/cli: Signing CSR with CA and writing certificate to '/var/lib/icinga2/certs//icinga.example.com.crt'.
information/pki: Writing certificate to file '/var/lib/icinga2/certs//icinga.example.com.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: Reading '/etc/icinga2/icinga2.conf'.
information/cli: Enabling the 'api' feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
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!

Der obige Befehl erstellt eine /etc/icinga2/conf.d/api-users.conf Datei mit dem Standardbenutzer root, der alle Berechtigungen für die Icinga2 API hat. Wir brauchen einen neuen Benutzer mit den für Icinga Web erforderlichen minimalen Berechtigungen.

Öffne die Datei api-users.conf zum Bearbeiten.

$ sudo nano /etc/icinga2/conf.d/api-users.conf

Füge den folgenden Code am Ende der Datei ein.

/** api for icingaweb2 */
object ApiUser "icingaweb2" {
  password = "PassWordApiIcingaWeb2"
  permissions = [ "status/query", "actions/*", "objects/modify/*", "objects/query/*" ]
}

Notiere dir die Anmeldedaten, die später für den Zugriff auf die Website benötigt werden. Der Icinga2 API-Server lauscht standardmäßig auf Port 5665. Starte den Dienst neu, damit die Änderungen wirksam werden.

$ sudo systemctl restart icinga2

Der nächste Schritt ist die Installation der Icinga-Webschnittstelle. Sie ist für Apache vorkonfiguriert, aber wir werden den Nginx-Server verwenden. Daher müssen wir zuerst Nginx und die SSL-Zertifikate installieren.

Schritt 7 – Nginx installieren

Ubuntu 22.04 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.

Importiere den Signierschlüssel von Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Füge das Repository für die stabile Version von Nginx hinzu.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Aktualisiere die System-Repositories.

$ sudo apt update

Installiere Nginx.

$ sudo apt install nginx

Überprüfe die Installation.

$ nginx -v
nginx version: nginx/1.24.0

Starte den Nginx-Server.

$ sudo systemctl start nginx

Schritt 8 – SSL installieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu erstellen. Du kannst Certbot entweder über das Repository von Ubuntu installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Bei Ubuntu 22.04 ist Snapd standardmäßig installiert. Führe die folgenden Befehle aus, um sicherzustellen, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core && sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Verwende den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link zum Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Führe den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d icinga.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/icinga.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Überprüfe den Certbot-Erneuerungsplanerdienst.

$ sudo systemctl list-timers

Du findest snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen sind.

NEXT                        LEFT          LAST                        PASSED         UNIT                     ACTIVATES
------------------------------------------------------------------------------------------------------------------------------------
Mon 2023-05-01 13:37:57 UTC 3h 45min left Mon 2023-05-01 07:20:42 UTC 2h 31min ago   ua-timer.timer           ua-timer.service
Mon 2023-05-01 14:39:29 UTC 4h 47min left Sat 2023-02-04 16:04:18 UTC 2 months ago   motd-news.timer          motd-news.service
Mon 2023-05-01 15:53:00 UTC 6h left       n/a                         n/a            snap.certbot.renew.timer snap.certbot.renew.service

Führe einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.

Schritt 9 – Nginx und PHP konfigurieren

Da Icinga für Apache konfiguriert ist, wird das PHP-FPM-Paket standardmäßig nicht installiert. Außerdem brauchst du das PHP Imagick-Modul, wenn du die Diagramme als PDF exportieren willst. Führe den folgenden Befehl aus, um PHP-FPM und die PHP Imagick-Bibliothek zu installieren.

$ sudo apt install php-fpm php-imagick

PHP-FPM konfigurieren

Öffne die Datei /etc/php/8.1/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.1/fpm/pool.d/www.conf

Wir müssen den Unix-Benutzer/die Unix-Gruppe der PHP-Prozesse auf nginx setzen. Finde die Zeilen user=www-data und group=www-data in der Datei und ändere sie in nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx
group = nginx
...

Finde die Zeilen listen.owner = www-data und listen.group = www-data in der Datei und ändere sie in nginx.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den PHP-FPM-Dienst neu.

$ sudo systemctl restart php8.1-fpm

Nginx konfigurieren

Erstelle und öffne die Datei /etc/nginx/conf.d/icinga.conf zum Bearbeiten.

$ sudo nano /etc/nginx/conf.d/icinga.conf

Füge den folgenden Code in die Datei ein.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  icinga.example.com;

    access_log  /var/log/nginx/icinga.access.log;
    error_log   /var/log/nginx/icinga.error.log;

    # SSL
    ssl_certificate      /etc/letsencrypt/live/icinga.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/icinga.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/icinga.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location ~ ^/index\.php(.*)$ {
        # fastcgi_pass 127.0.0.1:9000;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock; # Depends On The PHP Version
        fastcgi_index index.php;
        # try_files $uri =404;
        # fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/share/icingaweb2/public/index.php;
        fastcgi_param ICINGAWEB_CONFIGDIR /etc/icingaweb2;
        fastcgi_param REMOTE_USER $remote_user;
    }

    location ~ ^/(.*)? {
        alias /usr/share/icingaweb2/public;
        index index.php;
        rewrite ^/$ /dashboard;
        try_files $1 $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        return 404;
    }
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  icinga.example.com;
    return 301   https://$host$request_uri;
}

Beachte, dass das Stammverzeichnis, das in der Nginx-Konfiguration verwendet werden soll, /usr/share/icingaweb2/public ist.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du danach gefragt wirst.

Öffne die Datei /etc/nginx/nginx.conf zum Bearbeiten.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starte den Nginx-Dienst neu.

$ sudo systemctl restart nginx

Schritt 10 – Web-Setup vorbereiten

Bevor wir auf Icinga Web zugreifen können, müssen wir es einrichten. Wenn du Icinga Web benutzt, musst du dich mit einem Token authentifizieren. Erstelle den Token mit dem folgenden Befehl.

$ sudo icingacli setup token create
The newly generated setup token is: 3c4d4e155635f512

Notiere dir den Token, denn du wirst ihn später brauchen. Du kannst ihn später jederzeit mit dem folgenden Befehl abrufen.

$ sudo icingacli setup token show
The current setup token is: 3c4d4e155635f512

Im nächsten Schritt musst du eine Datenbank und einen Datenbankbenutzer anlegen. Melde dich in der MySQL-Shell an.

$ sudo mysql -u root -p

Erstelle die Icinga Web Datenbank.

mysql> CREATE DATABASE icingaweb2;

Erstelle das SQL-Benutzerkonto für Icinga Web.

mysql> CREATE USER 'icingaweb2'@'localhost' IDENTIFIED BY 'Your_password3';

Erteile dem Benutzer alle Rechte für die Datenbank.

mysql> GRANT ALL PRIVILEGES ON icingaweb2.* TO 'icingaweb2'@'localhost';

Lösche die Benutzerrechte.

mysql> FLUSH PRIVILEGES;

Beende die Shell.

mysql> exit

Schritt 11 – IcingaWeb einrichten

Öffne die URL https://icinga.example.com in deinem Browser und du wirst den folgenden Bildschirm sehen.

Icinga Web Setup Seite

Gib den im vorherigen Schritt erzeugten Token ein und klicke auf die Schaltfläche Weiter, um fortzufahren.

Icinga Module einrichten

Auf dem nächsten Bildschirm wählst du die Module aus, die du installieren möchtest, und klickst auf Weiter, um fortzufahren. Das Modul Überwachung ist standardmäßig für dich ausgewählt. Auf der nächsten Seite werden dir die Anforderungen angezeigt und ob sie erfüllt sind. Vergewissere dich, dass alle Anforderungen grün markiert sind.

Icinga Requirements Seite

Klicke auf Weiter, um auf die nächste Seite zu gelangen und die Authentifizierungsart auszuwählen.

Icinga-Authentifizierungstyp

Die Authentifizierungsart ist standardmäßig auf Datenbank eingestellt. Klicke auf Weiter, um fortzufahren. Auf der nächsten Seite wirst du aufgefordert, die Datenbankanmeldedaten einzugeben.

Icinga Web Datenbank Anmeldeinformationen

Gib die in Schritt 10 erstellten Datenbank-Anmeldedaten ein. Klicke auf die Schaltfläche Konfiguration überprüfen, um die Anmeldedaten zu überprüfen. Nach der Überprüfung klickst du auf Weiter, um fortzufahren. Als nächstes wirst du aufgefordert, das Authentifizierungs-Backend zu benennen.

Icinga Authentifizierung Backend

Belasse den Standardwert und klicke auf Weiter, um fortzufahren. Auf der nächsten Seite wirst du aufgefordert, ein Administratorkonto zu erstellen.

Icinga Administrator Details

Gib die Anmeldedaten für dein neues Administratorkonto ein und klicke auf Weiter, um fortzufahren. Als Nächstes wird die Seite Anwendungskonfiguration angezeigt.

Icinga-Anwendungskonfiguration

Belasse alle Standardwerte für die Anwendungs- und Protokollierungskonfiguration und klicke auf Weiter, um fortzufahren. Auf der letzten Seite wirst du aufgefordert, die Konfiguration zu überprüfen.

Icinga Überprüfung Konfiguration

Du kannst zurückgehen und alle Einstellungen ändern. Wenn du zufrieden bist, klicke auf Weiter, um fortzufahren.

Icinga Web 2 Konfigurationsmodul Willkommen

Klicke auf Weiter, um mit der Konfiguration des Überwachungsmoduls fortzufahren. Als nächstes wirst du nach den Zugangsdaten für die Icinga-Datenbank gefragt.

Icinga Datenbank Anmeldeinformationen

Gib die Zugangsdaten für die Datenbank in Schritt 3 ein und klicke auf Konfiguration bestätigen, um die Verbindung zu überprüfen. Nach der Überprüfung klickst du auf Weiter, um fortzufahren. Als Nächstes wirst du aufgefordert, die API-Details einzugeben.

Icinga API Details

Gib die in Schritt 6 erstellten API-Anmeldedaten ein und klicke auf Konfiguration validieren, um die Verbindung zu überprüfen. Klicke auf Weiter, um fortzufahren. Als Nächstes wirst du aufgefordert, geschützte benutzerdefinierte Variablen für die Überwachungssicherheit auszuwählen.

Icinga Überwachung Sicherheit

Belasse die Standardwerte und klicke auf Weiter, um fortzufahren. Als Nächstes wirst du aufgefordert, die Überwachungskonfiguration zu überprüfen. Du kannst zurückgehen und sie ändern, wenn du möchtest.

Überprüfung der Icinga Monitoring Konfiguration

Wenn du zufrieden bist, klicke auf Fertig stellen, um die Installation abzuschließen.

Icinga-Installation fertiggestellt

Nach erfolgreichem Abschluss klickst du auf die Schaltfläche Anmeldung bei Icinga Web 2, um die Anmeldeseite zu öffnen.

Icinga Web Login Seite

Gib deine Administrator-Kontodaten ein und klicke auf die Schaltfläche Anmelden, um das Icinga Web Dashboard zu öffnen.

Icinga Web Dashboard

Besuche die Seite Übersicht >> Dienste, um den Status des Master Servers zu überprüfen, ähnlich wie im Folgenden dargestellt.

Icinga Web Services Seite

Schritt 12 – Master-Server initialisieren

Der nächste Schritt ist die Initialisierung des Masterservers als Masterknoten. Der Masterknoten fungiert als Hauptcontroller für den Monitoring Stack. Führe den folgenden Befehl aus, um den Initialisierungsprozess zu starten.

$ sudo icinga2 node wizard

Du wirst gefragt, ob es sich um eine Agenteneinrichtung handelt. Gib n ein, um den Master Node einzurichten.

Welcome to the Icinga 2 Setup Wizard!

We will guide you through all required configuration details.

Please specify if this is an agent/satellite setup ('n' installs a master setup) [Y/n]: n

Als Nächstes wirst du nach dem gemeinsamen Namen oder dem Domänennamen gefragt. Drücke die Eingabetaste, um den angezeigten Standardwert auszuwählen.

Please specify the common name (CN) [icinga.example.com]:
Reconfiguring Icinga...
Checking for existing certificates for common name 'icinga.example.com'...
Certificate '/var/lib/icinga2/certs//icinga.example.com.crt' for CN 'icinga.example.com' already existing. Skipping certificate generation.
Generating master configuration for Icinga 2.
'api' feature already enabled.

Als Nächstes gibst du den Namen der Masterzone ein und drückst die Eingabetaste, um fortzufahren. In unserem Fall ist es derselbe wie der Domänenname des Servers.

Master zone name [master]: icinga.example.com

Als nächstes wirst du gefragt, ob du weitere globale Zonen hinzufügen möchtest. Drücke n, um das Hinzufügen zu überspringen, und drücke die Eingabetaste, um fortzufahren.

Default global zones: global-templates director-global
Do you want to specify additional global zones? [y/N]: n

Im nächsten Schritt belässt du den API-Bind-Host und -Port als Standard und drückst die Eingabetaste, um fortzufahren.

Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:

Als Nächstes drückst du Y, um die Konfiguration im Verzeichnis /etc/icinga2/conf.d/ zu deaktivieren, da wir später die Konfiguration der Icinga2-Zonen verwenden werden.

Do you want to disable the inclusion of the conf.d directory [Y/n]: Y
Disabling the inclusion of the conf.d directory...
Checking if the api-users.conf file exists...

Done.

Now restart your Icinga 2 daemon to finish the installation!

Starte den Dienst neu, um die Änderungen zu übernehmen.

$ sudo systemctl restart icinga2

Und zu guter Letzt führst du den folgenden Befehl aus, um ein Ticket für den Client-Server zu erstellen. Verwende den Domänennamen des Clients als Argument.

$ sudo icinga2 pki ticket --cn 'client.example.com'
365cd931d3091537622a95b113b17775893a224f

Notiere dir das Ticket für die spätere Verwendung.

Schritt 13 – Initialisierung des Icinga2-Agenten auf dem Client-Server

Melde dich auf dem Client-Server an und installiere Icinga2 und die Überwachungsplugins. Führe dazu die folgenden Befehle aus.

$ wget -O - https://packages.icinga.com/icinga.key | sudo gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/ubuntu icinga-`lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list
$ echo "deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] http://packages.icinga.com/ubuntu icinga-`lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list.d/$(lsb_release -cs)-icinga.list
$ sudo apt update
$ sudo apt install icinga2 monitoring-plugins -y

Überprüfe, ob der Icinga-Dienst aktiviert ist und läuft.

$ sudo systemctl status icinga2
? icinga2.service - Icinga host/service/network monitoring system
     Loaded: loaded (/lib/systemd/system/icinga2.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/icinga2.service.d
             ??limits.conf
     Active: active (running) since Tue 2023-05-02 07:32:07 UTC; 59min ago
   Main PID: 7602 (icinga2)
     Status: "Startup finished."
      Tasks: 8
     Memory: 13.9M
        CPU: 1.018s
     CGroup: /system.slice/icinga2.service
             ??7602 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??7620 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log
             ??7623 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log

Starte den Icinga Node Wizard, um den Agenten auf dem Client-Server zu initialisieren.

$ sudo icinga2 node wizard

Du wirst gefragt, ob es sich um eine Agenteneinrichtung handelt. Gib Y ein, um den Agenten einzurichten.

Welcome to the Icinga 2 Setup Wizard!

We will guide you through all required configuration details.

Please specify if this is an agent/satellite setup ('n' installs a master setup) [Y/n]: Y

Als Nächstes wirst du aufgefordert, den gemeinsamen Namen anzugeben. Belasse den Standardwert und drücke die Eingabetaste, um fortzufahren.

Starting the Agent/Satellite setup routine...

Please specify the common name (CN) [client.example.com]:

Als Nächstes gibst du den übergeordneten Endpunkt als icinga.example.com an und gibst Y ein, um vom Client aus eine Verbindung zum übergeordneten Knoten herzustellen.

Please specify the parent endpoint(s) (master or satellite) where this node should connect to:
Master/Satellite Common Name (CN from your master/satellite node): icinga.example.com

Do you want to establish a connection to the parent node from this node? [Y/n]: Y

Als Nächstes gibst du die IP-Adresse des Master-Servers ein und belässt den Port-Wert auf dem Standardwert.

Please specify the master/satellite connection information:
Master/Satellite endpoint host (IP address or FQDN): 199.247.31.184
Master/Satellite endpoint port [5665]:

Gib N ein, um das Hinzufügen weiterer Master-Endpunkte abzulehnen.

Add more master/satellite endpoints? [y/N]: N

Als nächstes werden dir die Zertifikatsinformationen für den Master-Server angezeigt. Drücke Y, um die Informationen zu bestätigen und fortzufahren.

Parent certificate information:

 Version:             3
 Subject:             CN = icinga.example.com
 Issuer:              CN = Icinga CA
 Valid From:          May  1 08:28:26 2023 GMT
 Valid Until:         Jun  1 08:28:26 2024 GMT
 Serial:              53:50:d4:1a:85:c5:70:5b:b1:f6:0e:c3:b6:e4:db:62:df:8d:5e:d9

 Signature Algorithm: sha256WithRSAEncryption
 Subject Alt Names:   icinga.example.com
 Fingerprint:         DC BB 90 68 29 E5 C4 B5 74 F5 BC 8C BF A1 8F BF D2 9D A4 E5 A9 9A 43 2C 3B 24 AE A9 CD 19 32 F4

Is this information correct? [y/N]: Y

Als Nächstes gibst du das im vorherigen Schritt erstellte Anforderungsticket ein.

Please specify the request ticket generated on your Icinga 2 master (optional).
 (Hint: # icinga2 pki ticket --cn 'client.example.com'): 365cd931d3091537622a95b113b17775893a224f

Belasse den API-Bind-Host und -Port als Standard und drücke die Eingabetaste, um fortzufahren.

Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:

Als Nächstes gibst du zweimal Y ein, um die Konfiguration und die Befehle des Master-Knotens zu akzeptieren.

Accept config from parent node? [y/N]: Y
Accept commands from parent node? [y/N]: Y

Drücke die Eingabetaste, um den Standardnamen der lokalen Zone zu akzeptieren, der der Name der Client-Domäne ist. Gib den Master-Domänennamen als übergeordneten Zonennamen ein, um fortzufahren.

Reconfiguring Icinga...
Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.

Local zone name [client.example.com]:
Parent zone name [master]: icinga.example.com

Drücke N, um das Hinzufügen weiterer globaler Zonen zu überspringen.

Default global zones: global-templates director-global
Do you want to specify additional global zones? [y/N]: N

Drücke N, um das Deaktivieren der Konfigurationen aus dem Verzeichnis /etc/icinga2/conf.d/ zu überspringen.

Do you want to disable the inclusion of the conf.d directory [Y/n]: Y
Disabling the inclusion of the conf.d directory...

Done.

Now restart your Icinga 2 daemon to finish the installation!

Starte den Icinga-Dienst neu, um die Konfigurationsänderungen zu übernehmen.

$ sudo systemctl restart icinga2

Schritt 14 – Erstellen der Zonenkonfiguration auf dem Master-Server

Logge dich wieder auf dem Server ein und erstelle ein neues Verzeichnis als Standardzone.

$ sudo mkdir -p /etc/icinga2/zones.d/icinga.example.com/

Als nächstes erstellst du eine Konfigurationsdatei in dem neu erstellten Verzeichnis und öffnest sie zur Bearbeitung.

$ sudo nano /etc/icinga2/zones.d/icinga.example.com/client.example.com.conf

Füge den folgenden Code in die Datei ein. Die IP-Adresse im Code sollte mit der öffentlichen IP-Adresse des Clients übereinstimmen.

// Endpoints
object Endpoint "client.example.com" {
}
// Zones
object Zone "client.example.com" {
    endpoints = [ "client.example.com" ]
    parent = "icinga.example.com"
}
// Host Objects
object Host "client.example.com" {
    check_command = "hostalive"
    address = "95.179.138.148"
    vars.client_endpoint = name
}

Speichere die Datei, indem du die Tastenkombination Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Erstelle und öffne die Datei services zur Bearbeitung.

$ sudo nano /etc/icinga2/zones.d/icinga.example.com/services.conf

Füge den folgenden Code in die Datei ein.

// Ping
 apply Service "Ping" {
 check_command = "ping4"
 assign where host.address // check executed on master
 }
 // System Load
 apply Service "System Load" {
 check_command = "load"
 command_endpoint = host.vars.client_endpoint // Check executed on client01
 assign where host.vars.client_endpoint
 }
 // SSH Service
 apply Service "SSH Service" {
 check_command = "ssh"
 command_endpoint = host.vars.client_endpoint
 assign where host.vars.client_endpoint
 }
 // Icinga 2 Service
 apply Service "Icinga2 Service" {
 check_command = "icinga"
 command_endpoint = host.vars.client_endpoint
 assign where host.vars.client_endpoint
 }

Führe den folgenden Befehl aus, um die Konfiguration zu überprüfen.

$ sudo icinga2 daemon -C

Du wirst eine ähnliche Ausgabe erhalten.

[2023-05-02 11:21:23 +0000] information/cli: Icinga application loader (version: r2.13.7-1)
[2023-05-02 11:21:23 +0000] information/cli: Loading configuration file(s).
[2023-05-02 11:21:23 +0000] information/ConfigItem: Committing config item(s).
[2023-05-02 11:21:23 +0000] information/ApiListener: My API identity: icinga.example.com
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 1 IcingaApplication.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 1 Host.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 1 FileLogger.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 1 IdoMysqlConnection.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 1 CheckerComponent.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 4 Zones.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 2 Endpoints.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 2 ApiUsers.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 1 ApiListener.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 1 NotificationComponent.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 244 CheckCommands.
[2023-05-02 11:21:23 +0000] information/ConfigItem: Instantiated 4 Services.
[2023-05-02 11:21:23 +0000] information/ScriptGlobal: Dumping variables to file '/var/cache/icinga2/icinga2.vars'
[2023-05-02 11:21:23 +0000] information/cli: Finished validating the configuration file(s).

Starte den Icinga-Dienst neu, um die Konfigurationsänderungen zu übernehmen.

$ sudo systemctl restart icinga2

Schritt 15 – Überprüfe im Icinga Dashboard

Öffne das Icinga2 Web Dashboard, um die Informationen über die Client-Maschinen zu überprüfen. Wähle Übersicht >> Hosts aus dem linken Menü und du wirst den folgenden Bildschirm sehen.

Icinga Web Dashboard Hosts Seite

Es kann einige Zeit dauern, bis der Status des Clients als UP angezeigt wird. Klicke auf den Client, um mehr Details über ihn zu erfahren. Wähle Übersicht >> Dienste und du siehst die folgenden Statusinformationen über den Client.

Icinga Web Client Services Details

Dies bestätigt, dass der Client die Statistiken korrekt an den Icinga-Masterserver sendet.

Fazit

Damit ist unsere Anleitung zur Installation der Icinga Monitoring Software auf einem Ubuntu 22.04 Server und der Konfiguration zur Überwachung eines Client-Rechners mit demselben Betriebssystem abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …