Nagios vigila, yo duermo

Monitorizar el estado de los dispositivos y sevicios de una red o infraestructura es una tarea complicada a la vez que necesaria. Nagios es una herramienta libre que nos permite monitorizar servidor, red y servicio de toda una organización ofreciéndonos características que no tienen nada que envidiar a cualquier otro sistema de monitorización de pago. Nagios es usado por miles de empresas de prestigio internacional. Más información en http://www.nagios.org. La comunidad que usa este software desarrolla cientos de plugins de forma que podemos monitorizar “casi” cualquier cosa relacionada con nuestra red, pásate por http://www.nagiosexchange.org y fíjate en la cantidad de utilidades que tenemos disponibles para hacer de Nagios “el ojo que todo lo ve”.

En esta sección haremos:

  • Instalar Nagios y los plugins.

  • Configuración básica.

  • Añadir un host.

  • Añadir servicios.

  • Otros aspectos de configuración como contactos, horarios y escaladas.

Instalación

Ahora vamos a instalarlo junto con los plugins, en este caso la versión de Nagios es la 2.6, que es la última estable. La versión del paquete de plugins es la 1.4.4:

[root@amanita ~]# yum -y install nagios nagios-plugins-all

Resumen y datos importantes sobre la instalación de Nagios en Fedora o RedHat:

  • /etc/nagios/ – Archivos de configuración

  • /etc/init.d/nagios – Script de arranque y parada.

  • /etc/httpd/conf.d/nagios.conf – Archivo incluido en Apache para mostrar Nagios via web.

  • /usr/sbin/nagios – Binario principal de Nagios.

  • /usr/lib/nagios/cgi-bin – Directorio de cgi al que se accede via web con $URL/nagios/cgi-bin

  • /usr/share/nagios/html – Directorio de html.

  • /var/log/nagios – Directorio de logs.

  • /var/run/nagios.pid – Archivo con el identificador de proceso (pid) de Nagios. /var/run/nagios.pid

Aunque no lo vamos a utilizar por ahora también instalaremos el paquete y plugin del Nagios Remote Plugin Execution (nrpe):

[root@amanita nagios]# yum -y install nrpe nagios-plugins-nrpe

Cuando instalamos Nagios con paquetes rpm, como es el caso, tendremos mucho trabajo hecho ya que tenemos algunos archivos configurados previamente, sin embargo, tenemos mucha tarea que hacer para dejar nuestro sistema de monitorización a punto.

Configuración necesaria para que el servidor web muestre correctamente las páginas de Nagios y nos solicite autenticación:

[root@amanita ~]# vi /etc/httpd/conf.d/nagios.conf

ScriptAlias /nagios/cgi-bin/ /usr/lib/nagios/cgi-bin/

<Directory /usr/lib/nagios/cgi-bin/>

Options ExecCGI

# order deny,allow

# deny from all

# allow from 127.0.0.1

AuthType Basic

AuthUserFile /etc/nagios/passwd

AuthName “nagios”

require valid-user

</Directory>

# Alias /nagios/ /usr/share/nagios/html/

Alias /nagios /usr/share/nagios/html/

<Directory /usr/share/nagios/html/>

Options None

# order deny,allow

# deny from all

# allow from 127.0.0.1

AuthType Basic

AuthUserFile /etc/nagios/passwd

AuthName “nagios”

require valid-user

</Directory>

El archivo de configuración de Apache se puede hacer mas restrictivo en cuanto a permisos de acceso, por ejemplo, la directiva “Allow from” se podría especificar de forma que solo permitimos acceso vía web a localhost y a la red 192.168.0.0/24 así:

Allow from 127.0.0.1 192.168.0.0/255.255.255.0

Reiniciamos Apache para que estos cambios tengan efecto:

[root@amanita ~]#/etc/init.d/httpd reload

Cargando httpd: [ OK ]

Creamos el usuario administrador de Nagios, el usuario admin:

[root@amanita ~]#htpasswd -c /etc/nagios/passwd admin

New password:

Re-type new password:

Adding password for user admin

También vamos a crear un usuario de solo lectura llamado operador, nótese el cambio en el comando htpasswd, esta vez no hay que poner la opción “-c” ya que es la opción para la primera vez que ese ejecute por “create”:

[root@amanita ~]# htpasswd /etc/nagios/passwd operador

New password:

Re-type new password:

Adding password for user operador

Configuración

Los archivos de configuración se encuentran en /etc/nagios y por defecto están renombrados para tener que renombrarlos a mano:

[root@amanita nagios]# cd /etc/nagios

[root@amanita nagios]# cp nagios.cfg-sample nagios.cfg

Comenta la linea de localhost.cfg, descomenta las siguientes lineas, añade cfg_dir tras los demás cfg_dir que hay comentados y modifica el atributo date_format:

[root@amanita nagios]# vi nagios.cfg

#cfg_file=/etc/nagios/localhost.cfg

cfg_file=/etc/nagios/contactgroups.cfg

cfg_file=/etc/nagios/contacts.cfg

cfg_file=/etc/nagios/dependencies.cfg

cfg_file=/etc/nagios/escalations.cfg

cfg_file=/etc/nagios/hostescalation.cfg

cfg_file=/etc/nagios/hostgroups.cfg

cfg_file=/etc/nagios/timeperiods.cfg

cfg_dir=/etc/nagios/devices

date_format=euro

Recuerda crear el directorio /etc/nagios/devices que será donde almacenaremos los archivos de configuración de todos los dispositivos (servidores, ruters, switch, etc) y tendremos un archivo por cada dispositivo para facilitar la administración de Nagios:

[root@amanita nagios]# mkdir /etc/nagios/devices

Adaptamos ahora el archivo cgi.cfg, ojo con los usuarios:

[root@amanita nagios]# cp cgi.cfg-sample cgi.cfg

[root@amanita nagios]# vi cgi.cfg

main_config_file=/etc/nagios/nagios.cfg

physical_html_path=/usr/share/nagios/share

url_html_path=/nagios

show_context_help=0

use_authentication=1

#default_user_name=guest

authorized_for_system_information=admin

authorized_for_configuration_information=admin

authorized_for_system_commands=admin

authorized_for_all_services=admin,operador

authorized_for_all_hosts=admin,operador

authorized_for_all_service_commands=admin

authorized_for_all_host_commands=admin

#statusmap_background_image=smbackground.gd2

default_statusmap_layout=5

default_statuswrl_layout=4

#statuswrl_include=myworld.wrl

ping_syntax=/bin/ping -n -U -c 5 $HOSTADDRESS$

refresh_rate=90

#host_unreachable_sound=hostdown.wav

#host_down_sound=hostdown.wav

#service_critical_sound=critical.wav

#service_warning_sound=warning.wav

#service_unknown_sound=warning.wav

#normal_sound=noproblem.wav

Ahora vamos a ir creando cada archivo por separado, en el directorio /etc/nagios.

Archivo timeperiods.cfg, en él se especifican los diferentes rangos horarios donde podremos definir los avisos en función de estos rangos horarios, por ejemplo 24×7 es todo el tiempo, semana completa. También podemos definir horarios de trabajo “workhours”. Yo asigno “workhours” a los usuarios que sólo quieren recibir alertas en el horario laboral, por ejemplo, los jefes:

[root@amanita nagios]# vi timeperiods.cfg

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

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

#

# TIME PERIODS

#

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

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

# This defines a timeperiod where all times are valid for checks,

# notifications, etc. The classic “24×7” support nightmare. 🙂

define timeperiod {

timeperiod_name 24×7

alias 24 Hours A Day, 7 Days A Week

sunday 00:00-24:00

monday 00:00-24:00

tuesday 00:00-24:00

wednesday 00:00-24:00

thursday 00:00-24:00

friday 00:00-24:00

saturday 00:00-24:00

}

# ‘workhours’ timeperiod definition

define timeperiod {

timeperiod_name workhours

alias “Normal” Working Hours

monday 09:00-18:00

tuesday 09:00-18:00

wednesday 09:00-18:00

thursday 09:00-18:00

friday 08:00-15:00

}

# ‘nonworkhours’ timeperiod definition

define timeperiod {

timeperiod_name nonworkhours

alias Non-Work Hours

sunday 00:00-24:00

monday 00:00-09:00,17:00-24:00

tuesday 00:00-09:00,17:00-24:00

wednesday 00:00-09:00,17:00-24:00

thursday 00:00-09:00,17:00-24:00

friday 00:00-08:00,15:00-24:00

saturday 00:00-24:00

}

# ‘none’ timeperiod definition

define timeperiod {

timeperiod_name none

alias No Time Is A Good Time

}

El archivo commands.cfg ya está definido aunque tendremos que ir ampliándolo para dotar de más funcionalidades a Nagios ya que es el comando donde se definen los nombres y el formato para ejecutar los diferentes plugins:

[root@amanita nagios]#cp commands.cfg-sample commands.cfg

Archivo contacts.cfg es el que contiene la definición de todas las personas que recibirán alertas, no tiene nada que ver con las personas que acceden vía web a Nagios, no te confundas. En este archivo sólo especificamos los receptores de los mails de aviso, por ejemplo, el administrador y operador de turno y he añadido un usuario llamado Toni que solo recibiría mensajes durante las horas de trabajo:

[root@amanita nagios]# vi contacts.cfg

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

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

#

# CONTACTS

#

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

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

define contact{

contact_name admin

alias Nagios Admin

service_notification_period 24×7

host_notification_period 24×7

service_notification_options w,u,c,r

host_notification_options d,r

service_notification_commands notify-by-email

host_notification_commands host-notify-by-email

email [email protected]

}

define contact{

contact_name toni

alias Toni de la Fuente

service_notification_period workhours

host_notification_period workhours

service_notification_options w,u,c,r

host_notification_options d,r

service_notification_commands notify-by-email

host_notification_commands host-notify-by-email

email [email protected]

}

El archivo contactgroups.cfg nos sirve para agrupar usuarios de forma que nos sea más fácil invocarlos en la definición de hosts, para añadir más miembros a un grupo lo podremos hacer separándolos por comas:

[root@amanita nagios]#vi contactgroups.cfg

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

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

#

# CONTACT GROUPS

#

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

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

# We only have one contact in this simple configuration file, so there is

# no need to create more than one contact group.

define contactgroup{

contactgroup_name admins

alias Nagios Administrators

members admin

}

define contactgroup{

contactgroup_name jefes

alias Jefes

members toni

}

hostgroups.cfg nos permite agrupar dispositivos, estos grupos se verán en la interfaz web:

[root@amanita nagios]#vi hostgroups.cfg

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

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

#

# HOST GROUPS

#

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

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

# We only have one host in our simple config file, so there is no need to

# create more than one hostgroup.

define hostgroup{

hostgroup_name servers

alias My Servers

members amanita

}

define hostgroup{

hostgroup_name networking

alias My Network Devices

members switch1

}

El archivo dependencies.cfg nos permite encadenar monitorizaciones para, por un lado, dibujar el esquema de red que veremos vía web y por otro lado evitar chequeos a máquinas que hay más allá del fallo, por ejemplo, si monitorizamos un servidor de correo pero entre ese servidor y nagios hay un switch y cae el switch, este tipo de relaciones, evitará enviar múltiples mensajes:

[root@amanita nagios]# vi dependencies.cfg

define hostdependency {

host_name amanita

dependent_host_name switch1

notification_failure_criteria d

execution_failure_criteria d

}

También podemos hacer algo parecido pero con servicios usando el archivo servicedependencies.cfg pero no lo vamos a configurar en esta ocasión. Por ejemplo, tenemos un servidor de correo que almacena los buzones en un volumen NFS. Pues este tipo de relaciones sería entre el servicio NFS del servidor NFS y el servicio de correo del servidor en cuestión.

El archivo hostescalation.cfg nos permite configurar el tiempo de escalado en los avisos, por ejemplo si hay un dispositivo que durante los primeros tres avisos el técnico no ha sido capaz de arreglarlo el jefe o jefes recivirán un aviso:

[root@amanita nagios]# vi hostescalation.cfg

define hostescalation {

host_name amanita

contact_groups jefes

first_notification 3

last_notification 0

notification_interval 60

}

También podemos definir escalado de servicios con el archivo serviceescalation.cfg pero no lo vamos a hacer en esta ocasión.

Tenemos que renombrar el archivo de macros que usa Nagios para simplificar su administración, nosotros usaremos el que hay por defecto:

[root@amanita nagios]# cp /etc/nagios/private/resource.cfg-sample /etc/nagios/private/resource.cfg

Ahora vamos a configurar los dispositivos que vamos a monitorizar. En primer lugar monitorizaremos la máquina local, es decir, el servidor Nagios al que hemos llamado “amanita”, como veremos en este archivo también definimos algunas plantillas:

[root@amanita nagios]# vi /etc/nagios/devices/amanita.cfg

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

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

#

# HOSTS

#

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

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

# Generic host definition template – This is NOT a real host, just a template!

define host{

name generic-host

notifications_enabled 1

event_handler_enabled 1

flap_detection_enabled 1

failure_prediction_enabled 1

process_perf_data 1

retain_status_information 1

retain_nonstatus_information 1

notification_period 24×7

register 0

}

# Linux host definition template – This is NOT a real host, just a template!

define host{

name linux-server

use generic-host

check_period 24×7

max_check_attempts 10

check_command check-host-alive

notification_period 24×7

notification_interval 120

notification_options d,u,r

contact_groups admins

register 0

}

# Since this is a simple configuration file, we only monitor one host – the

# local host (this machine).

define host{

use linux-server

host_name amanita

alias amanita

address 127.0.0.1

}

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

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

#

# SERVICES

#

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

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

# Generic service definition template – This is NOT a real service, just a template!

define service{

name generic-service

active_checks_enabled 1

passive_checks_enabled 1

parallelize_check 1

obsess_over_service 1

check_freshness 0

notifications_enabled 1

event_handler_enabled 1

flap_detection_enabled 1

failure_prediction_enabled 1

process_perf_data 1

retain_status_information 1

retain_nonstatus_information 1

is_volatile 0

register 0

}

# Local service definition template – This is NOT a real service, just a template!

define service{

name local-service

use generic-service

check_period 24×7

max_check_attempts 4

normal_check_interval 5

retry_check_interval 1

contact_groups admins

notification_options w,u,c,r

notification_interval 60

notification_period 24×7

register 0

}

# Define a service to “ping” the local machine

define service{

use local-service

host_nameamanita

service_description PING

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

}

# 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{

use local-service

host_nameamanita

service_description Root Partition

check_command check_local_disk!20%!10%!/

}

# 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{

use local-service

host_nameamanita

service_description Current Users

check_command check_local_users!20!50

}

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

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

# > 400 users.

define service{

use local-service

host_nameamanita

service_description Total Processes

check_command check_local_procs!250!400!RSZDT

}

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

define service{

use local-service

host_nameamanita

service_description Current Load

check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0

}

Añadimos también el dispositivo switch1, en este caso solo vamos a monitorizarlo por ping (tráfico ICMP):

[root@amanita nagios]# vi /etc/nagios/devices/switch1.cfg

# ‘switch1’ host definition

define host{

use generic-host

host_name switch1

alias switch1

address 10.73.130.1

check_command check-host-alive

max_check_attempts 10

check_period 24×7

notification_interval 120

notification_period 24×7

notification_options d,u,r

contact_groups admins

}

define service{

use local-service

host_name switch1

service_description PING

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

contact_groups admins

}

Ya tenemos configurado, de forma escueta, nuestro servidor Nagios, ahora tenemos que proceder a comprobar si todo lo que hemos hecho está correcto, de lo contrario Nagios no arrancaría ni funcionaría correctamente:

[root@amanita nagios]# nagios -v /etc/nagios/nagios.cfg

Nagios 2.6

Copyright (c) 1999-2006 Ethan Galstad (http://www.nagios.org)

Last Modified: 11-27-2006

License: GPL

Reading configuration data…

Running pre-flight check on configuration data…

Checking services…

Checked 6 services.

Checking hosts…

Checked 2 hosts.

Checking host groups…

Checked 2 host groups.

Checking service groups…

Checked 0 service groups.

Checking contacts…

Checked 2 contacts.

Checking contact groups…

Checked 2 contact groups.

Checking service escalations…

Checked 0 service escalations.

Checking service dependencies…

Checked 0 service dependencies.

Checking host escalations…

Checked 3 host escalations.

Checking host dependencies…

Checked 2 host dependencies.

Checking commands…

Checked 22 commands.

Checking time periods…

Checked 4 time periods.

Checking extended host info definitions…

Checked 0 extended host info definitions.

Checking extended service info definitions…

Checked 0 extended service info definitions.

Checking for circular paths between hosts…

Checking for circular host and service dependencies…

Checking global event handlers…

Checking obsessive compulsive processor commands…

Checking misc settings…

Total Warnings: 0

Total Errors: 0

Things look okay– No serious problems were detected during the pre-flight check

Si todo hemos tenido algún problema esta comprobación nos dirá donde para poder arreglarlo. Antes de arrancar Nagios vamos a configurarlo para que se arranque el servicio con el sistema:

[root@amanita ~]# chkconfig nagios on

Arrancamos Nagios… por fin:

[root@amanita nagios]# /etc/init.d/nagios start

Starting network monitor: nagios

Abrimos un navegador y accedemos por primera vez http://IPSERVIDOR/nagios/, recuerda el usuario y la contraseña que pusimos al principio admin/contraseña:

Ilustración 1

Si pinchas en “Tactical Overview” podemos ver:

Ilustración 2

Para ver todos los dispositivos, servicios y el estado de éstos la mejor opción es “Service Detail”, es la visión que más me gusta y que más cómoda me parece para tener una cantidad pequeña de máquinas:

Ilustración 3

Cuando tenemos muchas máquinas y servicios, la mejor visión o página que ofrece Nagios, desde mi punto de vista, es “Hostgroup Overview” siempre que tengamos agrupados los dispositivos en grupos.

No basta con ser bueno, hay que parecerlo:

Como has comprobado Nagios no es precisamente la “Miss aplicación web bonita” así que vamos a proceder a hacerlo más agradable a la vista con el paquete Nagios-Nuvola, para ello nos descargamos el paquete de http://www.nagiosexchange.org/Image_Packs.75.0.html?&tx_netnagext_pi1[p_view]=252&tx_netnagext_pi1[page]=10%3A10 concretamente el paquete nagios-nuvola-1.0.3.tar.gz.

Lo copiamos al home de root (/root) y hacemos los siguientes pasos:

1º Nos situamos en el directorio donde está el html original:

[root@amanita~]# cd /usr/share/nagios/

2º Hacemos una copia del html original moviéndolo:

[root@amanita nagios ]# mv html html-original

3º Descomprimimos el paquete descargado, éste nos creará un directorio llamado html como el anterior:

[root@amanita nagios]# tar zxvf /root/nagios-nuvola-1.0.3.tar.gz

4º Configuramos los permisos correctamente:

[root@amanita nagios]# chmod -R 755 html

5º Ahora podemos hacer una recarga de la página web de Nagios en el navegador y veremos algo como esto:

Ilustración 4

¿Que te parece? Más elegante ¿no? Si, a mi también me lo parece. Además este tema nos viene con conjunto de logos (/usr/share/nagios/html/images/logos) que nos permiten dibujar hacer unos esquemas de red mas intuitivos gracias a hostextinfo. Veamos como añadimos un icono a cada uno de nuestros servidores:

Al final del archivo de amanita:

define hostextinfo {

host_name amanita

notes This is the server Nagios is running on

icon_image server.gif

2d_coords 50,100

}

Añadimos al final del archivo del dispositivo switch1:

define hostextinfo {

host_name switch1

notes Switch de la red

icon_image network.gif

2d_coords 50,150

}

Después de estos cambios solo tenemos que recargar la configuración de Nagios con el siguiente comando:

[root@amanita logos]# /etc/init.d/nagios reload

Running configuration check…done

Reloading nagios configuration…done

Ahora vemos el icono junto al nombre de dispositivo:

Ilustración 5

Podemos ver mas datos en la sección “ Status Map”:

Ilustración 6

Gráficas en Nagios con APAN:

Hasta aquí todo bien ¿no? Pues ahora vamos a hacer que Nagios nos muestre gráficas RRD para tener mejor visión de los servicios que monitorizamos. Una de las aplicaciones que ofrecen esta funcionalidad a Nagios es APAN (Advanced Performance Addon for Nagios).

Descargamos la última versión de APAN de http://apan.surceforge.net que será la 0.3.0 e instalamos:

[root@amanita ~]# tar zxvf apan-0.3.0-sql.tar.tar

[root@amanita ~]#mv apan-sql /usr/share/nagios/

[root@amanita ~]#chmod +x /usr/share/nagios/apan-sql/plugs-sql/

Edita apan-sql.sh, apan-sql.cgi, apanconf-sql y generate-sql.cgi para adaptar la siguiente linea:

DEFSFILE=/usr/share/nagios/apan-sql/apan.defs

Ahora adaptamos el archive apan.devs:

#Base-directory for nagios:

NAGIOSDIR=/usr/share/nagios

#The directory where apan is installed

APANDIR=$NAGIOSDIR/apan-sql

#The directory where Nagios plugins resides

PLUGINSDIR=/usr/lib/nagios/plugins

#The directory where Nagios .cfg-files resides

ETCDIR=/etc/nagios

# The directory where apans plugins resides

PLUGSDIR=$APANDIR/plugs-sql

# Path to rrdtool

RRDTOOL=/usr/bin/rrdtool

[root@amanita apan-sql]#mysql -u root -p

Enter password:

mysql>create database apan;

Query OK, 1 row affected (0.00 sec)

mysql>grant all privileges on apan.* to apanuser@localhost identified by ‘contraseña’;

Query OK, 0 rows affected (0.03 sec)

mysql> exit;

Bye

En el archivo apan-sql.cgi:

LASTSTAT=`egrep -e “SERVICE;$HOST;$SVCNAME” /usr/local/nagios/var/status.log`

Por esta otra:

LASTSTAT=`egrep -e “SERVICE STATE; $HOST;$SVCNAME” /var/log/nagios/nagios.log`

Ten encuenta que hay un espacio entre STATE; y $HOST pero no hay espacio entre $HOST; y $SVCNAME

Modifica la ruta el createdb.sh

CFGFILE=/usr/share/nagios/apan-sql/apan.defs

Modifica la ruta el import.sh

# Change this if you are not installing apan in the default location

. /usr/share/nagios/apan-sql/apan.defs

# This should point to the sercvice-config-file from your old Apan-installation

CFGFILE=/usr/share/nagios/apan/apan.cfg

[root@amanita apan-sql]#cp /usr/share/nagios/apan-sql/*cgi /usr/lib/nagios/cgi-bin/

Configuramos el archive sql.conf para acceder a la base de datos apan:

# SQL-Username and password

SQLUSER=apanuser

SQLPASS=contraseña

# Database

SQLDB=apan

[root@amanita apan-sql]#./createdb.sh

Creating table ‘apanservices’…

Creating table ‘apanserviceargs’…

Creating table ‘apancolors’…

[root@amanita apan-sql]#cp graph.png /usr/share/nagios/html/images/logos/

[root@amanita apan-sql]#cp /usr/share/nagios/apan-sql/libexec/* /usr/lib/nagios/plugins/

[root@amanita apan-sql]#vi /etc/nagios/commands.cfg

## APAN

define command {

command_name apan-sql

command_line /usr/share/nagios/apan-sql/apan-sql.sh $ARG1$ $HOSTNAME$ “$SERVICEDESC$” $TIMET$ $ARG2$ $ARG3$

}

Fruity: configuración de Nagios vía web

Ya tenemos casi listo el entorno de monitorización pero si has estado viendo los archivos de configuración de Nagios y has visto lo “divertido” que es añadir un nuevo dispositivo, habrás deseado no haber nacido, o casi 😉 así que vamos a ver una utilidad que nos hace más fácil la configuración vía web. Hay muchas herramientas que permiten configurar Nagios vía web y las puedes encontrar en http://www.nagiosexchange.org. Nosotros vamos a ver uno de las más conocidas: Fruity ( http://fruity.sourceforge.net/) que nos permitirá importar los datos que tenemos actualmente en Nagios y posteriormente hacer todo el aprovisionamiento de dispositivos vía web.

Descargamos la versión fruity-1.0-rc2 de la web del proyecto en Sourceforge y comenzamos la instalación basándonos en la información del archivo INSTALL que hay dentro del paquete:

[root@amanita ~]#tar zxvf fruity-1.0-rc2.tar.gz

Movemos el directorio al “ DocumentRoot” de Apache para poder acceder vía web:

[root@amanita ~]#mv fruity-1.0-rc2 /var/www/html/fruity

Copiamos el directorio “logos” de Nagios en el directorio base de fruity:

[root@amanita ~]# cp-R /usr/share/nagios/html/images/logos \ /var/www/html/fruity/

Creamos la base de datos e importamos el esquema de fruity:

[root@amanita images]#mysql -u root -p

Enter password:

mysql>create database fruity;

Query OK, 1 row affected (0.04 sec)

mysql>grant all privileges on fruity.* to fruityuser@localhost identified by ‘contraseña’;

Query OK, 0 rows affected (0.02 sec)

mysql>exit

Bye

[root@amanita ~]#mysql -u fruityuser -p fruity < \ /var/www/html/fruity/sqldata/fruity-mysql.sql

Enter password:

Editamos el archivo de configuración para ajustar los valores necesarios, esta es una parte del archivo de configuración con las opciones más importantes:

[root@amanita ~]# vi /var/www/html/fruity/includes/config.inc

// System Configuration

$sys_config[‘name’] = ‘Groundwork Fruity’;

$sys_config[‘version’] = ‘1.0 Release Candidate 2’;

$sys_config[‘logos_path’] = ‘ /var/www/html/fruity/logos‘;

$sys_config[‘network_desc’] = ” Mi red“;

$sys_config[‘nagios_preflight’] = false;

$sys_config[‘nagios_path’] = ‘ /usr/sbin/nagios‘;

$sys_config[‘nagios_start’] = ‘/etc/init.d/nagios start’;

$sys_config[‘nagios_stop’] = ‘/etc/init.d/nagios stop’;

$sys_config[‘temp_dir’] = ‘/tmp’;

$sitedb_config[‘host’] = ‘localhost’;

$sitedb_config[‘username’] = ‘fruityuser’;

$sitedb_config[‘password’] = ‘contraseña’;

$sitedb_config[‘database’] = ‘fruity’;

$sitedb_config[‘dbserv’] = ‘mysql’;

Ahora vamos a asegurarnos que el acceso a Fruity es autenticado, además lo haremos con los mismos usuarios y contraseñas que para acceder a Nagios, para ello definimos el directorio protegido en Apache creando el siguiente archivo:

[root@amanita ~]#

<Directory /var/www/html/fruity/>

Options None

# order deny,allow

# deny from all

# allow from 127.0.0.1

AuthType Basic

AuthUserFile /etc/nagios/passwd

AuthName “nagios”

require valid-user

</Directory>

Reiniciamos Apache para que los cambios tengan efecto:

[root@amanita ~]#/etc/init.d/httpd restart

Parando httpd: [ OK ]

Iniciando httpd: [ OK ]

Ya podemos situar nuestro navegador en la URL: http://IPSERVIDOR/fruity y veremos algo así:

Ilustración 7

Para poder usar Fruity con los dispositivos que ya tenemos definidos y con la configuración actual debemos importar los datos actuales, para ello nos vamos a la sección “Import” del menú superior:

Ilustración 8

Tras hacer “Begin Import” deberemos ver que todo ha ido bien en la siguiente pantalla:

Ilustración 9

Ahora podemos acceder a todas las secciones y veremos que están configuradas. Es importante repasar toda la configuración que aparece en Fruity y asegurarnos que está correctamente por si al importar los archivos de configuración ha habido algún error que no se ha podido contemplar.

Cuando hacemos alguna modificación necesitamos que Fruity vuelva a generar los archivos de configuración, es decir, necesitamos exportar los datos de la base de datos de Fruity a los archivos de configuración de Nagios y para poder hacerlo hay que ajustar los permisos del directorio de configuración de Nagios de forma que el usuario apache pueda escribir y modificar dichos archivos de configuración. Esto no es recomendable pero obligatorio para que funcione Fruity. Es importante que el servidor de monitorización esté aislado, securizado y sea independiente a otros servidores:

[root@amanita fruity]#chmod -R 775 /etc/nagios/

[root@amanita fruity]#chown -R root:apache /etc/nagios/

[root@amanita fruity]# chown -R nagios:apache /etc/nagios/private

Nos situamos en la sección “Export” y hacemos clic en “YES”, veremos una pantalla como la siguiente:

Ilustración 10

Tras hacer un “Export” deberemos reiniciar a mano Nagios para que los cambios tengan efecto. Ten en cuenta que si has definido “escalations” puede ser que falle el reinicio de Nagios debido a un fallo de Fruity. Deberás editar a mano el archivo escalations.cfg y borrar la primera sección del archivo. Posteriormente hacemos un reload de Nagos:

[root@amanita ~]# /etc/init.d/nagios reload

Running configuration check…done

Reloading nagios configuration…done

NOTA: Antes de reiniciar o recargar Nagios, siempre es recomendable ejecutar el comprobador de sintaxis para asegurarnos que todos los archivos están correctamente definidos ( nagios -v /etc/nagios/nagios.cfg)

Por ahora eso es todo con Nagios aunque éste software es merecedor de mas de un libro. Hay mucha información por ahí fuera. A lo largo de estos años he usado Nagios en muchos entornos y en sus diferentes versiones, también he leido mucha documentación y sin duda, uno de los mejores documentos que he leído sobre Nagios es un “Short Cuts” de O’Reilly escrito por Taylor Dondich y está disponible por $9,99 en http://www.oreilly.com/catalog/networknagios/ que merece mucho la pena. También puedes ojear la sección “ Propaganda” de la web oficial http://www.nagios.org para tener más referencias y convencer a tu jefe de que Nagios es mejor que el método que estáis usando ahora.

12 thoughts to “Nagios vigila, yo duermo”

  1. Hola,
    He seguido el articulo y está muy interesante y me ha servido de mucho en mi proyecto final de carrera. Dicho proyecto se centra en una arquitectura distribuida de nagios, es decir, un servidor con Nagios en cada cliente y que todos envien los resultados a una base de datos central. He configurado todo de forma local para probar con solo un programa Nagios, Ndoutils y MYSQL, pero para la arquitectura distribuida se me escapa un poco la manera de configurar el NDOutils.
    ¿Sabes alguna pagina que trate de este tema?, es que todo lo que encuentro es para una configuración local.

  2. Hola, me ha encantado este articulo, es de lo mejor que he visto en español, sin embargo, me pasa algo extraño, no he podido activar el apan, podrías ayudarme con un ejemplo en donde se defina la gratificación de algún servicio o la carga del sistema ?

  3. Hola, Te felicito por el articulo, tenemos implementado Nagios en mi trabajo y nos servira de mucho para la documentacion quee stamos guardando. Tengo una duda a ver si me puedes ayudar, los plugins que consigo para monitorear los equipos con so. solaris usan NRPE, conoces alguna dirección donde hayan desarrollado plugins que residan en el servidor de monitoreo y hagan la consulta via polling? .

  4. Hola, soy nuevo en la implementacion de Nagios, ya lo tengo instalado pero no logro hacer que las notificaciones me lleguen a un correo, ya instale el postfix y varias herramientas que eh visto en internet pero aun no me queda, tendras alguna manual o sabras donde puedo encontrar informacion referente a mi problema, de antemano te agradezco…. saludos

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.