So installierst du die Icinga 2 Überwachungssoftware unter Debian 12
Icinga 2 ist ein Open-Source-Überwachungssystem, das die Verfügbarkeit von Netzwerkressourcen überprüft, Nutzer über Ausfälle benachrichtigt und Leistungsdaten für die Berichterstattung generiert. 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 erfährst du, wie du Icinga2 auf einem Debian 12 Server installierst und 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 Debian 12. Einer davon wird als Master-Server und der andere als Client für die Überwachung fungieren.
- 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 debian-archive-keyring ufw 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. Debian wird standardmäßig mit ufw (Uncomplicated Firewall) ausgeliefert.
Überprüfe, ob die Firewall läuft.
$ 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 MariaDB Server
Debian 12 wird mit der neuesten Version von MariaDB ausgeliefert. Du kannst sie mit einem einzigen Befehl installieren.
$ sudo apt install mariadb-server
Überprüfe die Version von MySQL.
$ mysql --version mysql Ver 15.1 Distrib 10.11.4-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Führe das MariaDB-Skript zur sicheren Installation aus.
$ sudo mariadb-secure-installation
Du wirst nach dem Root-Passwort gefragt. Drücke die Eingabetaste, denn wir haben kein Passwort dafür festgelegt.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none):
Als nächstes wirst du gefragt, ob du zur Unix-Socket-Authentifizierungsmethode wechseln willst. Mit dem unix_socket
Plugin kannst du deine Betriebssystem-Zugangsdaten verwenden, um dich mit dem MariaDB-Server zu verbinden. Da du bereits ein geschütztes Root-Konto hast, gibst du n
ein, um fortzufahren.
OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] n
Als nächstes wirst du gefragt, ob du dein Root-Passwort ändern möchtest. Unter Debian 12 ist das Root-Passwort eng mit der automatischen Systemwartung verknüpft, daher solltest du es nicht ändern. Gib n
ein, um fortzufahren.
... skipping. You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] n
Als nächstes werden dir einige Fragen gestellt, um die Sicherheit von MariaDB zu verbessern. Gib Y ein, um anonyme Benutzer zu entfernen, Remote-Root-Logins zu verbieten, die Testdatenbank zu entfernen und die Berechtigungstabellen neu zu laden.
... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB 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? [Y/n] 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? [Y/n] y ... Success! By default, MariaDB 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? [Y/n] 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? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
Du kannst die MariaDB-Shell aufrufen, indem du sudo mysql
oder sudo mariadb
in die Befehlszeile eingibst.
Schritt 3 – MariaDB konfigurieren
Melde dich in der MariaDB-Shell an. Gib dein Root-Passwort ein, wenn du dazu aufgefordert wirst.
$ sudo mysql
Erstelle die Icinga-Datenbank.
MariaDB [(none)]> 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.
MariaDB [(none)]> CREATE USER 'icinga2'@'localhost' IDENTIFIED BY 'Your_password2';
Erteile dem Benutzer alle Rechte für die Datenbank.
MariaDB [(none)]> GRANT ALL PRIVILEGES ON icinga2.* TO 'icinga2'@'localhost';
Da wir den Root-Benutzer nicht ändern, solltest du einen weiteren SQL-Benutzer für die Durchführung von Verwaltungsaufgaben anlegen, die eine Passwortauthentifizierung erfordern. Wähle ein sicheres Passwort für diesen Benutzer.
MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;
Lösche die Benutzerrechte.
MariaDB [(none)]> FLUSH PRIVILEGES;
Beende die Shell.
MariaDB [(none)]> 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/debian 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/debian 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, Icingacli 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
Als nächstes wirst du gefragt, ob du die Funktion ido-mysql aktivieren möchtest. Wähle Ja, um fortzufahren.
Als Nächstes wirst du aufgefordert, den Treiber einzurichten und mit dem Dienstprogramm dbconfig-common
eine Datenbank zu erstellen. Wähle Ja, um fortzufahren.
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.
Du wirst erneut aufgefordert, das Passwort zu bestätigen.
Du kannst die Details der Datenbank in der Datei /etc/icinga2/features-available/ido-mysql.conf
überprüfen.
$ sudo 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 Enabling feature ido-mysql. Make sure to restart Icinga 2 for these changes to take effect.
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; preset: enabled) Drop-In: /etc/systemd/system/icinga2.service.d ??limits.conf Active: active (running) since Mon 2024-01-08 07:35:29 UTC; 4s ago Process: 15404 ExecStartPre=/usr/lib/icinga2/prepare-dirs /etc/default/icinga2 (code=exited, status=0/SUCCESS) Main PID: 15411 (icinga2) Status: "Startup finished." Tasks: 14 Memory: 13.6M CPU: 858ms CGroup: /system.slice/icinga2.service ??15411 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log ??15433 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log ??15438 /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. Wähle ein starkes Passwort für die API.
/** 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
Debian 12 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 Mainline-Version von Nginx hinzu.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/mainline/debian `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. Auf Debian-Systemen funktioniert der folgende Befehl nur mit sudo
.
$ sudo nginx -v nginx version: nginx/1.25.3
Starte den Nginx-Server.
$ sudo systemctl start nginx
Überprüfe den Status des Dienstes.
$ sudo systemctl status nginx ? nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Mon 2024-01-08 07:43:24 UTC; 4s ago Docs: https://nginx.org/en/docs/ Process: 16330 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 16331 (nginx) Tasks: 3 (limit: 2299) Memory: 2.9M CPU: 16ms CGroup: /system.slice/nginx.service ??16331 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??16332 "nginx: worker process" ??16333 "nginx: worker process" Jan 08 07:43:24 icinga systemd[1]: Starting nginx.service - nginx - high performance web server... Jan 08 07:43:24 icinga systemd[1]: Started nginx.service - nginx - high performance web server.
Schritt 8 – SSL installieren
Wir müssen Certbot installieren, um das SSL-Zertifikat zu erstellen. Du kannst Certbot über das Repository von Debian installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.
Bei Debian 12 ist Snapd noch nicht installiert. Installiere das Snapd-Paket.
$ sudo apt install snapd
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
Überprüfe, ob Certbot richtig funktioniert.
$ certbot --version certbot 2.8.0
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-Erneuerungszeitplanungsdienst.
$ 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 2024-01-08 09:47:46 UTC 1h 56min left Sun 2024-01-07 09:47:46 UTC 22h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Mon 2024-01-08 13:35:00 UTC 5h 43min left - - snap.certbot.renew.timer snap.certbot.renew.service Tue 2024-01-09 00:00:00 UTC 16h left Mon 2024-01-08 00:00:01 UTC 7h ago dpkg-db-backup.timer dpkg-db-backup.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.2/fpm/pool.d/www.conf
.
$ sudo nano /etc/php/8.2/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.2-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.2-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 zusammen mit dem Kommandozeilentool installieren.
$ sudo apt install icingaweb2 icingacli
Füge den Nginx-Benutzer zur Gruppe icingaweb2
hinzu.
$ sudo usermod -aG icingaweb2 nginx
Setze die Berechtigungen für das Icingaweb-Verzeichnis auf die Gruppe icingaweb2
.
$ sudo icingacli setup config directory --group icingaweb2 Successfully created configuration directory /etc/icingaweb2
Wenn du Icinga Web verwendest, musst du dich mit einem Token authentifizieren. Erstelle das Token mit dem folgenden Befehl.
$ sudo icingacli setup token create The newly generated setup token is: 56951f01f9f77a68
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: 56951f01f9f77a68
Im nächsten Schritt musst du eine Datenbank und einen Datenbankbenutzer anlegen. Melde dich in der MariaDB-Shell an.
$ sudo mysql
Erstelle die Icinga Web-Datenbank.
MariaDB [(none)]> CREATE DATABASE icingaweb2;
Erstelle das SQL-Benutzerkonto für Icinga Web.
MariaDB [(none)]> CREATE USER 'icingaweb2'@'localhost' IDENTIFIED BY 'Your_password3';
Erteile dem Benutzer alle Rechte für die Datenbank.
MariaDB [(none)]> GRANT ALL PRIVILEGES ON icingaweb2.* TO 'icingaweb2'@'localhost';
Lösche die Benutzerrechte.
MariaDB [(none)]> FLUSH PRIVILEGES;
Beende die Shell.
MariaDB [(none)]> exit
Starte Nginx und PHP-FPM neu, um die Berechtigungsänderungen zu übernehmen.
$ sudo systemctl restart nginx php8.2-fpm
Schritt 11 – IcingaWeb einrichten
Öffne die URL https://icinga.example.com/setup
in deinem Browser und du wirst den folgenden Bildschirm sehen.
Gib das im vorherigen Schritt generierte Token ein und klicke auf die Schaltfläche Weiter, um fortzufahren.
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.
Klicke auf Weiter, um auf die nächste Seite zu gelangen und die Authentifizierungsart auszuwählen.
Die Authentifizierungsart ist standardmäßig auf Datenbank eingestellt. Klicke auf Weiter, um fortzufahren. Auf der nächsten Seite wirst du aufgefordert, die Datenbankanmeldedaten einzugeben.
Gib die in Schritt 10 erstellten Datenbank-Anmeldedaten ein. Klicke auf die Schaltfläche Konfiguration bestätigen, 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.
Belasse den Standardwert und klicke auf Weiter, um fortzufahren. Auf der nächsten Seite wirst du aufgefordert, ein Administratorkonto zu erstellen.
Gib die Anmeldedaten für dein neues Administratorkonto ein und klicke auf Weiter, um fortzufahren. Als Nächstes wird die Seite Anwendungskonfiguration angezeigt.
Das Kontrollkästchen Strenge Inhaltssicherheitsrichtlinie aktivieren ist nicht markiert. Aktiviere sie und lasse alle anderen Standardwerte unverändert. Klicke auf Weiter, um fortzufahren. Auf der letzten Seite wirst du aufgefordert, die Konfiguration zu überprüfen.
Du kannst zurückgehen und alle Einstellungen ändern. Wenn du zufrieden bist, klicke auf Weiter, um fortzufahren.
Klicke auf Weiter, um mit der Konfiguration des Überwachungsmoduls fortzufahren. Als nächstes wirst du nach den Zugangsdaten für die Icinga-Datenbank gefragt.
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.
Gib die in Schritt 6 erstellten API-Anmeldedaten ein, 127.0.0.1
als Host, 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.
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.
Wenn du zufrieden bist, klicke auf Fertig stellen, um die Installation abzuschließen.
Nach erfolgreichem Abschluss klickst du auf die Schaltfläche Anmeldung bei Icinga Web 2, um die Anmeldeseite zu öffnen (https://icinga.example.com
).
Gib deine Administrator-Kontodaten ein und klicke auf die Schaltfläche Anmelden, um das Icinga Web Dashboard zu öffnen.
Besuche die Seite Übersicht >> Dienste, um den Status des Master Servers zu überprüfen, ähnlich wie im Folgenden dargestellt.
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 Standardwert auszuwählen, der angezeigt wird, wenn er der richtige ist. Andernfalls gibst du die Domäne ein und drückst die Eingabetaste.
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 auf 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' c81f2a3b86534f34160ed8b776906e5452d8d09c
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/debian 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/debian 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; preset: enabled) Drop-In: /etc/systemd/system/icinga2.service.d ??limits.conf Active: active (running) since Mon 2024-01-08 12:52:53 UTC; 35s ago Main PID: 19530 (icinga2) Status: "Startup finished." Tasks: 12 Memory: 13.4M CPU: 216ms CGroup: /system.slice/icinga2.service ??19530 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log ??19573 /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2 --no-stack-rlimit daemon --close-stdio -e /var/log/icinga2/error.log ??19578 /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: Jan 8 07:36:55 2024 GMT Valid Until: Feb 8 07:36:55 2025 GMT Serial: 3a:e5:5e:e6:d5:5e:cc:1d:89:be:18:0b:10:cb:7d:54:8f:82:b1:5e Signature Algorithm: sha256WithRSAEncryption Subject Alt Names: icinga.example.com Fingerprint: DB 62 0D 2D AF 73 02 F2 86 92 5E A8 50 CD 0F 4F F2 D6 9E 86 AE F6 F9 E4 D7 F2 F2 60 78 1B 92 E5 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'): c81f2a3b86534f34160ed8b776906e5452d8d09c
Belasse den API-Bind-Host und den 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 Y
, 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.
[2024-01-08 13:01:26 +0000] information/cli: Icinga application loader (version: r2.14.1-1) [2024-01-08 13:01:26 +0000] information/cli: Loading configuration file(s). [2024-01-08 13:01:26 +0000] information/ConfigItem: Committing config item(s). [2024-01-08 13:01:26 +0000] information/ApiListener: My API identity: icinga.example.com [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 IcingaApplication. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 Host. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 FileLogger. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 IdoMysqlConnection. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 4 Zones. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 CheckerComponent. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 2 Endpoints. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 2 ApiUsers. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 ApiListener. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 1 NotificationComponent. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 246 CheckCommands. [2024-01-08 13:01:26 +0000] information/ConfigItem: Instantiated 4 Services. [2024-01-08 13:01:26 +0000] information/ScriptGlobal: Dumping variables to file '/var/cache/icinga2/icinga2.vars' [2024-01-08 13:01:27 +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.
Es kann einige Zeit dauern, bis der Client-Status 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.
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 Debian 12 Server und der Konfiguration zur Überwachung eines Client-Rechners mit demselben Betriebssystem abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.