Nagios: Instalación Nagios 4.4.7 en Ubuntu 20.04

Instalación de Nagios 4.4.7 sobre Ubuntu 20.04, sobre MV y no CT

  • Instalamos programas adicionales
apt install htop net-tools snapd
  • Configuramos la hora
//America/Costa_Rica
dpkg-reconfigure tzdata
  • Requisitos
sudo apt-get install -y autoconf gcc libc6 make wget unzip apache2 php libapache2-mod-php7.4 libgd-dev -y

sudo apt-get install openssl libssl-dev -y

apt install build-essential libgd-dev openssl libssl-dev unzip apache2 php gcc libdbi-perl libdbd-mysql-perl perl make php-gd libapache2-mod-php libperl-dev daemon wget apache2-utils 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 libgd-dev libltdl-dev traceroute -y
  • Hacemos lo mismo con los plugin, de hecho los vamos a instalar primero

Instalación de plugins

guia: 1

Vamos a descargar Nagios Core para Ubuntu 20.04 LTS desde el sitio web del proyecto, donde encontraremos la última versión estable

  • Descargamos lo plugins
cd /tmp
wget -q https://github.com/nagios-plugins/nagios-plugins/releases/download/release-2.4.0/nagios-plugins-2.4.0.tar.gz
  • Instalamos algunas dependencias necesarias para ciertos plugins, si crees que alguna no te interesa simplemente no la instales:
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
  • Descomprimimos el paquete del código fuente de los plugins de Nagios en el directorio actual:
tar xf nagios-plugins-2.4.0.tar.gz
  • Cambiamos el directorio de trabajo a la carpeta que se acaba de crear:
cd nagios-plugins-2.4.0/
  • Y configuramos la compilación:
./configure
  • Compilamos Nagios Core:
make
  • Y realizamos la instalación
make install
  • Ya podemos salir del directorio de trabajo actual:
cd ..
  • Y podemos eliminarlo con seguridad:
rm -rf nagios-plugins-2.4.0
  • Los plugins quedan instalados como binarios ejecutables en la ruta /usr/local/nagios/libexec/:
ls /usr/local/nagios/libexec
  • Estos plugins pueden ejecutarse perfectamente desde consola como cualquier otro comando:
/usr/local/nagios/libexec/check_uptime
  • Algunos plugins, como el anterior, pueden funcionar sin necesidad de indicar parámetros, pero otros los necesitan obligatoriamente y nos mostrarán el modo de uso al lanzarlos en consola:
/usr/local/nagios/libexec/check_users
  • En este caso el plugin check_users requiere el parámetro -w para indicar el umbral de usuarios que se consideraría como alarmante y el parámetro -c para indicar el número crítico de usuarios, así que ya sabemos cómo probar este plugin con los valores que queramos:
/usr/local/nagios/libexec/check_users -w 2 -c 5
  • Para interpretar qué significan los parámetros requeridos o indicados en el modo de uso, podemos lanzar el plugin con el parámetro -h y así obtener ayuda:
/usr/local/nagios/libexec/check_users -h
  • Es importante conocer cómo funcionan los plugins que nos interesen en el momento de personalizar la monitorización de nuestros sistemas, ya que Nagios Core no usa directamente los plugins, sino definiciones de comandos que utilizan los plugins con parámetros y valores establecidos explícitamente.

Descargar, compilar e instalar Nagios Core en Ubuntu 20.04 LTS

Vamos a descargar Nagios Core para Ubuntu 20.04 LTS desde el sitio web del proyecto, donde encontraremos la última versión estable:

  • Descargamos el paquete .tar.gz:
cd /tmp
wget -q https://github.com/NagiosEnterprises/nagioscore/releases/download/nagios-4.4.7/nagios-4.4.7.tar.gz
  • Instalamos algunas herramientas y dependencias que necesitaremos:
apt install -y libgd-dev libltdl-dev traceroute unzip
  • Descomprimimos el paquete de Nagios Core:
tar xf nagios-4.4.7.tar.gz
  • Cambiamos el directorio de trabajo:
cd nagios-4.4.7/
  • Configuramos la compilación:
./configure --disable-ssl --with-httpd_conf=/etc/apache2/sites-enabled/
  • Nos brinda un resumen donde muestra
    • cual es el usuario
    • el grupo
    • y la URL donde se podrá visualizar
  • Compilamos Nagios Core:
make all
  • Y por fin instalaremos el servicio y sus configuraciones:
make install-groups-users install install-webconf install-config install-init install-daemoninit install-commandmode
  • Añadimos el grupo nagios que se acaba de crear al usuario con el que corre el servicio web, para que este tenga acceso de escritura a los comandos externos de Nagios:
usermod -a -G nagios www-data
  • Podemos abandonar el directorio actual:
cd ..
  • Y eliminarlo:
rm -rf nagios-4.4.7
  • Iniciamos por vez primera el servicio Nagios en Ubuntu 20.04 LTS:
systemctl start nagios
  • Podemos comprobar el estado del servicio con el comando
systemctl status nagios

Preparación del servicio web

  • Es necesario activamos el módulo CGI de Apache, que por defecto en Ubuntu 20.04 no se encuentra cargado:
a2enmod cgi
a2enmod rewrite
  • Y reiniciamos el servicio web:
systemctl restart apache2
  • Como Nagios necesita un usuario administrador nagiosadmin, lo creamos con el comando htpasswd, creando también la contraseña de acceso asociada:
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
  • Resultado
New password: AC2
Re-type new password:AC2
Adding password for user nagiosadmin

Acceder a Nagios Core

  • Ingresamos a http://10.20.200.170/nagios
  • Se presenta una página de inicio de sesión, en la que facilitaremos el usuario, nagiosadmin en este caso, y su contraseña.
  • Si visitamos la sección «Hosts» veremos que por defecto se está monitorizando la máquina local Ubuntu 20.04, es decir, el propio servidor Nagios Core:
  • Si visitamos la sección «Services» obtendremos una lista detallada de los servicios monitorizados y su estado:

Descargar Nagios NRPE para Ubuntu 20.04 LTS (Servidor Nagios)

  • Este paso lo realizaremos tanto en el servidor Nagios Core como en las máquinas remotas que queramos monitorizar, ya que el mismo paquete contiene el código del servicio NRPE para las máquinas remota como el código del plugin NRPE para el servidor Nagios
  • Vamos a descargar Nagios NRPE para Ubuntu 20.04 LTS desde el sitio web del proyecto, donde encontramos el último lanzamiento estable
  • Descargamos el paquete .tar.gz:
cd /tmp
wget -q https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.0.3/nrpe-4.0.3.tar.gz
  • E instalamos algunas dependencias:
apt install -y libwrap0-dev
  • Descomprimimos el paquete de Nagios NRPE que descargamos en un paso anterior:
tar xf nrpe-4.0.3.tar.gz
  • Cambiamos el directorio de trabajo
cd nrpe-4.0.3/
  • Configuramos la compilación:
./configure
  • Compilamos el plugin NRPE:
make check_nrpe
  • E instalamos:
make install-plugin
  • Salimos del directorio:
cd ..
  • Y lo eliminamos:
rm -rf nrpe-4.0.3

Instalar NRPE en una Máquina remota con Ubuntu 20.04

  • Descargamos el paquete .tar.gz:
cd /tmp
wget -q https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.0.3/nrpe-4.0.3.tar.gz
  • E instalamos algunas dependencias:
apt install -y libwrap0-dev
  • Descomprimimos el paquete de Nagios NRPE:
tar xf nrpe-4.0.3.tar.gz
  • Cambiamos el directorio de trabajo:
cd nrpe-4.0.3/
  • Configuramos la compilación:
./configure
  • Compilamos:
make nrpe
  • E instalamos:
make install-groups-users install-daemon install-config install-init
  • Salimos del directorio:
cd ..
  • Eliminamos
rm -rf nrpe-4.0.3

Configuración del servicio NRPE (Máquina remota)

  • Tras la instalación del servicio NRPE en la máquina remota Ubuntu 20.04, se crea un servicio llamado nrpe.service que no queda iniciado por defecto, ya que debemos configurarlo. Para ello editamos su archivo de configuración nrpe.cfg, que no se encuentra en la ruta que esperaríamos:
nano /usr/local/nagios/etc/nrpe.cfg
  • Buscaremos la directiva allowed_hosts, que indica qué máquinas pueden conectar al servicio:
allowed_hosts=127.0.0.1,::1
  • Añadiremos a la lista la dirección IP o nombre DNS del servidor Nagios Core, en este caso ubuntu2004.local.lan:
allowed_hosts=127.0.0.1,::1,10.20.200.170
  • Si examinamos el resto del archivo, encontraremos la definición de los comandos cuya ejecución podrá solicitar el servidor Nagios Core, por ejemplo:

Además de estos comandos activados por defecto en el archivo hay muchos más desactivados. Podemos activar, desactivar, añadir, eliminar, modificar, etc. las definiciones de comandos según nuestras necesidades. Por ejemplo, si nos fijamos en el comando check_hda1:

command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
  • Hace referencia a una partición del dispositivo /dev/hda, sin embargo la máquina que estamos usando para redactar este artículo usa como nomenclatura del disco principal /dev/loop3 en lugar de /dev/hda, por lo que podemos modificar adecuadamente el nombre del comando y sus parámetros:
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/loop3
  • Una vez finalizados los ajustes, guardamos los cambios e iniciamos el servicio:
systemctl start nrpe.service

Servidor Nagios

  • Este paso lo realizamos en la máquina Ubuntu 20.04 que actúa como servidor Nagios Core
  • Podemos comprobar el funcionamiento del plugin NRPE desde consola como cualquier otro plugin, indicando con el parámetro -H la dirección de alguna de las máquinas remotas que tengan activado y configurado el servicio Nagios NRPE:
/usr/local/nagios/libexec/check_nrpe -H localhost
NRPE v4.0.3

Configurar el plugin NRPE en Nagios Core

  • Aunque utilizar el plugin NRPE como un comando más de Ubuntu 20.04 es sencillo, Nagios Core no lo podrá utilizar hasta que lo incorporemos como un comando propio en su configuración. Para ello editamos la configuración de comandos de Nagios, commands.cfg:
nano /usr/local/nagios/etc/objects/commands.cfg
  • Y añadimos al final del archivo la definición para el comando que maneja el plugin NRPE:
################################################################################
# Comando para usar el plugin check_nrpe
################################################################################
define command {
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
  • Aunque podíamos haber usado otro nombre, hemos llamado al comando como check_nrpe, que coincide con el nombre del binario del plugin. En la definición de la línea de comando utilizamos variables que Nagios sustituirá por la dirección de la máquina remota y del comando a ejecutar en dicha máquina remota.
  • Podemos guardar los cambios y recargar el servicio:
systemctl reload nagios
  • Por un lado ya tenemos una o varias máquinas remotas con el servicio Nagios NRPE instalado y configurado, y por otro lado tenemos el servidor Nagios Core con el plugin NRPE listo para utilizar. Para unir todo esto, debemos realizar una serie de configuraciones en el servicio Nagios Core.
  • Empezaremos creando un directorio para guardar las configuraciones de cada máquina remota:
mkdir /usr/local/nagios/etc/servers
  • Para que los archivos de configuración de este nuevo directorio sean tenidos en cuenta por Nagios Core, incluiremos dicho directorio en la configuración de su archivo nagios.cfg:
nano /usr/local/nagios/etc/nagios.cfg
  • Si buscamos las directivas cfg_dir encontraremos un bloque como el siguiente:
  • Existe una configuración para el directorio que acabamos de crear, pero no está activa. Bastará con eliminar el carácter # al inicio de línea:
#cfg_dir=/usr/local/nagios/etc/servers
X
cfg_dir=/usr/local/nagios/etc/servers
  • Ya podemos guardar el archivo.
  • Ahora crearemos un archivo de configuración para cada máquina remota que hayamos configurado y queramos monitorizar, en este caso será 10.20.200.168
nano /usr/local/nagios/etc/servers/platzi.cfg
  • Con el contenido consistirá en la definición de la máquina remota seguida de la definición de los servicios que queremos monitorizar:
define host {
        use                     linux-server
        host_name               platzi
        alias                   Ubuntu 20.04 Platzi
        address                 10.20.200.168
        max_check_attempts      5
        check_period            24x7
        notification_interval   30
        notification_period     24x7
}

define service {
        use                     generic-service
        host_name               platzi
        service_description     Carga de CPU
        check_command           check_nrpe!check_load
}

define service {
        use                     generic-service
        host_name               platzi
        service_description     Espacio libre en /dev/sda1
        check_command           check_nrpe!check_sda1
}
  • Podemos observar que en la definición de los servicios el comando a usar es siempre el plugin check_nrpe seguido del comando correspondiente definido en la máquina remota.
  • Terminada la configuración de Nagios Core para las máquinas remotas será necesario recargar el servicio:
systemctl reload nagios
  • Si accedemos a la interfaz web de Nagios Core, en la sección «Hosts» aparecerán todas las máquinas configuradas:

Log de nagios

nano /usr/local/nagios/var/nagios.log

Naggios MYSQL

cd /tmp
wget https://labs.consol.de/assets/downloads/nagios/check_mysql_health-3.0.0.5.tar.gz
  • Descompimimos
tar -zxvf check_mysql_health-3.0.0.5.tar.gz
  • ingresamos a la carpeta
cd check_mysql_health-3.0.0.5/
  • Configuramos e instalamos
./configure
make 
make install
  • Verificamos que esta instalado
ls /usr/local/nagios/libexec/

Servidor mysql

  • creamos usuario para que se conecta a nagios
CREATE USER 'nagios'@'%' IDENTIFIED WITH mysql_native_password BY 'LM1';

GRANT SELECT ON *.* TO 'nagios'@'%';
FLUSH PRIVILEGES;
exit

Servidor: Nagios

  • Abrimos el archivo
nano /usr/local/nagios/etc/objects/commands.cfg
  • Vamos al final del archivo
  • y agregamos
################################################################################
# Comando para usar el plugin check_mysql
################################################################################
define command {
        command_name check_mysql_health
        command_line $USER1$/check_mysql_health --hostname $ARG4$ --username $ARG1$ --password $ARG2$ --port $ARG5$ --mode $ARG3$
}
  • Creamos el archivo
nano /usr/local/nagios/etc/servers/bdp-mysql-01.cfg
  • Agregamos
define host {
        use                     linux-server
        host_name               bdp-mysql-01
        alias                   CMS
        address                 10.20.200.130
        max_check_attempts      5
        check_period            24x7
        notification_interval   30
        notification_period     24x7
}

define service {
        use                     local-service
        host_name               bdp-mysql-01
        service_description     MySQL connection-time
        check_command           check_mysql_health!nagios!$_Lira_MSQL_1_$.!connection-time!10.20.200.130!3306!
}


define service {
        use                     generic-service
        host_name               bdp-mysql-01
        service_description     MySQL slave-io-running
        check_command           check_mysql_health!nagios!$_Lira_MSQL_1_$.!slave-io-running!10.20.200.130!3306!
}

define service {
        use                     generic-service
        host_name               bdp-mysql-01
        service_description     MySQL slave-sql-running
        check_command           check_mysql_health!nagios!$_Lira_MSQL_1_$.!slave-sql-running!10.20.200.130!3306!
}
  • Verificamos la configuración
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
  • Reiniciamos nagios
systemctl stop nagios
systemctl star nagios
systemctl status nagios