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.
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.
Hola, gracias por tu comentario.
Me alegro que te ayudara. No he instalado Nagios con soporte BBDD para sistemas distribuidos pero si he instalado sistemas distribuidos con Nagios, creo que está documentado para la versión 3 en http://www.nagios.org/docs/, también hay información muy interesante en http://community.nagios.org/wiki/index.php/Main_Page
Saludos.
Hola, me gustaria eliminar del circulo verde que rodea a los iconos en el statusmap.
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 ?
error en lo de arriba, es graficación… no gratificación :p
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? .
Hola Sandra, gracias por leer el blog y participar. Puedes ver una gran colección de plugins de Nagios de todos los tipos en http://www.monitoringexchange.org/ y en http://exchange.nagios.org/. Seguro que ahí encuentras lo que buscas.
Hola, muchas gracias por toda la info 🙂 esta de diez, gracias por compartir, sigur así. Saludos
Me alegro que sea útil Remi. Saludos!
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
Me imagino que será configuración de postfix, depende de la versión de Nagios. Aquí tienes como se configura con postfix: http://www.becodemyfriend.com/2011/04/manual-de-instalacion-y-configuracion-de-nagios-3-monitoring-parte-ii/