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 Sí para continuar.
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.
Se te pedirá que confirmes de nuevo la contraseña.
A continuación, se te pedirá que habilites la función ido-mysql. Selecciona Sí para continuar.
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.
Introduce el token generado en el paso anterior y pulsa el botón Siguiente para continuar.
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.
Haz clic en Siguiente para pasar a la página siguiente y seleccionar el tipo de autenticación.
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.
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.
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.
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.
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.
Puedes volver atrás para cambiar cualquiera de los ajustes. Si estás satisfecho, haz clic en Siguiente para continuar.
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.
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.
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.
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.
Si estás satisfecho, haz clic en Finalizar para completar la instalación.
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.
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.
Visita la página Visión General >> Servicios para comprobar el estado del servidor maestro de forma similar a la siguiente.
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.
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.
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.