Configurando el gestor Nagios

En los posts anteriores (aquí y aquí) abordé cómo configurar los elementos que van a monitorizarse en la red para permitir su gestión desde el servidor Nagios. En este post voy a abordar la configuración de Nagios.

Nagios, de acuerdo a la instalación que tengo, mantiene la información de configuración en el directorio /usr/local/nagios/etc. Bajo este directorio y los subdirectorios correspondientes se encuentran una serie de ficheros de configuración.

El primer paso es traerse toda esta información de configuración al PC para poder editar los ficheros de forma más amigable (aunque vi/vim es un gran editor, prefiero hacerlo con UltraEdit). Después de los líos con la creación de una imagen y su montaje que tuve para transferir archivos desde el PC a una máquina virtual, descubrí que la forma más fácil de mover ficheros es a través de un pincho USB. Lo único que hay que hacer es añadir a las máquinas virtuales un controlador USB y, cuando se monta el controlador reconoce los dispositivos pinchados en el PC que ejecuta el vClient.

Reflexionando sobre el manejo de la cantidad de ficheros de configuración involucrados en el lab, se me ocurre que, probablemente sea una buena idea montar un control de versiones (por ejemplo, svn) para mantener gestionadas todas estas configuraciones (le echaré una pensada a lo largo de la semana).

Volviendo al tajo tras la digresión, lo que voy a hacer es organizar los elementos de configuración en una serie de subdirectorios, en la actualidad, lo que hay es un subdirectorio ‘objects’ con distintos objetos de configuración y uno ‘servers’ con los ficheros de configuración de los distintos hosts de la red. En el directorio raíz se encuentran los ficheros de configuración generales de Nagios. Mi plan es organizar la configuración de la siguiente forma:

  • En el directorio raíz los ficheros de configuración generales: nagios.cfg, resource.cfg, cgi.cfg, nrpe.cfg y htpasswd.users.
  • Subdirectorio commands. Ficheros .cfg de los distintos comandos.
  • Subdirectorio contactgroups. Ficheros .cfg de los contact groups.
  • Subdirectorio contacts. Ficheros .cfg de los contactos.
  • Subdirectorio hostgroups. Ficheros .cfg de los grupos de hosts.
  • Subdirectorio hosts. Ficheros .cfg de los distintos hosts existentes en el lab.
  • Subdirectorio services. Ficheros .cfg de los distintos servicios.
  • Subdirectorio servicegroups. Ficheros de .cfg correspondientes a los grupos de servicios.
  • Subdirectorio timeperiods. Ficheros .cfg con la configuración de períodos de tiempo.

Para que surja efecto es necesario que, en el fichero de configuración general de nagios (nagios.cfg), se establezca que estos directorios deberán ser contemplados en la carga de la configuración:

nag_cfg9

Una vez completada esta labor, lo que queda es pasarla al servidor nagios y probar la configuración. Empleando el pincho usb la transferencia de la configuración es coser y cantar y tras unas mínimas correcciones consigo que la configuración sea correcta:

nag_cfg10

Re-arranco Nagios y me conecto a la interfaz web desde una máquina virtual Lubuntu conectada a la red de gestión.

nag_cfg11

Se ve que los tres hosts de mi red están levantados pero tengo cuatro problemas críticos:

nag_cfg12

Los cuatro problemas críticos tienen que ver con el router vyos, uno de ellos es el servicio SSH que no estará levantado y los otros tres están relacionados con SNMP. Voy a investigar qué pasa.

Al editar la definición del servicio Uptime me doy cuenta enseguida del error. La community del comando check_snmp está puesta a public y en el setup de SNMP del router VyOS la community que establecí es mylab. Un pequeño cambio en la configuración de los servicios basados en SNMP y este problema debería quedar arreglado:

nag_cfg13

nag_cfg14

En el caso del SSH, voy a levantar el servicio SSH en el router vyos:

nag_cfg15

Ya sólo queda comprobar la configuración de Nagios, re-arrancar el servicio y ver qué pasa:

nag_cfg16

A priori, todo pinta bien, veamos cómo está el router VyOS:

nag_cfg17

Todo verde, tarea completada (por ahora) queda por definir qué voy a monitorizar del router, pero eso ya será en otro lugar.

Anuncios

Monitorizando la red virtual (II)

En el post precedente abordé la configuración del servidor NRPE desplegado en mi servidor de syslog (ubsyslog) para poder ser monitorizado desde Nagios. En esta segunda parte, abordaré la configuración del router VyOS para poder ser monitorizado desde Nagios.

A diferencia del caso del servidor, la monitorización del router la voy a realizar empleando SNMP. Para ello, lo primero que tengo que hacer, es configurar el agente SNMP en el router VyOS.

nag_cfg6

Una vez configurado, comprobamos que desde el servidor Nagios podemos acceder a la información del agente SNMP mediante el comando snmpget:

nag_cfg7

En principio esto está funcionando queda decidir qué objetos vamos a monitorizar desde el servidor Nagios.

Monitorizando la red virtual (I)

Una vez instalado Nagios en el servidor designado para ello, el siguiente paso en el camino es monitorizar el resto de los elementos. Ahora mismo, mi red está así:

Dibujo3

Los elementos a monitorizar (por ahora) son, además del propio servidor Nagios, el servidor de Syslog y el router Vyos. Lo que hay que hacer es configurar el servidor Nagios para poder realizar la monitorización. No tengo mucha idea de cómo va esto pero, a priori, el secreto consiste en atacar el router VyOS a través de SNMP y los servidores a través del plugin NRPE.

En este post voy a cubrir la configuración del servidor NRPE en el servidor de syslog.

Para poder monitorizar el servidor de syslog, lo que hay que hacer, en primer lugar, es instalar NRPE y los plugin de Nagios:

add@ubsyslog~$ sudo apt-get update 
add@ubsyslog~$ sudo apt-get install nagios-plugins nagios-nrpe-server

El siguiente paso es editar el fichero de configuración del servidor NRPE. Este fichero es /etc/nagios/nrpe.cfg. En este fichero, establecemos el host desde donde se van a lanzar los comandos de monitorización (servidor ubnagios):

nag_cfg1

y las directivas include para estructurar el contenido de la configuración:

nag_cfg2

Dentro del directorio nrpe.d voy a crear un fichero de configuración (cmds.cfg) que contiene los comandos que van a utilizarse para monitorizar el servidor remoto.

En el caso del servidor ubsyslog, lo que, inicialmente, voy a monitorizar es:

  • Que el servidor esté vivo. Esto se lleva a cabo lanzando un ping desde el servidor de monitorización por lo que, en local, no hay que hacer nada.
  • El número de usuarios conectados al servidor. Para ello empleamos el plugin nrpe check_users estableciendo un nivel de warning a 5 y el nivel crítico a 10.
  • La carga del servidor. Se monitoriza mediante el comando check_load de forma que eleve un aviso si los niveles de carga (de acuerdo a la salida del comando uptime) superan 5,10 y 15 y lanza un nivel crítico cuando estos niveles superan los valores 30, 25 y 20.
  • La ocupación del disco duro del servidor (sistema de ficheros ‘/’), empleando el comando check_disk. El comando emitirá un warning cuando el espacio libre en el disco duro baje del 20% y un aviso crítico cuando el espacio libre esté por debajo del 10%. Es importante saber cuál es el dispositivo en el que se monta el sistema raíz que, en el caso del servidor ubsyslog, es /dev/dm-0 (obtenido mediante el comando ‘df –h /’).
  • El número total de procesos. Para esto, se utiliza el comando check_total_procs, estableciendo un nivel de warning en 150 y el nivel crítico en 200.
  • El espacio de swap libre. Para obtener este valor empleamos el comando check_swap estableciendo el nivel de warning al 20% y el nivel crítico al 10%.
  • El espacio utilizado por los logs (directorio /var/log). Para obtener esto empleamos el comando check_folder_size estableciendo los niveles de warning y crítico respectivamente a 5GB y 6GB (el disco duro total inicial es de 10GB).

El fichero cmds.cfg queda de la siguiente forma:

nag_cfg3

Antes de continuar voy a hacer un breve inciso sobre cómo configurar el comando check_folder_size.sh (yo lo renombré a check_folder_size2.sh) ya que el conseguir que funcione supuso un esfuerzo considerable.

El shell script check_folder_size.sh lo descargué al PC donde ejecuto el vSphere client desde el sitio de internet de Nagios Exchange. Una vez en el PC, surgió el problema de cómo llevarlo a la máquina virtual, la solución que empleé, fue crear una imagen ISO, subirla a vSphere y montarla en la unidad de CD de la máquina virtual. Aquí explican más o menos el mecanismo.

A continuación, tuve un pequeño problema con los permisos. Tuve que cambiar el usuario y los permisos del fichero:

add@ubsyslog:/usr/lib/nagios/plugins$ sudo chown nagios:nagios check_folder_size2.sh
add@ubsyslog:/usr/lib/nagios/plugins$ sudo chmod 755 check_folder_size2.sh

Una vez completado todo esto, conseguí que el comando funcionara en local. Ahora llega la hora de probar que todos los comandos funcionan en remoto desde el servidor de nagios (ubnagios) utilizando el comando check_nrpe:

nag_cfg5

Todo funciona OK y esto me va a servir de plantilla para siguientes configuraciones.

Instalando Nagios (I)

El siguiente paso en la configuración de mi entorno lab es instalar un servidor Nagios para la supervisión y control de los distintos servidores del entorno. En este post y en el siguiente abordaremos la instalación de Nagios y, en un tercero, la configuración de Nagios.

Prólogo

El primer paso en la instalación de Nagios es crear un servidor virtual Ubuntu con 1GB de RAM y 10GB de disco y con el stack LAMP. La selección del stack LAMP la hacemos durante la instalación de Ubuntu.

nagios1

nagios2

Arrancamos la máquina virtual y actualizamos los paquetes instalados. A continuación, ya que hemos desplegado un servidor de syslog, hacemos la configuración necesaria para que los logs de este equipo vayan al servidor de syslog.

Para ello, editamos el fichero /etc/rsyslog.conf y añadimos, al final del fichero, la línea:

*.*	@192.168.199.2

El host 192.168.199.2 es el servidor de syslog.

nagios3

Re-arrancamos el servicio rsyslog y ya tenemos el equipo preparado para el despliegue de Nagios.

Para el despliegue de Nagios voy a ir siguiendo los pasos que se describen en este sitio. A ver si, por una vez, consigo hacer las cosas a la primera. La instalación de Nagios se va a realizar creando los binarios a partir del código fuente.

Capítulo 1. Creando los usuarios

Vamos a crear un usuario “nagios” y un grupo “nagcmd” y a añadir el usuario nagios a este grupo:

nagios4

nagios5

Capítulo 2. Actualizando el sistema e instalando las dependencias

La actualización del sistema la realizamos mediante el comando siguiente:

add@ubnagios~$ sudo apt-get update

A continuación vamos a instalar las dependencias necesarias para la compilación de Nagios:

add@ubnagios~$ sudo apt-get install build-essential libgd2-xpm-dev openssl libssl-dev xinetd apache2-utils unzip

Capítulo 3. Descarga e instalación de Nagios

El siguiente paso a abordar es la descarga, compilación e instalación de Nagios. De acuerdo a lo que dice en el sitio web, la última versión disponible es la 4.1.1. Así que vamos a descargar el tarball correspondiente, mediante curl.

nagios6

Descomprimimos …

add@ubnagios~$ tar –xvf nagios*

Configuramos …

add@ubnagios~$ cd nagios*
add@ubnagios~/nagios-4.1.1$ ./configure --with-mail=/usr/sbin/sendmail --with-nagios-group=nagios --with-command-group=nagcmd

nagios7

y construimos …

add@ubnagios~/nagios-4.1.1$ make all

nagios8

Ahora instalamos Nagios, ficheros de configuración y scripts de inicialización.

add@ubnagios~/nagios-4.1.1$ sudo make install
add@ubnagios~/nagios-4.1.1$ sudo make install-commandmode
add@ubnagios~/nagios-4.1.1$ sudo make install-init
add@ubnagios~/nagios-4.1.1$ sudo make install-config
add@ubnagios~/nagios-4.1.1$ sudo /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/apache2/sites-available/nagios.conf

Finalmente, para poder lanzar comandos a través de la interfaz web, añadimos el usuario del seervidor web, www-data al grupo nagcmd.

add@ubnagios~/nagios-4.1.1$ sudo usermod -G nagcmd www-data

Continuaremos en la segunda parte instalando los plugins y NRPE.