Cómo instalar el software de monitorización Icinga 2 en Ubuntu 22.04 LTS

Icinga2 es un software de supervisión de red gratuito y de código abierto que puede comprobar la disponibilidad de los recursos de la red y notifica a los usuarios las interrupciones. 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 Ubuntu 22.04 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 Ubuntu 22.04. 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 ubuntu-keyring 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. Ubuntu 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 MySQL

Ubuntu 22.04 incluye la última versión de MySQL. Puedes instalarla con un solo comando.

$ sudo apt install mysql-server

Comprueba la versión de MySQL.

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

Este paso es necesario para las versiones de MySQL 8.0.28 y superiores. Entra en la Shell de MySQL.

$ sudo mysql

Ejecuta el siguiente comando para establecer la contraseña de tu usuario root. Asegúrate de que tiene una mezcla de números, mayúsculas, minúsculas y caracteres especiales.

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

Sal del intérprete de comandos.

mysql> exit

Ejecuta el script de instalación segura de MySQL.

$ sudo mysql_secure_installation

Primero se te pedirá la contraseña de root. Introdúcela. A continuación, se te pedirá que instales el Componente Validar Contraseña. Comprueba la seguridad de las contraseñas utilizadas en MySQL. Pulsa Y para instalarlo. A continuación, se te pedirá que establezcas el nivel de la política de validación de contraseñas. Elige 2, ya que es el más fuerte.

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

A continuación, introduce N para negarte a cambiar la contraseña de root. Además, introduce Y para eliminar usuarios anónimos, no permitir inicios de sesión remotos de root, eliminar la base de datos de prueba y recargar las tablas de privilegios.

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!

Paso 3 – Configurar MySQL

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

$ sudo mysql -u root -p

Crea la base de datos Icinga.

mysql> 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 tu base de datos personalizada y los usuarios.

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

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

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

Borra los privilegios del usuario.

mysql> FLUSH PRIVILEGES;

Sal del intérprete de comandos.

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

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Instala Icinga2 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

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

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

Función Icinga IDO-MySQL

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

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

Habilita la función ido-mysql.

$ sudo icinga2 feature enable ido-mysql

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

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.

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

Anota las credenciales que serán necesarias más adelante para acceder a la web. El servidor API de Icinga2 escucha por defecto en el puerto 5665. 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

Ubuntu 22.04 viene con una versión antigua de Nginx. Para instalar la última versión, necesitas 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 estable de Nginx.

$ 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

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.24.0

Iniciar el servidor Nginx.

$ sudo systemctl start nginx

Paso 8 – Instalar SSL

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

Ubuntu 22.04 viene con Snapd instalado por defecto. 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

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 renovaciones 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 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

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.1/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.1/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.1-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.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;
}

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, debemos configurarlo. 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: 3c4d4e155635f512

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: 3c4d4e155635f512

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

$ sudo mysql -u root -p

Crea la base de datos Icinga Web.

mysql> CREATE DATABASE icingaweb2;

Crea la cuenta de usuario SQL para Icinga Web.

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

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

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

Elimina los privilegios del usuario.

mysql> FLUSH PRIVILEGES;

Sal del intérprete de comandos.

mysql> exit

Paso 11 – Configurar IcingaWeb

Abre la URL https://icinga.example.com 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 de Configuración de la Aplicación.

Configuración de la aplicación Icinga

Deja todos los valores por defecto para la aplicación y la configuración de registro y 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 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.

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.

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 de 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'
365cd931d3091537622a95b113b17775893a224f

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

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

$ 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

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

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'): 365cd931d3091537622a95b113b17775893a224f

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

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

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 de los Servicios de Cliente Web 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 Ubuntu 22.04 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...