Nagios

En la entrada de hoy vamos a plantear el siguiente escenario:

Disponemos de 3 máquinas con lo siguientes servicios instalados:

  1. Goku
    • Servidor SSH
    • MongoDB
  2. Vegeta
    • Servidor LAMP
  3. Picolo

Vamos a configurar Nagios en Goku, que monitorizará:

  1. En local, sus servicios instalados (en caso de alerta de estos servicios nos notificará por correo), la carga de CPU, el número de usuarios logeados  y el número de procesos.
  2. En Vegeta, su servidor LAMP.
  3. En Picolo, el espacio en disco y el número de procesos Zombie.

Primero, tendremos que verificar (y si no es así, modificar) nuestro /etc/hosts , los tres tienen que estar correctamente definidos, aquí dejo el de Goku, como ejemplo.

127.0.0.1 goku.tinoco.local goku
10.0.0.20 vegeta.tinoco.local
10.0.0.30 picolo.tinoco.local
127.0.0.1 localhost
127.0.1.1 stretch.localdomain stretch

Empezaremos, instalando Nagios en Goku. El proceso es algo extenso, lo instalaremos en su versión 4.

Lo primero, antes de realizar una instalación, comprobar el estado de nuestros repositorios y actualizar algo si así es necesario.

apt update
apt upgrade

Ahora instalamos algunas herramientas que necesitaremos durante el proceso de instalación.

apt install wget unzip zip bash-completion net-tools
apt install apache2 libapache2-mod-php7.0 php7.0

Y comprobamos que nuestro apache está escuchando

netstat –tlpn
root@goku:/usr/local/nagios/etc/objects# netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address      Foreign Address    State    PID/Program name 
tcp        0      0 0.0.0.0:22         0.0.0.0:*          LISTEN   531/sshd 
tcp        0      0 0.0.0.0:25         0.0.0.0:*          LISTEN   758/master 
tcp        0      0 127.0.0.1:27017    0.0.0.0:*          LISTEN   363/mongod 
tcp6       0      0 :::80              :::*               LISTEN   578/apache2 
tcp6       0      0 :::22              :::*               LISTEN   531/sshd 
tcp6       0      0 :::25              :::*               LISTEN   758/master

A continuación, para apache, estableceremos la zona horaria en la que nos encontramos, modificando el fichero /etc/php/7.0/apache2/php.ini 

date.timezone = Europe/London

Y aplicamos los cambios

systemctl restart apache2

Y ya empezaremos con la instalación en si de Nagios 4, comenzando con la instalación de los requisitos:

apt install autoconf gcc libc6 make apache2-utils libgd-dev

Nos vamos al directorio de root y nos descargamos Nagios 4.3.4 desde la página oficial.

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

Extraemos el .tar obtenido y entramos en el directorio.

tar xzf nagios-4.3.4.tar.gz
cd nagios-4.3.4/

Y ya procedemos a la propia instalación de Nagios.

./configure --with-httpd-conf=/etc/apache2/sites-enabled
make all
useradd nagios
usermod -a -G nagios www-data
make install
make install-init
systemctl enable nagios
make install-commandmode
make install-config
make install-webconf

Por último crearemos una contraseña para nuestro usuario nagiosadmin

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

Reiniciamos apache e iniciamos nagios.

systemctl restart apache2
systemctl start nagios

Y ya podremos acceder al servicio a través de un navegador y un cliente conectado a la misma red a la que apache da servicio.

nagios-frontal

Una vez que tengamos Nagios instalado, procederemos a instalar los plugins que nos ofrece. Empezamos instalando los requisitos y descargandonos el repositorio de nagios-plugins.

apt install libmcrypt-dev make libssl-dev bc gawk dc build-essential snmp libnet-snmp-perl gettext libldap2-dev smbclient fping default-libmysqlclient-dev
wget https://github.com/nagios-plugins/nagios-plugins/archive/release-2.2.1.tar.gz
tar xfz release-2.2.1.tar.gz
cd nagios-plugins-release-2.2.1/

Y comenzamos a instalarlos.

./tools/setup
./configure
make
make install

Y confirmamos que están instalados

ls /usr/local/nagios/libexec/

nagios-plugins

Reiniciamos el servicio, y podremos comprobar que nos configura algunos servicios por defecto, mas adelante, configuraremos nosotros los que hemos especificado anteriormente que requerimos.

systemctl restart nagios

nagios-services-first.png

Anotar que no es así exactamente como sale recién instalado, ya que hice algunas pruebas y el “CPU Usage” no deberías verlo, ya que aún no está configurado en la inicial.

Empezaremos a definir los servicios que queramos monitorizar (podremos comentar los que vienen definido por defecto), estos se definen en /usr/local/nagios/etc/objects/localhost.cfg

define service{
 use local-service ; Nombre de la plantilla del servicio a usar
 host_name localhost ; Nombre 
 service_description CPU Usage ; Descripcion del servicio
 normal_check_interval 0.50 ; Tiempo (en minutos) entre cada comprobación que acabe con un OK
 retry_check_interval 0.20 ; Tiempo (en minutos) entre cada comprobación que acabe distinto de OK
 check_command check_load!100,8000,90000!20000,90000,100000 ; Comando a usar, definido en commands.cfg
 }

define service{
 use local-service 
 host_name localhost
 service_description SSH
 check_command check_ssh
 notifications_enabled 0
 }

define service{
 use local-service
 host_name localhost
 service_description Users logged
 check_command check_local_users!2!10
}

define service{
 use local-service
 host_name localhost
 service_description Proces numbers
 check_command check_local_procs!40!100!nose
}

Estos son los procesos que están incluidos en los plugins de Nagios, y los commandos definidos en command.cfg ya están escritos, aunque podemos reescribirlos a nuestro antojo (como hice con check_load), los dejo a continuación.

# 'check_ssh' command definition
define command{
 command_name check_ssh
 command_line $USER1$/check_ssh $ARG1$ $HOSTADDRESS$
 }

# 'check_local_users' command definition
define command{
 command_name check_local_users
 command_line $USER1$/check_users -w $ARG1$ -c $ARG2$
 }

# 'check_local_procs' command definition
define command{
 command_name check_local_procs
 command_line $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
 }

# 'check_load' command definition
define command{
 command_name check_load
 command_line $USER1$/check_load -w $ARG1$ -c $ARG2$
 }

El funcionamiento de los procesos podemos verlo con la ayuda que nos facilita, con el comando.

/usr/local/nagios/libexec/check_procs --help

nagios-service-second

Ahora procederemos a monitorizar MongoDB, para ello tenemos un plugin desarrollado por mzupan el cual es muy simple de instalar, simplemente nos dirigimos al directorio donde tenemos instalado los plugins, clonamos el repositorios e instalamos las dependencias para la correcta ejecución del plugin (nos proporciona un fichero requirements).

cd ~
git clone git://github.com/mzupan/nagios-plugin-mongodb.git
cd nagios-plugin-mongodb/
apt install python-pip
pip install -r requirements
cp check_mongodb.py /usr/local/nagios/libexex

A continuación introducimos, en commands.cfs, los comandos del plugin que el mismo nos proporciona.

define command {
 command_name check_mongodb
 command_line $USER1$/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$
}

define command {
 command_name check_mongodb_database
 command_line $USER1$/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -d $ARG5$
}

define command {
 command_name check_mongodb_collection
 command_line $USER1$/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 $USER1$/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -r $ARG5$
}

define command {
 command_name check_mongodb_query
 command_line $USER1$/check_mongodb.py -H $HOSTADDRESS$ -A $ARG1$ -P $ARG2$ -W $ARG3$ -C $ARG4$ -q $ARG5$
}

Y ya definiremos los servicios que queramos monitorizar, por ejemplo si hay conexión con el servidor MongoDB.

 define service {
 use generic-service
 host_name localhost
 service_description Mongo Connect Check
 normal_check_interval 0.50
 retry_interval 0.20
 check_command check_mongodb!connect!27017!2!4
}

Y como explicamos anteriormente, si queremos configurar nuestros propios comandos, podemos acceder a la ayuda del comando con la opción –help.

Para configurar que, cuando un servicio cambie de estado, con postfix instalado, nos llegue un correo electrónico, deberemos, en primer lugar, modificar en contacts.cfg , dónde aparece nagiosadmin@localhost, por nuestro correo.

define contact{
 contact_name nagiosadmin ; Short name of user
 use generic-contact ; Inherit default values from generic-co$
 alias Nagios Admin ; Full name of user
 email nuestrocorreo@gmail.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDR$
 }

En segundo lugar, en commands.cfg los comandos notify-hosy-by-emailnotify-service-by-email cambiar, en command_line , /bin/mail por /usr/bin/mailx

En tercer lugar, asegurarnos que las notificaciones están activadas, para ello comprobaremos que el valor notifications_enable del fichero /usr/local/nagios/etc/nagios.cfg está a 1.

Por último, en los servicios, de los cuales queramos recibir notificaciones por emails, añadir en la definición del servicio la linea.

notifications_enabled        1

 

Pasaremos a la instalación de NRPE en Picolo, lo primero es instalar los requisitos básicos de Nagios Core y los plugins que también deberemos instalar aquí.

apt install libmcrypt-dev make libssl-dev bc gawk dc build-essential snmp libnet-snmp-perl gettext libldap2-dev smbclient fping default-libmysqlclient-dev
apt install autoconf gcc libc6 make apache2-utils libgd-dev

Instalamos GIT y clonamos el repositorio de NRPE

apt install git
git clone https://github.com/NagiosEnterprises/nrpe.git
cd nrpe/

Y comenzamos con la instalación de NRPE

autoconf
./configure
make all
make install-groups-users
make install
make install-config
make install-init

Activamos el servicio para que se arranque con el sistema y lo iniciamos.

systemctl enable nrpe
systemctl start nrpe

Ahora procederemos a la configuración de los servicios que vamos a monitorizar. No sin antes permitir que nuestro NRPE acepte peticiones desde el servidor Nagios.

vim /usr/local/nagios/etc/nrpe.cfg

Modificando las lineas.

allowed_hosts=10.0.0.10
dont_blame_nrpe=1

Si vamos más abajo, hasta.

# The following examples use hardcoded command arguments...
# This is by far the most secure method of using NRPE

Vemos los comandos que nos viene configurado por defecto para poder usarlos desde el servidor Nagios, pero antes deberemos instalar los plugins, como vimos anteriormente. Ya están predefinidos los dos que queremos usar para nuestro caso (check_zombie_procs y check_disk) pero modificaremos los parámetros a nuestra necesidad. Vienen con los siguientes parámetros.

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

Y los estableceremos de la siguiente forma.

command[check_sda1]=/usr/local/nagios/libexec/check_disk -w 30% -c 10% -p /dev/sda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z

En el primero, nos lanzará un WARNING si el espacio de disco restante es inferior al 30% y un CRITICAL si es inferior al 10%, y en el segundo, nos lanzará un WARNING si tenemos 5-9 procesos zombie en nuestro sistema y un CRITICAL si hay 10 o más (con – s Z especificamos que nos referimos a los procesos que estén en estado Zombie)

Reiniciamos el servicio nrpe.

systemctl restart nrpe

Y ahora en goku tendremos que añadir algunas lineas en localhost.cfg y commands.cfg (respectivamente).

define service{
    use                     generic-service
    host_name               picolo
    service_description     Disk Usage
    normal_check_interval   0.50
    retry_check_interval    0.20
    notification_interval   1
    check_command           check_nrpe!check_sda1
}
define service{
    use                     generic-service
    host_name               picolo
    service_description     Zombies walking
    normal_check_interval   0.50
    retry_check_interval    0.20
    notification_interval   1
    check_command           check_nrpe!check_zombie_procs
}
# 'check_nrpe' command definition
define command{
 command_name check_nrpe
 command_line /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
 }

Y reiniciamos Nagios

systemctl restart nagios

Podremos ver su correcto funcionamiento.

Nagios-picolo

En Vegeta empezaremos monitorizando el servicio de Apache2, pero está configuración será desde goku, simplemente añadimos el siguiente servicio a nuestro localhost.cfg.

define service{
    use                    generic-service
    host_name              vegeta
    service_description    Apache Connect Check
    normal_check_interval  0.50
    retry_check_interval   0.20
    check_command          check_http!10.0.0.20
    notifications_enabled  0
}

También es interesante, para un servicio como Apache, que tengamos controlada la RAM utilizada, porque de ello dependerá el rendimiento y el poder responde a las peticiones de nuestro servidor web. Gracias al plugin desarrollado por Igologin podemos hacerlo fácilmente con el protocolo NRPE , realizaremos los mismo pasos que en Picolo para la instalación de NRPE. Es muy sencillo de instalar, ya que los pasos son idénticos a los que ya habíamos hecho.

Descargamos el plugin check_mem en el directorio dónde tenemos nuestros plugins /usr/local/nagios/libexec/ y definimos el comando, en Vegeta, en el fichero nrpe.cfg cómo ya hemos hecho.

command[check_mem]=/usr/local/nagios/libexec/check_mem -w 80 -c 95

Definimos el servicio en Goku.

define service{
 use                    generic-service
 host_name              vegeta
 service_description    Memory status
 normal_check_interval  0.50
 retry_check_interval   0.20
 check_command          check_nrpe!check_mem 
 notifications_enabled  0
}

A tener en cuenta que el comando de check_nrpe ya lo habíamos definido antes en el fichero commands.cfg de Goku

Por último comprobaremos el estado de servicio de MariaDB y del estado de una de sus tablas de una base de datos que hemos definido y dado permisos de accesos desde Vegeta anteriormente.

Ambos plugins se añaden a libexec/ cuando se instalan los plugins de Nagios. Y la configuración es cómo la que hemos estado viendo hasta entonces, definir el servicio  y el comando. Para simplemente confirmar que el servicio está funcionando.

localhost.cfg

define service{
 use                    generic-service
 host_name              vegeta
 service_description    MariaDB Connect Check
 normal_check_interval  0.50
 retry_check_interval   0.20
 check_command          check_mariadb!david!david!nagios
 notifications_enabled  0
}

commands.cfg

# 'check_mariadb' command definition
define command{
 command_name check_mariadb
 command_line /usr/local/nagios/libexec/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -d $ARG3$
}

localhost.cfg

define service{
 use generic-service
 host_name vegeta
 service_description Not full table 
 normal_check_interval 0.50
 retry_check_interval 0.20
 check_command check_mariadb_sql!-u david -p david -d nagios -q 'select count(*$
 notifications_enabled 0
}

commands.cfg

# 'check_mariadb_sql' comand definition
define command{
 command_name check_mariadb_sql
 command_line /usr/local/nagios/libexec/check_mysql_query -H $HOSTADDRESS$ $ARG1$
}

Nagios-full

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s