Instalación y configuración de Nagios Core en Ubuntu 21.04

November 17th, 2021

jose_mesa
José Mesa | SysAdmin & Cloud engineer
en Qualoom Expertise Technology

Como podemos leer en Wikipedia

Nagios Wikipedia

Esta monitorización nos permite conocer el estado de un gran número de parámetros de nuestro sistema operativo, así como el establecimiento de alertas que podremos recibir a través de correo electrónico o SMS cuando los valores de estos parámetros difieran de las definiciones que previamente hayamos determinado como administradores del sistema.

A fecha de octubre de 2021, la última versión estable disponible de Nagios Core es la 4.4.6 (publicada el 28 de abril de 2020). Cabe señalar en este punto que debemos diferenciar entre Nagios Core, una solución libre y gratuita y de la que tratará este artículo, y Nagios XI, una solución de pago más potente, que tiene como núcleo central el propio Nagios Core, pero mejorado con nuevas funcionalidades para aumentar su capacidad, como un asistente de configuración, guías de supervisión, interfaz gráfica mejorada, un mayor número de medidas de seguridad, etc. Así pues, a partir de ahora, cuando hagamos uso del término Nagios, nos estaremos refiriendo a Nagios Core.

En este artículo vamos a explicar cómo llevar a cabo la instalación de Nagios Core en una máquina con Ubuntu Server, además de los pasos necesarios para poder monitorizar máquinas con Windows y Linux como SO.

Instalación de Nagios Core

La instalación la realizaremos sobre Ubuntu Server 20.04.3. En primer lugar, es recomendable actualizar todos los repositorios de nuestro sistema operativo. Para ello, ejecutamos:

$ sudo apt update $ sudo apt upgrade

Una vez actualizados los repositorios, instalamos las dependencias necesarias, entre las que se encuentran, entre otras, Apache y PHP, fundamentales para poder hacer uso de Nagios en nuestra máquina:

$ sudo apt install wget unzip vim curl gcc openssl build-essential libgd-dev libssl-dev libapache2-mod-php php-gd php apache2

Accedemos a la web oficial de descarga y comprobamos cuál es la última versión disponible. Como comentábamos en la introducción del artículo, a fecha de noviembre de 2021, la última versión disponible es la 4.4.6.

Nagios download

Procedemos a descargarla en nuestro equipo:

$ wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.6.tar.gz

Y descomprimimos el paquete descargado:

$ tar zxvf nagios-4.4.6.tar.gz

Configurando Nagios Core

Para poder hacer uso de Nagios, usaremos Apache como servidor web de la aplicación. Para ello, accedemos a la carpeta recién generada y habilitamos Apache:

$ cd nagios-4.4.6 $ sudo ./configure --with-httpd-conf=/etc/apache2/sites-enabled

Si todo va bien, debería mostrarse en pantalla un mensaje de este tipo:

General Options: ------------------------- Nagios executable: nagios Nagios user/group: nagios,nagios Command user/group: nagios,nagios Event Broker: yes Install ${prefix}: /usr/local/nagios Install ${includedir}: /usr/local/nagios/include/nagios Lock file: /run/nagios.lock Check result directory: /usr/local/nagios/var/spool/checkresults Init directory: /lib/systemd/system Apache conf.d directory: /etc/apache2/sites-enabled Mail program: /bin/mail Host OS: linux-gnu IOBroker Method: epoll Web Interface Options: ------------------------ HTML URL: http://localhost/nagios/ CGI URL: http://localhost/nagios/cgi-bin/ Traceroute (used by WAP): Review the options above for accuracy. If they look okay, type 'make all' to compile the main program and CGIs.

A continuación, compilamos la aplicación:

$ sudo make all

Una vez compilada la aplicación, debemos crear un usuario y un grupo nagios, e incluir a este usuario en el grupo de Apache www-data:

$ sudo make install-groups-users $ sudo groupadd -r nagios $ sudo useradd -g nagios $ sudo usermod -aG nagios www-data

Ya podemos ejecutar la instalación:

$ sudo make install

Y los scripts de arranque de Nagios con adecuación de permisos:

$ make install-init $ make install-daemoninit $ make install-commandmode

Continuamos con la instalación de ejemplos de configuración de Nagios:

$ make install-config

Y los ficheros de configuración de Apache; después, reiniciamos el servicio:

$ sudo make install-webconf $ sudo systemctl restart apache2

Ahora, debemos habilitar el módulo rewrite y CGI:

$ a2enmod rewrite $ a2enmod cgi

Para permitir el acceso a la web de Nagios, introducimos el siguiente comando:

$ htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

En este punto, debemos establecer una contraseña para el usuario nagiosadmin, necesaria para la posterior identificación que nos permita el acceso web.

Ya podemos habilitar nuestro servicio Nagios:

$ sudo systemctl enable --now nagios

A continuación, comprobaremos el estado del servicio:

$ systemctl status nagios

Si hemos seguido los pasos correctamente y todo ha ido como debe, comprobamos que el servicio ha arrancado correctamente. Debemos ver un estado similar al siguiente:

nagios.service - Nagios Core 4.4.6 Loaded: loaded (/lib/systemd/system/nagios.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-09-28 12:57:36 UTC; 21s ago Docs: https://www.nagios.org/documentation Process: 10759 ExecStartPre=/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg (code=exited, status=0/SUCCESS) Process: 10760 ExecStart=/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg (code=exited, status=0/SUCCESS) Main PID: 10761 (nagios) Tasks: 6 (limit: 1073) Memory: 2.5M CGroup: /system.slice/nagios.service ├─10761 /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg ├─10762 /usr/local/nagios/bin/nagios --worker /usr/local/nagios/var/rw/nagios.qh ├─10763 /usr/local/nagios/bin/nagios --worker /usr/local/nagios/var/rw/nagios.qh ├─10764 /usr/local/nagios/bin/nagios --worker /usr/local/nagios/var/rw/nagios.qh ├─10765 /usr/local/nagios/bin/nagios --worker /usr/local/nagios/var/rw/nagios.qh └─10778 /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg

Accediendo a la consola de Nagios Core

Con el servicio corriendo, ya podemos acceder a la web de gestión de Nagios; para ello, introducimos en nuestro navegador la IP de nuestra máquina, seguido de /nagios. En el caso que nos ocupa:

http://192.168.1.103/nagios/

Introducimos las credenciales necesarias: el usuario por defecto es nagiosadmin, y la contraseña que hayamos establecido durante el proceso de instalación:

Imagen1

Ya podemos navegar por los distintos apartados que se muestran en la consola:

Imagen2

Instalando plugins y NRPE

Veamos ahora cómo monitorizar equipos cliente. Como primer paso, es necesario realizar la instalación de los plugins requeridos para poder comunicar el equipo cliente con el servidor donde tenemos el servicio de Nagios instalado. En el caso de los clientes Linux, debemos llevar a cabo los mismos pasos en cada uno de ellos.

Accedemos a los plugins de Nagios para comprobar cuál es la última versión de plugins disponible. Tras ello, nos conectamos a nuestro servidor Nagios y descargamos e instalamos las dependencias necesarias:

$ sudo apt install -y fping libcrypt-x509-perl libdatetime-format-dateparse-perl libdbi-dev libkrb5-dev libldap2-dev libmysqlclient-dev libnet-snmp-perl libssl-dev libtext-glob-perl libwww-perl postgresql-server-dev-12 qstat rpcbind smbclient snmp

Una vez instaladas, descargamos, descomprimimos y compilamos la última versión de plugins disponible:

$ cd /tmp $ wget http://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz $ tar xzf nagios-plugins-2.2.1.tar.gz $ cd nagios-plugins-2.2.1 $ gunzip -c nagios-plugins-2.2.1.tar.gz | tar xf - $ sudo ./configure $ sudo make $ sudo make install

Cuando finalice el proceso de instalación, podremos listar los binarios, que se localizan en /usr/local/nagios/libexec/.

Abordemos ahora la instalación de NRPE, un servicio dedicado a atender y ejecutar las peticiones lanzadas desde nuestro servidor Nagios. Como sucede en el caso de los plugins, también debemos instalar NRPE tanto en nuestro servidor Nagios como en aquellas máquinas Linux que queramos monitorizar.

Comencemos por la parte del servidor. En primer lugar, debemos comprobar cuál es la última versión disponible de NRPE. Una vez localizada, la descargamos e instalamos haciendo uso de los siguientes comandos:

$ cd /tmp $ wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.0.3/nrpe-4.0.3.tar.gz $ tar xvf nrpe-4.0.3.tar.gz $ cd nrpe-nrpe-4.0.3 $ sudo apt install -y libwrap0-dev $ sudo ./configure $ sudo make all $ sudo make install $ sudo make install-config $ sudo make install-inetd

Para finalizar, debemos arrancar el servicio NRPE y reiniciar xinetd:

$ sudo systemctl enable nrpe $ sudo systemctl start nrpe $ sudo systemctl restart xinetd

Repetimos los mismos pasos para cada una de las máquinas cliente Linux que queramos monitorizar. Una vez instalado NRPE en nuestros clientes, debemos habilitar el servicio. Para ello, editamos el siguiente fichero de configuración:

$ sudo vi /usr/local/nagios/etc/nrpe.cfg

Debemos localizamos la directiva allowed_host, en la que debemos establecer la IP de la máquina a la que queremos permitir la conexión, en este caso, el servidor Nagios con IP 192.168.1.103. Veamos cómo quedaría la línea una vez editada a través de un cat del fichero de configuración:

$ sudo cat /usr/local/nagios/etc/nrpe.cfg | grep ^allowed allowed_hosts=127.0.0.1,192.168.1.103

Para que Nagios pueda hacer uso del binario nrpe, debemos definirlo también en este fichero de configuración. Localizamos en el fichero el apartado donde se realizan las definiciones de comandos, y añadimos la siguiente:

define command { command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }

Si seguimos moviéndonos por este fichero de configuración, podremos ver algunos ejemplos de los comandos que la máquina cliente aceptará por parte de nuestro servidor Nagios:

# The following examples use hardcoded command arguments... # This is by far the most secure method of using NRPE command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10 command[check_load]=/usr/local/nagios/libexec/check_load -r -w .15,.10,.05 -c .30,.25,.20 command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

Podremos comprobar que hay muchos más que se encuentran comentados y, por tanto, deshabilitados; los podremos “descomentar” para poder hacer uso de ellos, asegurándonos antes de que las nomenclaturas utilizadas, tales como las referencias a los discos del sistema, se ajustan a las de nuestro sistema.

Una vez realizados los ajustes en el fichero de configuración, arrancamos el servicio:

$ sudo systemctl start nrpe.service

Ya tenemos nuestro servicio Nagios corriendo y hemos comenzado a adecuar nuestros equipos cliente Linux para poder llevar a cabo su monitorización.

Instalando NSClient

En el caso de monitorización de máquinas Windows, lo recomendable es instalar el agente NSClient en cada una de ellas.

En la web oficial podremos localizar la última versión de NSClient disponible para nuestro sistema, siendo la 0.5.2.35 la más reciente en el momento de redactar este artículo . Descargamos el paquete y llevamos a cabo su instalación:

Imagen3

Seleccionamos la instalación según la herramienta de monitorización, en este caso, la de tipo Generic:

Imagen4

A continuación, seleccionamos el tipo de instalación; elegiremos Typical:

Imagen5

Ahora, debemos definir la IP de nuestro servidor y una contraseña, estableciendo así que máquinas tienen permitido el acceso al sistema, en este caso, nuestra máquina con Ubuntu Server:

Imagen6

Por último, ejecutamos la instalación:

Imagen7

Configurando alarmas

Nagios cuenta con una serie de ficheros de configuración que se localizan en la ruta /usr/local/nagios/etc/objects/. Entre otros, tenemos el fichero de configuración windows.cfg, en el que debemos definir las máquinas con SO Windows que queramos monitorizar. Veamos un ejemplo de cómo monitorizar un cliente con Windows Server a través de este fichero de configuración:

define host { use windows-server ; Inherit default values from a template host_name cliente1 ; The name we're giving to this host alias Cliente 1 ; A longer name associated with the host address 192.168.1.110 ; IP address of the host }

Es importante destacar que debemos definir un host por cada máquina Windows que queramos monitorizar. En este mismo fichero, más abajo, podemos localizar los apartados de definición de servicios a monitorizar. Veamos cómo definir un servicio que nos permita conocer el uptime de nuestra máquina, es decir, el tiempo que lleva levantada de forma ininterrumpida:

define service use generic-service host_name cliente1 service_description Uptime check_command check_nt!UPTIME }

Veamos otro ejemplo, en este caso, de un servicio que nos permita conocer el estado de ocupación de un disco de la máquina cliente:

define service { use generic-service host_name cliente1 service_description C:\Local Disk check_command check_nt!USEDDISKSPACE!-l c -w 90 -c 95 }

Veamos el significado de los parámetros de la línea del check_nt: el parámetro c hace referencia a la unidad de disco que queramos monitorizar, en este caso C:\, mientras que con los parámetros -w y -c, estaremos definiendo los niveles de ocupación que generarán alarmas de tipo warning y de tipo critical, cuando se supere el 90% y el 95% de ocupación respectivamente. Cómo no, estos valores son ajustables, y podremos definirlos de la manera que creamos conveniente y que se adapte a nuestra operativa diaria.

Otro fichero de configuración crucial en Nagios es commands.cfg; en él estarán definidos todos aquellos comandos de los que haremos uso a través del fichero de definición de hosts visto anteriormente. Pero lo más importante ahora, es que debemos establecer aquí la contraseña que permita al comando check_nt conectar con la máquina destino. Debemos establecerla a continuación del parámetro -s, y debe coincidir con la utilizada durante los agentes de monitorización en las máquinas cliente. Veamos cómo quedaría:

define command { command_name check_nt command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s YdYXhvTs -v $ARG1$ $ARG2$ }

En este momento es muy recomendable comprobar que nuestra configuración de Nagios es correcta. Para ello, ejecutaremos en nuestro servidor el siguiente comando:

$ sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg Nagios Core 4.4.6 Copyright (c) 2009-present Nagios Core Development Team and Community Contributors Copyright (c) 1999-2009 Ethan Galstad Last Modified: 2020-04-28 License: GPL Website: https://www.nagios.org Reading configuration data... Read main config file okay... Read object config files okay... Running pre-flight check on configuration data... Checking objects... Checked 2 services. Checked 2 hosts. Checked 1 host groups. Checked 0 service groups. Checked 1 contacts. Checked 1 contact groups. Checked 2 commands. Checked 5 time periods. Checked 0 host escalations. Checked 0 service escalations. Checking for circular paths... Checked 2 hosts Checked 0 service dependencies Checked 0 host dependencies Checked 2 timeperiods Checking global event handlers... Checking obsessive compulsive processor commands... Checking misc settings... Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check

Este chequeo con resumen nos permite comprobar que toda la configuración establecida hasta el momento es correcta.

Reiniciamos el servicio de Nagios en nuestro servidor para aplicar los cambios:

$ sudo service nagios restart

Ahora, si accedemos a la consola, dentro del apartado Hosts podremos ver cómo nuestro alarmado ya se encuentra activo:

Imagen8

Ahora debemos preguntarnos qué máquinas y servicios nos interesa monitorizar, y establecer los ajustes y la parametrización que nos permita ponernos alerta ante cualquier cambio no deseado que ocurra en nuestras máquinas a través de los distintos niveles de severidad que creamos convenientes, de manera que podremos intervenir con mayor o menos urgencia.

Activando notificaciones por correo

Una de las características más atractivas de Nagios es el poder recibir notificaciones a través de nuestro correo electrónico cuando el estado de una máquina o servicio sea distinto al deseado. Y es que, aunque la consola nos ofrece una gran cantidad de información de todas nuestras máquinas, estar continuamente monitorizando su estado de forma visual no es eficiente para nuestra labor de administradores del sistema.

Recibir una alerta a través del correo electrónico nos permite actuar en consecuencia de una forma rápida. Recordemos que podemos establecer alertas de tipo warning, lo que nos permite adelantarnos al problema y solucionarlo antes de que se vuelva crítico. Por ejemplo, si un disco de una de nuestras máquinas se está quedando sin espacio, podremos comprobar qué está sucediendo y liberar espacio si establecemos una alarma tipo warning que nos informe cuando el disco se encuentre a un 90% de ocupación; de esta forma, podremos comenzar a solucionar el problema antes de que se torne en crítico para nuestra operativa.

Para recibir notificaciones vía correo electrónico, debemos hacer uso de un servidor de correo. En nuestro caso, utilizaremos Postfix, un servicio de correo libre y de código abierto. Y como servicio de correo, usaremos una cuenta de Gmail.

Para instalar Postfix y las dependencias necesarias, ejecutamos en nuestra máquina servidor:

$ sudo apt-get install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules

Una vez instalado, debemos configurar el servicio. Editamos con VI o nuestro editor de textos favorito el siguiente fichero de configuración (siempre es aconsejable realizar una copia del fichero a modo de backup):

$ sudo vi /etc/postfix/main.cf

Nos movemos al final del fichero y trasladamos la siguiente parametrización:

relayhost =[smtp.gmail.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_CAfile = /etc/postfix/cacert.pem smtp_use_tls = yes

A continuación, generamos el fichero a través del cual se realizará la identificación que permita el acceso al buzón de correo:

$ sudo vi /etc/postfix/sasl_passwd

En este fichero, incluiremos la siguiente línea:

[smtp.gmail.com]:587 MiCuenta@gmail.com:MiContraseña

Debemos adecuar los campos “MiCuenta” y “MiContraseña” por las propias de nuestra cuenta de Gmail. Ahora debemos permitir que root tenga permisos de lectura y escritura sobre este fichero:

$ sudo chmod 600 /etc/postfix/sasl_passwd

Para poder hacer uso de este archivo, debemos convertirlo al formato compatible con Postfix:

$ sudo postmap /etc/postfix/sasl_passwd

Y adecuamos los permisos como hicimos anteriormente:

$ sudo chmod 600 /etc/postfix/sasl_passwd.db

Reiniciamos el servicio para aplicar los cambios:

$ sudo service postfix reload

Ya podremos enviar correos. Realicemos una prueba:

# echo "Hola Mundo" | mail -s "Probando envío de notificaciones" MiCuenta@gmail.com

El parámetro -s corresponde al subject, es decir, el asunto, del correo, mientras que el echo conformará el cuerpo de este.

Ya tenemos activadas las notificaciones por correo; veamos ahora cómo configurar las alertas de Nagios.

Configurando alertas en Nagios

Para configurar el envío de correos con las alertado configurado, debemos editar el fichero de configuración de Nagios contacts.cfg:

$ sudo vi /usr/local/nagios/etc/objects/contacts.cfg

Veamos una definición de contacto:

define contact { contact_name nagiosadmin ; Short name of user use generic-contact ;Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user email MiCuenta@gmail.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ****** }

Las notificaciones recibidas a través de Nagios pueden ser de varios tipos. Para monitorizar el estado de nuestras máquinas, podemos configurar alarmas de caída (d de down) y recuperación (r de recovery). En cuanto al estado de los servicios, podemos configurar alarmas de tipo warning (w), critical (c), unknow (u) y recovery (y).

Es ahora cuando debemos plantearnos el tipo de monitorización y las notificaciones que queremos recibir. Veamos parte del contenido del fichero templates.cfg. Este fichero cuenta con plantillas para la monitorización de SSOO Linux y Windows, y también para dispositivos, como switches o impresoras, y para servicios. Veamos un ejemplo de monitorización de una máquina Windows donde se define el nombre de la máquina, los intervalos de chequeo, los receptores de las alarmas, etc.

# Windows host definition template # This is NOT a real host, just a template! define host { name windows-server ; The name of this host template use generic-host ; Inherit default values from the generic-host template check_period 24x7 ; By default, Windows servers are monitored round the clock check_interval 10 ; Actively check the server every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each server 10 times (max) check_command check-host-alive ; Default command to check if servers are "alive" notification_period 24x7 ; Send notification out at any time - day or night notification_interval 20 ; Resend notifications every 30 minutes notification_options d,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default hostgroups windows-servers ; Host groups that Windows servers should be a member of register 0 ; DON'T REGISTER THIS - ITS JUST A TEMPLATE }

También se incluyen ejemplos de plantillas para servicios:

define service { name generic-service ; The 'name' of this service template active_checks_enabled 1 ; Active service checks are enabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 0 ; Default is to NOT check service 'freshness' notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts is_volatile 0 ; The service is not volatile check_period 24x7 ; The service can be checked at any time of the day max_check_attempts 3 ; Re-check the service up to 3 times in order to determine its final (hard) state check_interval 10 ; Check the service every 10 minutes under normal conditions retry_interval 2 ; Re-check the service every two minutes until a hard state can be determined contact_groups admins ; Notifications get sent out to everyone in the 'admins' group notification_options w,u,c,r ; Send notifications about warning, unknown, critical, and recovery events notification_interval 60 ; Re-notify about service problems every hour notification_period 24x7 ; Notifications can be sent out at any time register 0 ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE! }

De nuevo, se nos proporciona una parametrización muy variada para adaptar estas alertas a nuestros requerimientos: habilitado/deshabilitado de alarmas, períodos e intervalos de chequeo, número de reintentos antes de enviar una notificación, tipos de notificación que queremos incluir (las w,u,c,r que comentábamos anteriormente), etc.

El receptor de estas alertas se define en el fichero de configuración nagios.cfg. Debemos localizar el campo admin_email e introducir nuestra cuenta de correo:

$ sudo vi /usr/local/nagios/etc/nagios.cfg admin_email=MiCuenta@gmail.com

Reiniciamos el servicio:

$ sudo service nagios restart

Por defecto, vamos a recibir más alertas de las necesarias; si configuramos un alarmado demasiado verboso, es posible que al final no estemos prestando la atención que deberíamos a las alertas recibidas, por lo será nuestra responsabilidad ir adaptando el criterio de alarmado para que se adapte a nuestras necesidades reales.

Contacta con nosotros aquí