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.
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.
Als nächstes wirst du gefragt, ob du die Funktion ido-mysql aktivieren möchtest. Wähle Ja, um fortzufahren.
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.
Gib den im vorherigen Schritt erzeugten 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 ü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.
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.
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.
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 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.
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 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.
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.
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.