Nagios en Debian Lenny

Hoy veremos como instalar y configurar Nagios de una manera básica en Debian Lenny.

Para instalarlo, bastará con un:

aptitude install nagios3

Nos vamos al directorio del Nagios:

cd /etc/nagios3

Creamos un login para entrar en Nagios e introducimos la contraseña:

htpasswd -c htpasswd.users nagiosadmin

Para probar, introducimos la IP de nuestro servidor seguido de nagios3 en la barra de direcciones y nos debería de salir algo parecido a esto:



Los archivos de configuración se encuentran en el directorio /etc/nagios3/conf.d. En el directorio /etc/nagios3 se encuentra un archivo de configuración (nagios.cfg) que de momento no vamos a tocar, ya que no es necesario para una configuración básica.

Vamos a centrarnos en los archivos que están en el directorio conf.d. El primero, contacts.cfg:

Aqui se le dice a Nagios a quien enviará emails, de que tipo, con que frecuencia, etc. Podemos crear grupos de usuarios para que reciban las mismas notificaciones. En este caso, solo creare un usuario y un grupo.

Ahora, voy a explicar del modo en que yo configuro Nagios. Seguro que los habrá mejores, pero a mi me funciona bien así. Vamos a configurar 3 archivos:

El primero, es el hosts.cfg. Si este archivo no existe, lo creamos. En el, vamos a introducir todos los hosts, dispositivos de red, etc. de los que queramos monitorizar algo. Soy partidario de organizar muy bien los archivos de texto, por lo que pongo etiquetas por grupos y demás. Un ejemplo de este archivo de configuración, podría ser el siguiente:

########################################

### DISPOSITIVOS DE RED ###

########################################

define host {

host_name Fortinet_Interna

alias Fortinet_Interna

address 192.168.1.1

use generic-host

}

define host {

host_name Fortinet_Externa

alias Fortinet_Interna

address 172.16.0.2

use generic-host

}

define host {

host_name Router_Ono_Interna

alias Router_Ono_Interna

address 172.16.0.1

use generic-host

}

define host {

host_name Switch1

alias Switch1

address 192.168.1.205

use generic-host

}

define host {

host_name Switch2

alias Switch2

address 192.168.1.206

use generic-host

}

define host {

host_name Switch3

alias Switch3

address 192.168.1.207

use generic-host

}

define host {

host_name Switch4

alias Switch4

address 192.168.1.208

use generic-host

}

define host {

host_name DiscoRed1

alias DiscoRed1

address 192.168.1.22

use generic-host

}

define host {

host_name DiscoRed2

alias DiscoRed2

address 192.168.1.240

use generic-host

}

define host {

host_name Centralita1

alias Centralita1

address 192.168.1.200

use generic-host

}

define host {

host_name Centralita2

alias Centralita2

address 192.168.1.201

use generic-host

}

define host {

host_name iLO-SRV*****

alias iLO-SRV*****

address 192.168.1.250

use generic-host

}

define host {

host_name iLO-ESXi1

alias iLO-ESXi1

address 192.168.1.251

use generic-host

}

define host {

host_name iLO-SRVW2008

alias iLO-SRVW2008

address 192.168.1.252

use generic-host

}

########################################

### SERVIDORES WINDOWS ###

########################################

define host {

host_name SRV*****

alias SRV*****

address 192.168.1.5

use generic-host

}

define host {

host_name vSRV*****

alias vSRV******

address 192.168.1.4

use generic-host

}

define host {

host_name vSRVApliWeb

alias vSRVApliWeb

address 192.168.1.47

use generic-host

}

########################################

### SERVIDORES DEBIAN ###

########################################

define host {

host_name vSRVDebian

alias vSRVDebian

address 127.0.0.1

use generic-host

}

define host {

host_name vSRVDebianWS1

alias vSRVDebianWS1

address 192.168.1.103

use generic-host

}

########################################

### SERVIDORES VMWARE ###

########################################

define host {

host_name ESXi1

alias ESXi1

address 192.168.1.14

use generic-host

}

El siguiente archivo es el hostgroups_nagios2.cfg. En este archivo vamos a agrupar todos los hosts dados de alta en el archivo anterior. A Nagios no le gusta que un host no esté dentro de un grupo (Nos mandará “Warnings”). Así que no se debe olvidar meter a todos los host en grupos. En mi caso el archivo ha quedado así:

########################################

### GRUPOS DISPOSITIVOS DE RED ###

########################################

define hostgroup {

hostgroup_name Dispositivos_Red

alias Dispositivos_Red

members Fortinet_Interna,Fortinet_Externa,Router_Ono_Interna,Centralita1,Centralita2,DiscoRed1,DiscoRed2,Switch1,Switch2,Switch3,Switch4,iLO-SRVAstarte,iLO-ESXi1,iLO-SRVW2008

}

########################################

### GRUPOS SERVIDORES WINDOWS ###

########################################

define hostgroup{

hostgroup_name Servidores_Windows ; The name of the hostgroup

alias Servidores Windows ; Long name of the group

members SRV*****,vSRV*****,vSRVApliWeb

}

########################################

### GRUPOS SERVIDORES DEBIAN ###

########################################

define hostgroup {

hostgroup_name Servidores_Debian

alias Servidores Debian GNU/Linux

members vSRVDebian, vSRVDebianWS1

}

########################################

### GRUPOS SERVIDORES WEB ###

########################################

define hostgroup {

hostgroup_name Servidores_Web

alias Servidores Web

members vSRVDebian, vSRVDebianWS1

}

########################################

### GRUPOS SERVIDORES VMWARE ###

########################################

define hostgroup {

hostgroup_name Servidores_VMWARE

alias Servidores VMWARE

members ESXi1

}

El último archivo a editar es el services_nagios2.cfg. En este, vamos a dar de alta todos los servicios que queramos que Nagios monitoree y le asignaremos los grupos de hosts a dichos servicios. Los servicios los he “copiado” del archivo /etc/nagios3/conf.d/localhost_nagios2.conf (Servicios a monitorear en máquinas Linux) y del archivo windows.cfg (Servicios a monitorear en máquinas Windows). Este último archivo lo he buscado con un updatedb + locate, porque no me acordaba de donde se encontraba. En mi caso, este archivo ha quedado así:

########################################

### SERVICIOS DISPOSITIVOS DE RED ###

########################################

define service {

hostgroup_name Dispositivos_Red

service_description PING

check_command check_ping!100.0,20%!500.0,60%

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

########################################

### SERVICIOS SERVIDORES WINDOWS ###

########################################

define service{

hostgroup_name Servidores_Windows

service_description NSClient++ Version

check_command check_nt!CLIENTVERSION

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

define service{

hostgroup_name Servidores_Windows

service_description Tiempo Funcionando

check_command check_nt!UPTIME

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

define service{

hostgroup_name Servidores_Windows

service_description Rendimiento CPU

check_command check_nt!CPULOAD!-l 5,80,90

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

define service{

hostgroup_name Servidores_Windows

service_description Uso de memoria

check_command check_nt!MEMUSE!-w 80 -c 90

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

define service{

hostgroup_name Servidores_Windows

service_description Espacio en Unidad C

check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

#define service{

# hostgroup_name Servidores_Windows

# service_description W3SVC

# check_command check_nt!SERVICESTATE!-d SHOWALL -l W3SVC

# use generic-service

# notification_interval 0 ; set > 0 if you want to be renotified

# }

define service{

hostgroup_name Servidores_Windows

service_description Explorer

check_command check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

########################################

### SERVICIOS SERVIDORES DEBIAN ###

########################################

define service {

hostgroup_name Servidores_Debian

service_description SSH

check_command check_ssh

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

# Define a service to check the disk space of the root partition

# on the local machine. Warning if < 20% free, critical if

# < 10% free space on partition.

define service{

hostgroup_name Servidores_Debian

service_description Espacio en disco

check_command check_all_disks!20%!10%

use generic-service ; Name of service template to use

notification_interval 0 ; set > 0 if you want to be renotified

}

# Define a service to check the number of currently logged in

# users on the local machine. Warning if > 20 users, critical

# if > 50 users.

define service{

hostgroup_name Servidores_Debian

service_description Usuarios Actuales

check_command check_users!20!50

use generic-service ; Name of service template to use

notification_interval 0 ; set > 0 if you want to be renotified

}

# Define a service to check the number of currently running procs

# on the local machine. Warning if > 250 processes, critical if

# > 400 processes.

define service{

hostgroup_name Servidores_Debian

service_description Procesos Totales

check_command check_procs!250!400

use generic-service ; Name of service template to use

notification_interval 0 ; set > 0 if you want to be renotified

}

# Define a service to check the load on the local machine.

define service{

hostgroup_name Servidores_Debian

service_description Rendimiento CPU

check_command check_load!5.0!4.0!3.0!10.0!6.0!4.0

use generic-service ; Name of service template to use

notification_interval 0 ; set > 0 if you want to be renotified

}

########################################

### SERVICIOS SERVIDORES WEB ###

########################################

define service {

hostgroup_name Servidores_Web

service_description HTTP

check_command check_http

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

########################################

### SERVICIOS SERVIDORES VMWARE ###

########################################

define service {

hostgroup_name Servidores_VMWARE

service_description PING

check_command check_ping!100.0,20%!500.0,60%

use generic-service

notification_interval 0 ; set > 0 if you want to be renotified

}

Ahora vamos a comprobar que la configuración que hemos introducido es correcta. Para ello:

nagios -v /etc/nagios3/nagios.cfg

Seguramente Nagios nos de algún error. Pero nos indica el archivo y línea en el que se encuentra, por lo que solo tendremos que ir y corregirlos. Habrá que repetir este proceso hasta que NAgios nos diga que no encuentra ningún error. Una vez conseguido, reiniciamos Nagios:

/etc/init.d/nagios3 restart

Si nos vamos a la interfaz web de Nagios e intentamos forzar un check de los servicios en todos los hosts, nos dará un error porque Nagios por defecto no ejecute comandos externos. El error en cuestión es el siguiente:

Could not stat() command file ‘/var/lib/nagios3/rw/nagios.cmd’!

Para arreglar esto, editamos el archivo /etc/nagios3/nagios.cfg y nos vamos a la línea donde se encuentra la directiva ‘check_external_commands’ y le ponemos un valor igual a 1, como en la imagen:

c3 external commands.png

Ejecutamos los siguientes comandos:

/etc/init.d/nagios3 stop

dpkg-statoverride —update —add nagios www-data 2710 /var/lib/nagios3/rw

dpkg-statoverride —update —add nagios nagios 751 /var/lib/nagios3

/etc/init.d/nagios3 start

Ahora ya deberá funcionar correctamente la interfaz web, le pidamos lo que le pidamos…
El siguiente paso es configurar el envío de correos electrónicos. En el primer archivo que editamos pusimos la configuración de los contactos a los que les tenía que llegar el correo y ahora vamos a configurar el envío de los mails. Hay varios modos de hacerlo (Con scripts de Perl, usando un servidor de correo local, un smarthost, etc.). En mi caso he instalado y configurado un Postfix en el propio servidor de Nagios para que mande los emails usando un servidor de correo externo.
Instalamos Postfix:

aptitude install postfix

Durante la instalación, le diremos que vamos a usar un SmartHost y le pondremos el nombre de nuestro servidor de correo. Por ejemplo: smtp.midominio.com
Una vez instalado, creamos el archivo /etc/postfix/sasl/passwd y le introducimos la siguiente información:

[smtp.tudominio.com]:25 tucuenta@tudominio.com:TuPassword

Guardamos el archivo y ahora le asignamos los permisos correspondientes:

chmod 600 /etc/postfix/sasl/passwd

Y por último lo transformamos en un fichero indexado de tipo hash con la ayuda de postmap:

postmap /etc/postfix/sasl/passwd

Reiniciamos Postfix (/etc/init.d/postfix restart) y para probar el envío ejecutamos:

mail -s “Prueba” tucorreo@tudominio.com

Debemos pulsar CTRL+D para que envíe

Y nos debería de llegar el correo…

Para monitorear equipos con Linux o dispositivos de red a los que solo queramos hacerle un ping, con esto será bastante. Pero como supongo que también habrá que controlar máquinas Windows, vamos a seguir con la configuración. Ahora vamos a editar el archivo /etc/nagios-plugins/config/nt.cfg y lo dejamos así:

# ‘check_nt’ command definition

define command{

command_name check_nt

command_line /usr/lib/nagios/plugins/check_nt -H $HOSTADDRESS$ -p 12489 -s TuPassword -v $ARG1$ $ARG2$

}

Reiniciamos el Nagios para que valide los cambios y ahora vamos a configurar los equipos Windows. Para que Nagios recupere la información de estos equipos, vamos a instalarle un cliente llamado NSClient++. Lo podemos descargar de aquí. Como este cliente no es solo para Nagios, tendremos que hacer unos cuantos ajustes en su configuración para que funcione correctamente.

Durante la instalación, le diremos la IP del servidor Nagios, así como la contraseña que escribimos antes en el archivo /etc/nagios-plugins/config/nt.cfg. A la hora de seleccionar la ventana con los “checks”, marcaremos todos menos la última opción (WMI Checks…creo que se llamaba). Cuando nos pregunté si queremos iniciar el servicio, le decimos que NO.

Ahora deberemos seguir 5 pasos para terminar de configurar el cliente.

1. Nos vamos al administrador de servicios, buscamos el servicio del NSClient y le damos a ver sus propiedades. Debemos marcar la casilla que “Permite a los servicios interactuar con el escritorio”. Lo tenemos en la siguiente imagen:

Todavía NO inciamos el servicio. Sigamos.

El archivo de configuración se llama NSC.ini y se encuentra en el directorio donde hemos instalado el cliente (Normalmente en Archivos de Programa >> NSclient). Este archivo consta de varias secciones con distintas directivas en cada una. Vamos a seguir los 4 pasos restantes:

2. Dentro de la sección [Modules] vamos a descomentar todo, a excepción de las directivas ‘RemoteConfiguration.dll’ y ‘CheckWMI.dll’. También descomentamos la directiva ‘Password’ y le ponemos la contraseña que pusimos durante la instalación del cliente

3. Ahora, en la sección [Settings], descomentamos la directiva ‘allowed_host’ y le ponemos la IP del servidor Nagios.

4. En la sección [NSClient], descomentamos la directiva ‘port’, dejando el número de puerto establecido por defecto.

5. Por último, desde una ventana de MS-DOS, ejecutamos el comando: lodctr /R. Con este comando, aunque no es obligatorio, reiniciamos los contadores de rendimiento y demás, evitando errores como el de la siguiente imagen:

Pues ya hemos terminado. Ahora, si apuntamos a la interfaz web de Nagios y nos validamos, debería de aparecernos algo parecido a esto: (Variará según los equipos que hayáis dado de alta)

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 )

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 )

Google+ photo

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

Conectando a %s