Cómo instalar el software de monitorización Icinga 2 en Debian 12

Icinga 2 es un sistema de supervisión de código abierto que comprueba la disponibilidad de los recursos de red, notifica a los usuarios las interrupciones y genera datos de rendimiento para la elaboración de informes. Puedes supervisar servicios de red (SMTP, POP3, HTTP, NNTP, ping), recursos de host (uso de CPU, uso de disco) y componentes de red (conmutadores, routers, sensores de temperatura y humedad) utilizando Icinga2. Se puede integrar con los plugins de Nagios.

En el siguiente tutorial, aprenderás a instalar Icinga2 en un servidor Debian 12 y a conectarlo a un nodo cliente. En lugar del servidor Apache predeterminado, utilizaremos Nginx para ejecutar Icinga2 Web.

Requisitos previos

  • Dos máquinas que ejecuten Debian 12. Una de ellas actuará como servidor Maestro y otra como cliente para la monitorización.
  • Un usuario no root con privilegios sudo en ambos servidores.
  • Un nombre de dominio completo (FQDN) para el servidor maestro, icinga.example.com y el nodo cliente, client.example.com.
  • Asegúrate de que todo está actualizado.
    $ sudo apt update && sudo apt upgrade
    
  • Pocos paquetes que necesite tu sistema.
    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring ufw unzip -y
    

    Puede que algunos de estos paquetes ya estén instalados en tu sistema.

Paso 1 – Configurar el cortafuegos en el servidor maestro

El primer paso es configurar el cortafuegos. Debian viene con ufw (Uncomplicated Firewall) por defecto.

Comprueba si el cortafuegos se está ejecutando.

$ sudo ufw status

Deberías obtener la siguiente salida.

Status: inactive

Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.

$ sudo ufw allow OpenSSH

Permite el puerto 5665 que necesita el cliente Icinga2 para conectarse al servidor.

$ sudo ufw allow 5665

Permite también los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Habilita el cortafuegos

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

Comprueba de nuevo el estado del cortafuegos.

$ sudo ufw status

Deberías ver un resultado similar.

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)

Paso 2 – Instalar el servidor MariaDB

Debian 12 incluye la última versión de MariaDB. Puedes instalarla con un solo comando.

$ sudo apt install mariadb-server

Comprueba la versión de MySQL.

$ mysql --version
mysql  Ver 15.1 Distrib 10.11.4-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

Ejecuta el script de instalación segura de MariaDB.

$ sudo mariadb-secure-installation

Se te pedirá la contraseña de root. Pulsa Intro porque no le hemos puesto ninguna contraseña.

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

A continuación, se te preguntará si quieres cambiar al método de autenticación por socket Unix. El complemento unix_socket te permite utilizar las credenciales de tu sistema operativo para conectarte al servidor MariaDB. Como ya tienes una cuenta raíz protegida, introduce n para continuar.

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

A continuación, se te preguntará si quieres cambiar la contraseña de root. En Debian 12, la contraseña de root está estrechamente ligada al mantenimiento automatizado del sistema, por lo que conviene no modificarla. Escribe n para continuar.

 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n

A continuación, se te harán algunas preguntas para mejorar la seguridad de MariaDB. Escribe Y para eliminar los usuarios anónimos, desautorizar los inicios de sesión remotos de root, eliminar la base de datos de prueba y recargar las tablas de privilegios.

 ... 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!

Puedes entrar en el intérprete de comandos de MariaDB escribiendo sudo mysql o sudo mariadb en la línea de comandos.

Paso 3 – Configurar MariaDB

Accede al shell de MariaDB. Introduce tu contraseña de root cuando se te solicite.

$ sudo mysql

Crea la base de datos Icinga.

MariaDB [(none)]> CREATE DATABASE icinga2;

Crea la cuenta de usuario SQL para Icinga2. No cambies la base de datos ni el nombre de usuario porque ya están configurados por defecto. Si quieres cambiarlos, tendrás que realizar algunos pasos adicionales mientras instalas el controlador MySQL en el Paso 5. Introduce la contraseña y obtendrás un error y, a continuación, se te pedirá que vuelvas a configurar, donde podrás especificar el nombre de la base de datos y los usuarios personalizados.

MariaDB [(none)]> CREATE USER 'icinga2'@'localhost' IDENTIFIED BY 'Your_password2';

Concede todos los privilegios sobre la base de datos al usuario.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON icinga2.* TO 'icinga2'@'localhost';

Como no vamos a modificar el usuario root, debes crear otro usuario SQL para realizar tareas administrativas que empleen autenticación por contraseña. Elige una contraseña segura para éste.

MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;

Elimina los privilegios del usuario.

MariaDB [(none)]> FLUSH PRIVILEGES;

Sal del intérprete de comandos.

MariaDB [(none)]> exit

Paso 4 – Instalar Icinga2 y los plugins de Monitorización en el Servidor Maestro

Utilizaremos el repositorio oficial de Icinga2 para la instalación. Descarga e importa la clave GPG de Icinga2.

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

Ejecuta los siguientes comandos para crear y añadir la información del repositorio de Icinga2 a la lista de fuentes de APT.

$ 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

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Instala Icinga2, Icingacli y los plugins de monitorización.

$ sudo apt install icinga2 monitoring-plugins -y

Paso 5 – Instalar el controlador IDO MySQL en el Servidor Maestro

Para que Icinga2 funcione, necesita una base de datos. Para ello, necesitamos instalar el controlador IDO MySQL y configurar la conexión a la base de datos. Ejecuta el siguiente comando para instalar el controlador MySQL.

$ sudo apt install -y icinga2-ido-mysql

A continuación, se te pedirá que habilites la función ido-mysql. Selecciona para continuar.

Función Icinga IDO-MySQL

A continuación, se te pedirá que configures el controlador y crees una base de datos utilizando la utilidad dbconfig-common. Selecciona para continuar.

Configurar base de datos para Icinga2

A continuación, se te pedirá la contraseña MySQL para la base de datos icinga2. Introduce la contraseña configurada en el paso 3 para continuar.

Introduce la contraseña de la base de datos para Icinga2

Se te pedirá que confirmes de nuevo la contraseña.

Icinga2 Confirmar contraseña

Puedes comprobar los detalles de la base de datos en el archivo /etc/icinga2/features-available/ido-mysql.conf.

$ 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"
}

Activa la función ido-mysql.

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

Reinicia el servicio Icinga2.

$ sudo systemctl restart icinga2

Comprueba el estado del servicio.

$ 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

Paso 6 – Configurar la API de Icinga2

Para gestionar y configurar la monitorización de Icinga2 a través de HTTP, debes configurar la API de Icinga2. Ejecuta el siguiente comando para habilitar la API de Icinga2, generar certificados TLS para Icinga2 y actualizar las configuraciones de Icinga2.

$ sudo icinga2 api setup

Obtendrás una salida similar.

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!

El comando anterior crea un archivo /etc/icinga2/conf.d/api-users.conf con el usuario por defecto root que tiene todos los permisos sobre la API de Icinga2. Necesitamos un nuevo usuario con los permisos mínimos requeridos por Icinga Web.

Abre el archivo api-users.conf para editarlo.

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

Añade el siguiente código al final del archivo. Elige una contraseña segura para la API.

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

Anota las credenciales que se necesitarán más adelante para acceder al sitio web. El servidor API de Icinga2 escucha en el puerto 5665 por defecto. Reinicia el servicio para que los cambios surtan efecto.

$ sudo systemctl restart icinga2

El siguiente paso es instalar la interfaz Web de Icinga. Viene preconfigurada para Apache, pero nosotros utilizaremos el servidor Nginx. Por lo tanto, primero tenemos que instalar Nginx y los certificados SSL.

Paso 7 – Instalar Nginx

Debian 12 viene con una versión antigua de Nginx. Para instalar la última versión, tienes que descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

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

Añade el repositorio de la versión principal de Nginx.

$ 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

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación. En los sistemas Debian, el siguiente comando sólo funcionará con sudo.

$ sudo nginx -v
nginx version: nginx/1.25.3

Inicia el servidor Nginx.

$ sudo systemctl start nginx

Comprueba el estado del servicio.

$ 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.

Paso 8 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Debian u obtener la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Debian 12 no viene con Snapd instalado. Instala el paquete Snapd.

$ sudo apt install snapd

Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

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

Comprueba si Certbot funciona correctamente.

$ certbot --version
certbot 2.8.0

Ejecuta el siguiente comando para generar un certificado SSL.

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

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/icinga.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

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

Comprueba el servicio programador de renovación de Certbot.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

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

Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 9 – Configurar Nginx y PHP

Como Icinga está configurado para Apache, el paquete PHP-FPM no está instalado por defecto. También necesitarás el módulo PHP Imagick si quieres exportar los gráficos a PDF. Ejecuta el siguiente comando para instalar PHP-FPM y la biblioteca PHP Imagick.

$ sudo apt install php-fpm php-imagick

Configurar PHP-FPM

Abre el archivo /etc/php/8.2/fpm/pool.d/www.conf.

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

Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=www-data y group=www-data en el archivo y cámbialas por 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
...

Busca las líneas listen.owner = www-data y listen.group = www-data en el archivo y cámbialas por 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

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reinicia el servicio PHP-FPM.

$ sudo systemctl restart php8.2-fpm

Configurar Nginx

Crea y abre el archivo /etc/nginx/conf.d/icinga.conf para editarlo.

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

Pega en él el siguiente código.

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;
}

Observa que el directorio raíz que se utilizará en la configuración de Nginx es /usr/share/icingaweb2/public.

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size 64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Verifica la sintaxis del archivo de configuración de Nginx.

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

Reinicia el servicio Nginx.

$ sudo systemctl restart nginx

Paso 10 – Preparar la configuración Web

Antes de acceder a Icinga Web, necesitamos instalarlo junto con la herramienta de línea de comandos.

$ sudo apt install icingaweb2 icingacli

Añade el usuario Nginx al grupo icingaweb2.

$ sudo usermod -aG icingaweb2 nginx

Establece los permisos del directorio Icingaweb al grupo icingaweb2.

$ sudo icingacli setup config directory --group icingaweb2
Successfully created configuration directory /etc/icingaweb2

Cuando utilices Icinga Web, deberás autenticarte utilizando un token. Genera el token utilizando el siguiente comando.

$ sudo icingacli setup token create
The newly generated setup token is: 56951f01f9f77a68

Anota el token porque lo necesitarás más adelante. Siempre puedes recuperarlo más tarde utilizando el siguiente comando.

$ sudo icingacli setup token show
The current setup token is: 56951f01f9f77a68

El siguiente paso es crear una base de datos y un usuario de base de datos. Accede al intérprete de comandos MariaDB.

$ sudo mysql

Crea la base de datos Icinga Web.

MariaDB [(none)]> CREATE DATABASE icingaweb2;

Crea la cuenta de usuario SQL para Icinga Web.

MariaDB [(none)]> CREATE USER 'icingaweb2'@'localhost' IDENTIFIED BY 'Your_password3';

Concede al usuario todos los privilegios sobre la base de datos.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON icingaweb2.* TO 'icingaweb2'@'localhost';

Elimina los privilegios del usuario.

MariaDB [(none)]> FLUSH PRIVILEGES;

Sal del intérprete de comandos.

MariaDB [(none)]> exit

Reinicia Nginx y PHP-FPM para aplicar los cambios de permisos.

$ sudo systemctl restart nginx php8.2-fpm

Paso 11 – Configurar IcingaWeb

Abre la URL https://icinga.example.com/setup en tu navegador y obtendrás la siguiente pantalla.

Página de configuración web de Icinga

Introduce el token generado en el paso anterior y pulsa el botón Siguiente para continuar.

Configuración de los módulos Icinga

En la siguiente pantalla, elige los módulos que quieres instalar y pulsa Siguiente para continuar. El módulo de Monitorización está seleccionado para ti por defecto. En la página siguiente, se te mostrarán los requisitos y si se han cumplido. Asegúrate de que todos los requisitos están marcados en verde.

Página de requisitos de Icinga

Haz clic en Siguiente para pasar a la página siguiente y seleccionar el tipo de autenticación.

Tipo de autenticación de Icinga

Por defecto, el tipo de autenticación es Base de datos. Haz clic en Siguiente para continuar. En la página siguiente se te pedirá que introduzcas las credenciales de la base de datos.

Credenciales de la Base de Datos Web Icinga

Introduce las credenciales de la base de datos creadas en el paso 10. Haz clic en el botón Validar configuración para verificar las credenciales. Una vez verificadas, haz clic en Siguiente para continuar. A continuación, se te pedirá que nombres el backend de autenticación.

Backend de autenticación Icinga

Deja el valor por defecto y haz clic en Siguiente para continuar. En la página siguiente, se te pedirá que crees una cuenta de administrador.

Detalles del Administrador de Icinga

Introduce las credenciales de tu nueva cuenta de administrador y haz clic en Siguiente para continuar. A continuación, se te mostrará la página Configuración de la aplicación.

Configuración de la aplicación Icinga

La opción Activar política de seguridad de contenido estricta no está marcada. Márcala y deja el resto de valores por defecto sin modificar. Haz clic en Siguiente para continuar. Se te pedirá que revises la configuración en la última página.

Configuración de la revisión de Icinga

Puedes volver atrás para cambiar cualquiera de los ajustes. Si estás satisfecho, haz clic en Siguiente para continuar.

Bienvenida al Módulo de Configuración de Icinga Web 2

Haz clic en Siguiente para continuar con la configuración del módulo de monitorización. A continuación, se te pedirán las credenciales de la base de datos Icinga.

Credenciales de la base de datos Icinga

Rellena las credenciales de la base de datos en el paso 3 y haz clic en Validar configuración para verificar la conexión. Una vez verificada, haz clic en Siguiente para continuar. A continuación, se te pedirá que rellenes los detalles de la API.

Detalles de la API de Icinga

Rellena las credenciales de la API creadas en el paso 6, 127.0.0.1 como Host, y haz clic en Validar configuración para verificar la conexión. Haz clic en Siguiente para continuar. A continuación, se te pedirá que elijas variables personalizadas protegidas para supervisar la seguridad.

Monitorización de la seguridad en Icinga

Deja los valores por defecto y haz clic en Siguiente para continuar. A continuación, se te pedirá que revises la configuración de Monitorización. Puedes volver atrás y cambiarla si quieres.

Revisión de la configuración de la monitorización de Icinga

Si estás satisfecho, haz clic en Finalizar para completar la instalación.

Finalizada la instalación de Icinga

Una vez finalizada con éxito, haz clic en el botón Iniciar sesión en Icinga Web 2 para abrir la página de inicio de sesión (https://icinga.example.com).

Página de inicio de sesión de Icinga Web

Introduce los datos de tu cuenta de administrador y haz clic en el botón Iniciar sesión para abrir el panel de control de Icinga Web.

Tablero Web Icinga

Visita la página Visión General >> Servicios para comprobar el estado del servidor maestro de forma similar a la siguiente.

Página de Servicios Web Icinga

Paso 12 – Inicializar el Servidor Maestro

El siguiente paso es inicializar el servidor maestro como nodo maestro. El nodo maestro actúa como controlador principal de la pila de monitorización. Ejecuta el siguiente comando para iniciar el proceso de inicialización.

$ sudo icinga2 node wizard

Se te preguntará si se trata de la configuración de un agente. Introduce n para configurar el nodo maestro.

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

A continuación, se te preguntará por el nombre común o el nombre de dominio. Pulsa Intro para seleccionar el valor por defecto que se muestra si es el correcto. En caso contrario, introduce el dominio y pulsa Intro.

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.

A continuación, introduce el nombre de la zona maestra y pulsa Intro para continuar. En nuestro caso, es el mismo que el nombre del dominio del servidor.

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

A continuación, se te preguntará si quieres añadir alguna zona global adicional. Pulsa n para omitir la adición y pulsa Intro para continuar.

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

En el siguiente paso, deja el host y el puerto de enlace API por defecto y pulsa Intro para continuar.

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

A continuación, pulsa Y para desactivar la configuración dentro del directorio /etc/icinga2/conf.d/, ya que utilizaremos la configuración de Zonas Icinga2 más adelante.

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!

Reinicia el servicio para aplicar los cambios.

$ sudo systemctl restart icinga2

Y por último, ejecuta el siguiente comando para crear un ticket para el servidor cliente. Utiliza como argumento el nombre de dominio del cliente.

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

Anota el ticket para utilizarlo más adelante.

Paso 13 – Inicializar el Agente Icinga2 en el Servidor Cliente

Accede al servidor cliente e instala Icinga2 y los plugins de monitorización. Para ello, ejecuta los siguientes comandos.

$ 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

Comprueba si el servicio Icinga está habilitado y en ejecución.

$ 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

Inicia el Asistente del Nodo Icinga para inicializar el agente en el servidor cliente.

$ sudo icinga2 node wizard

Se te preguntará si se trata de la configuración de un agente. Introduce Y para configurar el agente.

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

A continuación, se te pedirá que especifiques el nombre común. Deja el valor por defecto y pulsa Intro para continuar.

Starting the Agent/Satellite setup routine...

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

A continuación, especifica el punto final padre como icinga.example.com e introduce Y para establecer una conexión con el nodo padre desde el cliente.

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

A continuación, introduce la dirección IP del servidor maestro y deja el valor del puerto por defecto.

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

Introduce N para rechazar la adición de más puntos finales maestros.

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

A continuación, se te mostrará la información del certificado del servidor maestro. Pulsa Y para confirmar la información y continuar.

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

A continuación, introduce el ticket de solicitud generado en el paso anterior.

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

Deja el host y el puerto de enlace de la API por defecto y pulsa Intro para continuar.

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

A continuación, introduce Y dos veces para aceptar la configuración y los comandos del nodo maestro.

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

Pulsa Intro para aceptar el nombre de zona local por defecto, que es el nombre de dominio del cliente. Introduce el nombre del dominio maestro como nombre de la zona padre para continuar.

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

Pulsa N para omitir la adición de zonas globales adicionales.

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

Pulsa Y para omitir la desactivación de las configuraciones del directorio /etc/icinga2/conf.d/.

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!

Reinicia el servicio Icinga para aplicar los cambios de configuración.

$ sudo systemctl restart icinga2

Paso 14 – Crear la configuración de zonas en el servidor maestro

Vuelve a entrar en el servidor y crea un nuevo directorio como zona por defecto.

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

A continuación, crea un archivo de configuración en el directorio recién creado y ábrelo para editarlo.

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

Pega en él el siguiente código. La dirección IP del código debe coincidir con la dirección IP pública del cliente.

// 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
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.

Crea y abre el archivo de servicios para editarlo.

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

Pega en él el siguiente código.

// 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
 }

Ejecuta el siguiente comando para verificar la configuración.

$ sudo icinga2 daemon -C

Obtendrás un resultado similar.

[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).

Reinicia el servicio Icinga para aplicar los cambios de configuración.

$ sudo systemctl restart icinga2

Paso 15 – Verificación en el Panel de Control de Icinga

Abre el Panel Web de Icinga2 para verificar la información de la máquina cliente. Selecciona Visión General >> Hosts en el menú de la izquierda, y verás la siguiente pantalla.

Página Hosts del Panel Web de Icinga

El estado del cliente puede tardar algún tiempo en mostrarse como UP. Haz clic en el Cliente para ver más detalles sobre él. Selecciona Visión General >> Servicios y verás los siguientes estados sobre el cliente.

Detalles del Servicio de Atención al Cliente de Icinga

Esto confirma que el cliente está enviando estadísticas correctamente al servidor maestro Icinga.

Conclusión

Con esto concluye nuestro tutorial sobre la instalación del software de monitorización Icinga en un servidor Debian 12 y su configuración para monitorizar una máquina cliente que ejecuta el mismo sistema operativo. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...