Nagios es un sistema de monitorización de redes ampliamente utilizado, de código abierto, que vigila los equipos (hardware) y servicios (software) que se especifiquen, alertando cuando el comportamiento de los mismos no sea el deseado. Entre sus características principales figuran la monitorización de servicios de red (SMTP, POP3, HTTP, SNMP…), la monitorización de los recursos de sistemas hardware (carga del procesador, uso de los discos, memoria, estado de los puertos…), independencia de sistemas operativos, posibilidad de monitorización remota mediante túneles SSL cifrados o SSH, y la posibilidad de programar plugins específicos para nuevos sistemas.

Creación del escenario

Vamos a crear un escenario con tres máquinas a monitorizar en la cual vamos a instalar algunos servicios.

Info! Nuestras maquinas se van a llamar Haley, Lewis y Berry en vuestro caso podéis poner el nombre que prefiráis.

Haley

En esta máquina vamos a monitorizar el servidor ssh apt install ssh y el gestor de base de datos mongoDB apt install mongodb, dicha máquina va a ser donde se encuentre nagios3 apt install nagios 3 durante la instalacion nos solicitará una clave para el usuario «nagiosadmin», para después poder acceder desde la web introduciendo la [IP_Maquina]/nagios3

Berry

En esta máquina vamos a instalar una pila LAMP el cual incluye (Apache2, mysql-server, php5) apt install apache2 php5 php-pear php5-mysql mysql-server

Lewis

En esta máquina simplemente un cliente Debian de el cual después vamos a monitorizar diferentes servicios que no son necesarios instalar

Instalar plugins nagios en todas la máquinas

Vamos a instalar NRPE apt install nagios-nrpe-server nagios-nrpe-plugin nagios-plugins en todas las máquinas, es el software que permite ejecutar remotamente los plugins de Nagios en otros equipos, lo que permite monitorizar los parámetros de la máquina remota.

Configuraciones necesarias para funcionamiento

Vamos a editar el fichero /etc/nagios/nrpe.cfg deberemos permitir el acceso al servidor de Nagios añadiendo su IP, este proceso lo vamos a realizar en todas las máquinas, para ello en todas las máquinas añadimos la ip del servidor en la y permitimos que se reciban argumentos en los comandos

allowed_hosts=127.0.0.1,[Ip_Maquina_Nagios]
dont_blame_nrpe=1

En este fichero, más abajo, vienen ya algunos plugins predefinidos al cual le cambiaremos los valores a nuestro interés, principalmente cambiaremos los valores “-w (warm)” y “-c (critical)” donde en cada línea le estaremos diciendo que si el valor de “-w” es superado nos lo indique como advertencia y si supera el valor de “–c” nos lo indique como una situación crítica. Estos son los diferentes plugins que vamos a configurar(vamos a dejar la mayoría de los que vienen por defecto:

haley

command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sd$
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200
command[check_mongodb]=/usr/lib/nagios/plugins/check_mongodb.py   -A prueba -w 100 -c 200

Lewis

command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sd$
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200

berry

command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sd$
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200
Info! En la prueba de disco, nuestro dispositivo puede variar de nombre deberemos estipular el dispositivo de bloque que tengamos en nuestra maquina.

Y reiniciamos el servicio en todas las máquinas service nagios-nrpe-server restart

Monitorizar maquinas

Para monitorizar las máquinas de nuestra red vamos a crear el fichero “/etc/nagios3/conf.d/host.cfg en haley y le añadimos lo siguiente

define host{
                                use              generic-host
                                host_name        haley
                                alias            haley
                                address          192.168.1.84
                        }
                        define host{
                               use               generic-host
                             u  host_name         berry
                               alias             berry
                               address           192.168.1.67
                               parents           haley
                        }
                        define host{
                               use               generic-host
                               host_name         lewis
                               alias             lewis
                               address           192.168.1.69
                               parents           haley
                        }
Info! Las IP de nuestra red son asiginadas por un servidor DHCP por tanto segun la red puede variar.

Y reiniciamos el servicio de nagios3 /etc/init.d/nagios3 restart

Observamos que nagios ya ha detectado a las maquina y esta comprobando su funcionamiento

Al pasar unos minutos comprobamos que todas las maquinas se encuentran up, accediendo a la pestaña “hosts”:

Monitorizar los servicios previamente instalados en Haley y Berry

Haley

Antes de monitorizar «mongoDB» debemos instalar y configurar algunas dependencias para su correcto funcionamiento, para realizar estos pasos debemos descargar el paquete zip apt install zip, en el cual se instalara tanto «zip» como «unzip»

Primero instalamos los plugins necesarios, que descargaremos de la siguiente cuenta de github:

wget --no-check-certificate https://github.com/mzupan/nagios-plugin-mongodb/archive/master.zip
unzip master.zip -d nagios-plugin-mongodb
rm master.zip
apt-get install python-dev python-pip
pip install pymongo
mv nagios-plugin-mongodb/check_mongodb.py /etc/nagios-plugins/config/

Y por ultimo lo drivers que también descargaremos de la siguiente cuenta de github

wget --no-check-certificate https://github.com/mongodb/mongo-python-driver/archive/master.zip
unzip master.zip
cd mongo-python-driver-master/
python setup.py install

Posteriormente añadimos el siguiente contenido al final del fichero /etc/nagios3/commands.cfg

define command {
command_name check_mongodb
command_line /etc/nagios-plugins/config/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$
}
define command {
command_name check_mongodb_database
command_line /etc/nagios-plugins/config/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -d $ARG5$ 
}
define command {
command_name check_mongodb_collection
command_line /etc/nagios-plugins/config/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -d $ARG5$ -c $ARG6$
}
define command {
command_name check_mongodb_replicaset
command_line /etc/nagios-plugins/config/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -r $ARG5$
}
define command {
command_name check_mongodb_query
command_line /etc/nagios-plugins/config/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -q $ARG5$
}

Berry

Primero debemos de configurar un usuario y ponerle una contraseña y le damos permisos sobre todas las base de datos:

mysql> CREATE USER 'nagios'@'%' IDENTIFIED BY 'nagios';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'nagios'@'192.168.1.70' IDENTIFIED BY 'nagios';
mysql> flush privileges;

A continuación configuramos MySql para que escuche en cualquier dirección IP y eso lo modificamos en el fichero /etc/mysql/my.cnf, descomentamos la linea bind-address y añadimos en lugar de 127.0.0.1 esto 0.0.0.0

Por ultimo reiniciamos el servicio /etc/init.d/mysql restart

Para crear los servicios podemos hacerlo en un nuevo fichero dentro del directorio /etc/nagios3/conf.d/servicios-fisico.cfg, que se encuentra en haley.

Vamos a añadir lo siguiente dado que debe de monitorizar tanto el servicio de apache2, como de mysql:

#################### MONITORIZACION BERRY ###################

define service{
        use                     generic-service
        host_name               berry
        service_description     HTTP
        check_command           check_http
 }

define service{
        use                     generic-service
        host_name               berry
        service_description     MySql
        check_command           check_mysql_cmdlinecred!nagios!nagios!
}

Aviso vía correo electrónico

Para ello instalamos en «haley» el paquete de servidor de correo ssmtp apt install ssmtp, el siguiente paso será configurar «ssmtp», para ello modificaremos el fichero de configuración /etc/ssmtp/ssmtp.conf para que quede así:

#
# /etc/ssmtp/ssmtp.conf
#
# Dirección de correo a la que serán enviadas todas las notificaciones
# y una copia de los mensajes enviados
root=[Correo Administrador]
 
# El servidor al que sSMTP envía todo el correo para que lo distribuya luego
# en mi caso el servidor SMTP de GMail , puede variar segun nuestro servidor
mailhub=smtp.gmail.com:587
 
# Si se quiere cambiar la dirección desde la que se envía el correo
# si no se enviará desde la dirección configurada más abajo mediante AuthUser
#rewriteDomain=
 
# El nombre (dominio) de la máquina
# en mi caso, como es máquina local, localhost
hostname=[Nombre_Maquina]
 
# Permitir que los usuarios cambien el remitente en sus envíos
# Si se permite, hay que estar seguro de que los usuarios del entorno no harán mal uso
FromLineOverride=YES
 
# Credenciales de la cuenta gmail que se vaya a usar
AuthUser=[usuario de gmail]
AuthPass=[contraseña de gmail]
UseSTARTTLS=YES
UseTLS=YES

Prueba funcionamiento ssmtp

Para ello enviaremos un correo a nuestra correonagios@juanluramirez.com con un mensaje de prueba como este:

To: correonagios@juanluramirez.com
From: jramirezvaquero@gmail.com
Subject: Prueba a servidor correo
Esto es una prueba del correo para nagios.

Para poder escribir el mensaje ejecutaremos el siguiente comando ssmtp [Correo Destinatario] y empezamos a añadir líneas, cada vez que añadamos una presionamos Enter y cuando queramos enviar el correo presionamos Ctrl+D

Envió correo para notificar cualquier problema

Ahora procedemos a editar el fichero /etc/nagios3/conf.d/contacts_nagios2.cfg para que quede asi:

define contact{
        contact_name                    root
        alias                           Root
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        email                           correonagios@juanluramirez.com
        }

A continuación reiniciamos el servicio de nagios3 /etc/init.d/nagios3 restart

Ahora desde Berry vamos a parar el servicio de apache2 /etc/init.d/apache2 stop

Pasado unos minutos podemos observar que en el entorno web de nagios nos devuelve un fallo tipo critical y pasado unos minutos más recibimos el correo

Controlar espacio disco y número de procesos zombies

Se va a controlar en lewis, por tanto añadimos un fichero que llamaremos «disco_zombies.cfg» en «haley» /etc/nagios3/conf.d/disco_zombies.cfg

define service{
       use                     generic-service
        host_name               lewis
        service_description     Espacio en Disco
        check_command           check_nrpe_1arg!check_sda1
}
define service{
        use                     generic-service
        host_name               lewis
        service_description     Total Procesos Zombies
        check_command           check_nrpe_1arg!check_zombie_procs
}
Info! En la prueba de disco, nuestro dispositivo puede variar de nombre deberemos estipular el dispositivo de bloque que tengamos en nuestra maquina.

Y reiniciamos el servicio /etc/init.d/nagios3 restart

Controle la carga de CPU, usuarios logueados, procesos y el servicio SSH

Vamos a controlar la carga de CPU, cantidad de usuarios logueados, el número de procesos y el estado del servicio SSH en haley, para ello cremos un fichero «haley.cfg» en /etc/nagios3/conf.d/haley.cfg

#################### MONITORIZACION HALEY ###################
			define service{
			        use                     generic-service
        			host_name               haley
        			service_description     Numero Usuarios
        			check_command           check_nrpe_1arg!check_users
			}


			define service{
        			use                     generic-service
        			host_name               haley
        			service_description     SSH
        			check_command           check_ssh
			}

			define service{
        			use                     generic-service
        			host_name               haley
        			service_description     Carga CPU
        			check_command           check_nrpe_1arg!check_load
			}
			define service{
			        use                     generic-service
        			host_name               haley
        			service_description     Total Procesos
        			check_command           check_nrpe_1arg!check_total_procs
			}

Y reiniciamos el servicio /etc/init.d/nagios3 restart

Representación mapa de objetos

Aqui podemos observar la respresentacion como mapa de objetos, para ello nos dirigmos a Map

Pruebas de funcionamiento

Info! Todos los procesos en los que modificamos el fichero «nrpe.cfg» o páramos cualquier servicio vamos a obtener un correo, dado que antes configuramos el servidor de correos y si falla recibiremos un correo con el fallo.

Haley

Vamos a realizar pruebas en todas la maquinas, primero vamos a hacer la prueba de ssh, para ello vamos a parar el proceso /etc/init.d/ssh stop

Observamos que el estado cambia a critical y recibiremos un correo notificándonos el problema

Comprobamos el servicio el cual controla los procesos en haley, para ello vamos a modificar el fichero /etc/nagios/nrpe.cfg y vamos a modificar la linea donde se configura los procesos y vamos a poner que salte un warning cuando haya 50 procesos

command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 50 -c 200

Y reiniciamos el servicio /etc/init.d/nagios-nrpe-server restart

A continuación comprobamos el servicio de carga de CPU para ello vamos a realizar un uptime y observamos que lo valores que da nagios son iguales que lo que da el comando

Y por último listamos el número de usuarios conectados para comprobarlo con la salida de nagios con el comando users | wc -w

Berry

Anteriormente en la comprobación del servidor de correo paramos el servicio apache2 |

, por tanto ahora solo vamos a parar el servicio mysql /etc/init.d/mysql stop

Lewis

Vamos a hacer que nos salte un aviso cuando el disco tenga menos del 50% para eso solo debemos modificar el fichero /etc/nagios/nrpe.cfg en lewis.

command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 50% -c 10% -p /dev/sda1

Por ultimo solo quedan comprobar los procesos «zombies» para ello ejecutamos un top y podemos observar que no hay ninguno y si lo comparamos con lo que nos devuelve nagios por pantalla es igual