Cómo instalar Nagios 3.0.5 en GNU Linux Ubuntu Server 8.04.1 (válido para otras versiones y distribuciones de GNU Linux). También os indicamos paso a paso cómo configurarlo para que monitorice varios equipos de nuestra red (servidor web, servidor de almacenamiento). Nagios es un sistema open source que permite monitorizar servicios de red y avisar si cambia su estado.
- Definición de Nagios.
- Instalación de Nagios en GNU Linux Ubuntu Server 8.04.1.
- Instalar los paquetes necesarios (Required Packages).
- Crear usuario y grupo de seguridad para nagios (Account information).
- Descargar fichero instalación Nagios y los plugin necesarios.
- Compilar e instalar Nagios.
- Configurar la interfaz web (Web Interface).
- Compilar e instalar los Plugins de Nagios.
- Iniciar Nagios.
- Acceso a la administración web de Nagios.
- Cómo configurar Nagios para monitorizar varios servidores.
- Fichero de configuración principal nagios.cfg.
- Ficheros de grupos hosts, hosts, servidores, equipos, dispositivos a monitorizar.
- Fichero de grupos de contactos y contactos.
- Definición de los comandos.
- Verificación de la configuración introducida.
- Posibles errores de configuración y su causa y solución.
- Reinicio servicio Nagios y comprobación de la monitorización de los hosts añadidos.
Definición de Nagios
Nagios es un sistema open source que permite monitorizar servicios de red (SMTP, POP3, HTTP, NTTP, ICMP, SNMP, etc.) y recursos de un host (carga del procesador, uso de los discos, logs del sistema, estado de los servicios, etc.). También permite notificar el cambio de estado de estos servicios a los contactos indicados, cuando se produzca el cambio indicado, vía email, pager (busca), SMS, o cualquier método definido por el usuario.
Instalación de Nagios en GNU Linux Ubuntu Server 8.04.1
Os explicamos en este artículo cómo instalar Nagios en GNU Linux Ubuntu Server 8.04.1, para ells seguiremos los siguientes pasos:
Instalar los paquetes necesarios (Required Packages)
En primer lugar hemos de comprobar en GNU Linux que disponemos de los siguientes paquetes, necesarios para el correcto funcionamiento y administración de Nagios:
- Apache 2.
- GCC compiler and development libraries.
- GD development libraries.
Para instalarlos abriremos una ventana de terminal (si tenemos el modo gráfico de Linux Ubuntu Server instalado) y escribiremos el siguiente comando (para instalar Apache 2):
sudo apt-get install apache2
Si ya está instalado mostrará un mensaje como este:
Leyendo lista de paquetes…
Creando árbol de dependencias…
Leyendo la información de estado…
apache2 ya está en su versión más reciente.
0 actualizados, 0 se instalarán, 0 para eliminar y 22 no actualizados.
Este otro:
sudo apt-get install libapache2-mod-php5
Y este otro para instalar GCC y GD:
sudo apt-get install build-essential
Si aparece este error:
… 404 Not Found.
No se pudieron obtener algunos archivos, ¿quizás deba ejecutar apt-get update o deba intentarlo de nuevo con –fix-missing?
Ejecutaremos el comando:
sudo apt-get update
Y volveremos a ejecutar el comando anterior.
Nota 1: para la versión de Ubuntu 6.10 deberemos ejecutar:
sudo apt-get install libgd2-dev
Nota 2: para la versión de Ubuntu 7.10, el nombre de la la librería gd2 es libgd2-xpm-dev, con lo cual el comando a ejecutar sería:
sudo apt-get install libgd2-xpm-dev
Crear usuario y grupo de seguridad para nagios (Account information)
A continuación crearemos un usuario del sistema Linux para el uso de Nagios (con nombre «nagios» y con contraseña «nagios»), para ello ejecutaremos el siguiente comando:
sudo /usr/sbin/useradd -m nagios
Para establecer la contraseña del usuario «nagios» creado escribiremos el comando Linux:
sudo passwd nagios
Crearemos también un grupo de seguridad llamado «nagios»:
sudo /usr/sbin/groupadd nagios
Y añadiremos el usuario «nagios» a este grupo con el comando:
sudo /usr/sbin/usermod -G nagios nagios
Crearemos otro grupo de seguridad para permitirle la ejecución de comandos externos a través de la interfaz web, con nombre «nagcmd»:
sudo /usr/sbin/groupadd nagcmd
Añadiremos al grupo creado anteriormente el usuario «nagios»:
sudo /usr/sbin/usermod -G nagcmd nagios
También agregaremos a este grupo el usuario de Apache «www-data»:
sudo /usr/sbin/usermod -G nagcmd www-data
Descargar fichero instalación Nagios y los plugin necesarios
Tras preparar el sistema Linux instalando los paquetes necesarios y creando los grupos y usuarios, procederemos a descargar el fichero de instalación de Nagios y los Plugin. Para ello, desde la línea de comandos, en primer lugar nos crearemos una carpeta para guardar las descargas, con el comando:
sudo mkdir decargas_nagios
Accedemos al directorio creado con:
cd descargas_nagios
Y ejecutaremos el siguiente comando para descargar desde Internet el fichero comprimido de instalación de Nagios 3.0.5 (necesitaremos disponer de conexión a Internet en el equipo Linux Ubuntu):
sudo wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.5.tar.gz
Descargaremos también los Plugins de nagios, con el comando:
sudo wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.13.tar.gz
Antes de continuar, para evitar problemas de permisos en la carpeta donde hemos descargado los ficheros de Nagios, ejecutaremos el comando:
sudo chmod /descargas_nagios 777
Compilar e instalar Nagios
Para finalizar el proceso de instalación de Nagios 3.0.5 descomprimiremos los ficheros descargados y los compilaremos. Para descomprimirlos ejecutaremos el siguiente comando:
tar xzf nagios-3.0.5.tar.gz
Accederemos a la carpeta que ha creado el comando anterior:
cd nagios-3.0.5
Ejecutaremos el script de configuración de Nagios, pasándole como parámetro el nombre del grupo creado anteriormente:
./configure –with-command-group=nagcmd
Compilamos el código fuente de Nagios con el comando:
make all
Instalamos los ficheros binarios y HTML:
make install
Instalamos los script de inicio:
make install-init
Los ficheros de configuración de ejemplo:
make install-config
Este comando creará los archivos cgi.cfg, nagios.cfg, resource.cfg de configuración en la carpeta /usr/local/nagios/etc
Es necesario que el usuario «nagios» creado anteriormente tenga permisos de lectura/escritura sobre estos archivos .cfg, el siguiente script realizará esa tarea:
make install-commandmode
Configurar la interfaz web (Web Interface)
Para instalar la interfaz web de administración de Nagios, configurando el fichero conf.d de Apache, ejecutaremos el siguiente comando:
sudo make install-webconf
Con el siguiente comando crearemos una cuenta de usuario para acceder a la configuración de Nagios desde la interfaz web. Al ejecutar este comando nos pedirá que introduzcamos una contraseña, que será la que utilicemos para acceder a la interfaz web de Nagios:
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Para que los cambios tengan efecto reiniciaremos el servicio de Apache, con el comando:
/etc/init.d/apache2 reload
Si todo es correcto nos devolverá algo así:
* Reloading web server config apache2 [ OK ]
Compilar e instalar los Plugins de Nagios
Accederemos a la carpeta donde hemos descargado el fichero que contiene los plugins de Nagios, con el comando:
cd /descargas_nagios
Descomprimiremos el fichero descargado nagios-plugins-1.4.13.tar.gz con el comando:
tar xzf nagios-plugins-1.4.13.tar.gz
Accederemos a la carpeta creada con la descompresión:
cd nagios-plugins-1.4.13
A continuación compilaremos e instalaremos los plugins de Nagios con el comando:
sudo ./configure –with-nagios-user=nagios –with-nagios-group=nagios
A continuación ejecutaremos:
make
y luego:
make install
Iniciar Nagios
Si queremos que el servicio de Nagios se ejecute automáticamente cada vez que reiniciemos el equipo, ejecutaremos el siguiente comando:
sudo ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios
Verificaremos los ficheros de configuración de ejemplo que incluye Nagios, con el comando:
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Si no hay errores (lo indica al final del comando con «Total Warnings» y «Total Errors») podremos iniciar Nagios con el comando:
/etc/init.d/nagios start
Si todo es correcto mostrará:
Starting nagios: done.
Acceso a la administración web de Nagios
Una vez instalado e iniciado Nagios, podremos acceder a la web de administración desde cualquier equipo de la red, tanto con sistema operativo Windows como GNU Linux. En nuestro caso accederemos a Nagios desde un equipo con Windows XP SP3, para ello abriremos un navegador web (como Mozilla Firefox) y escribiremos la siguiente URL:
http://192.168.1.111/nagios
Donde «192.168.1.111» será la IP del equipo donde hayamos instalado Nagios.
Nos pedirá usuario y contraseña, introduciremos en «Nombre de usuario» el usuario creado en pasos anteriores «nagiosadmin» y la contraseña introducida al crearlo:
El aspecto de la página principal de administración de Nagios versión 3.0.5, desde este página podremos ver el estado actual de los servicios monitorizados, entre otras cosas:
Pulsando en «Service Detail» podremos ver los servicios y equipos actualmente monitorizados por Nagios. Tras la instalación, Nagios sólo monitoriza (como ejemplo) el propio equipo donde ha sido instalado y, dentro de este equipo, monitoriza los servicios de HTTP, PING, SSH, Swap Usage, Total Processes:
Cómo configurar Nagios para monitorizar varios servidores
Fichero de configuración principal nagios.cfg
Desde el servidor con GNU Linux y Nagios, abriremos una ventana de terminal y accederemos a la carpeta que contiene los ficheros de configuración de Nagios, con el comando:
cd /usr/local/nagios/etc
En primer lugar editaremos el fichero de configuración principal de Nagios (mainfile) llamado «nagios.cfg», lo podremos hacer con cualquier editor, por ejemplo:
sudo nano /usr/local/nagios/etc/nagios.cfg
En este fichero deberemos indicar la carpeta de ficheros .cfg ó el fichero de extensión .cfg que contendrá los hosts que monitorizaremos. En nuestro caso añadiremos una carpeta completa:
/usr/local/nagios/etc/hosts
Para ello añadiremos la siguiente línea (en cualquier parte del fichero nagios.cfg):
cfg_dir=/usr/local/nagios/etc/hosts
Guardaremos los cambios con «Control + O» y cerramos nano GNU nano con «Control + X».
Desde este fichero podremos configurar todos los parámetros generales de Nagios.
Ficheros de grupos hosts, hosts, servidores, equipos, dispositivos a monitorizar
Para indicar a Nagios los servidores, equipos o dispositivos a monitorizar, crearemos la carpeta «hosts», con el comando:
sudo mkdir /usr/local/nagios/etc/hosts
(que es la carpeta donde hemos indicado en nagios.cfg que contendrá los hosts)
Accederemos a ella con:
cd /usr/local/nagios/etc/hosts
En esta carpeta crearemos dos ficheros, por un lado crearemos el fichero que contendrá los grupos de hosts (para agrupar los servidores por «tipo»), por ejemplo con el nombre «grupos.cfg», para ello escribiremos el siguiente comando:
sudo nano /usr/local/nagios/etc/hosts/grupos.cfg
En el editor escribiremos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
define hostgroup { hostgroup_name terminal-server alias Servidores de Terminal Server members srvts1 } define hostgroup { hostgroup_name almacenamiento alias Servidores de Almacenamiento members srvdatos1, srvdatos2 } define hostgroup { hostgroup_name base-datos alias Servidores de Base de Datos members srvbd1 } define hostgroup { hostgroup_name electronica_red alias Electrónica de red (routers, switchs) members router_oficina } |
Os explicamos cada parámetro:
- hostgroup_name: nombre interno del grupo de hosts.
- alias: nombre que se mostrará para identificar el grupo de hosts.
- members: nombre de los hosts (definidos en el mismo u otro fichero de configuración) que pertenecerán a este grupo.
Obviamente, no sabremos los «members» hasta que no creemos el fichero de configuración con los hosts a monitorizar por Nagios. Este fichero «grupos.cfg» podremos editarlo en cualquier momento y agregar los miembros que deseemos.
Crearemos ahora un nuevo fichero con el nombre que queramos y la extensión .cfg, este fichero contendrá la configuración necesaria para agregar los distintos servidores y dispositivos a la monitorización de Nagios. Crearemos este fichero con:
sudo nano /usr/local/nagios/etc/hosts/servidores.cfg
Agregaremos lo siguiente al fichero:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
define host { host_name srvdatos1 alias srvdatos1 address 192.168.1.2 check_command check-host-alive max_check_attempts 10 notification_interval 0 notification_period 24x7 notification_options d,u,r notifications_enabled 1 contact_groups contactos_almacenamiento } define host { host_name srvdatos2 alias srvdatos2 address 192.168.1.2 check_command check-host-alive max_check_attempts 10 notification_interval 0 notification_period 24x7 notification_options d,u,r notifications_enabled 1 contact_groups contactos_almacenamiento } define host { host_name srvbd1 alias srvbd1 address 192.168.1.100 check_command check-host-alive max_check_attempts 10 notification_interval 0 notification_period 24x7 notification_options d,u,r notifications_enabled 1 contact_groups contactos_base_datos } define host { host_name srvts1 alias srvts1 address 192.168.1.150 check_command check-host-alive max_check_attempts 10 notification_interval 0 notification_period 24x7 notification_options d,u,r notifications_enabled 1 contact_groups contactos_terminal_server } define host { host_name router_oficina alias router_oficina address 192.168.1.1 check_command check-host-alive max_check_attempts 10 notification_interval 0 notification_period 24x7 notification_options d,u,r notifications_enabled 1 contact_groups contactos_routers } |
A continuación explicamos algunos de los parámetros:
- host_name: nombre interno del hosts (servidor o dispositivo).
- alias: nombre que identificará el host en el administrador de Nagios.
- address: dirección IP del host o dispositivo.
- check_command: comando que se utilizará para comprobar la disponibilidad del host o dispositivo, normalmente «check-host-alive».
- notifications_enabled: habiltar / deshabilitar las notificaciones en caso de caída de este host o dispositivo («1» habilitadas las notificaciones, «0» deshabilitadas las notificaciones).
- contact_groups: grupo de contactos a los que se notificará en caso de caída del host o dispositivo.
En este fichero definiremos todos los host (servidores o pcs que queramos monitorizar) y todos los dispositivos (impresoras de red con IP propia, switch con IP, routers, etc.). Por supuesto, se pueden separar en tantos ficheros .cfg como deseemos, puesto que hemos configurado Nagios (nagios.cfg) para que utilice todos los ficheros .cfg de la carpeta /usr/local/nagios/etc/hosts.
Fichero de grupos de contactos y contactos
Deberemos crear también los grupos de contactos, podremos hacerlo en la misma carpeta donde hemos creado los grupos de hosts y hosts, accederemos a esta carpeta:
cd /usr/local/nagios/etc/hosts
Crearemos aquí un fichero con los grupos de contactos, llamado «grupos_contactos.cfg»:
sudo nano /usr/local/nagios/etc/hosts/grupos_contactos.cfg
En este fichero introduciremos algo así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
define contactgroup { contactgroup_name contactos_almacenamiento alias Contactos aviso servidores almacenamiento members ajpdsoft, fernando } define contactgroup { contactgroup_name contactos_base_datos alias Contactos aviso servidores Base de Datos members fernando, alonso } define contactgroup { contactgroup_name contactos_routers alias Contactos aviso Electronica de red members ajpdsoft, fernando, alonso } |
Creando todos los grupos de contactos, para el aviso (en caso de caída) de los servicios, hosts, dispositivos monitorizados. Lo normal es que, dependiendo del servidor a monitorizar, haya que avisar a un grupo u otro de contactos. Por ejemplo, en una organización con cuatro técncios dedidcados a administración de redes y tres técnicos dedicados a administración de base de datos, lo normal será crear dos grupos de contactos, uno para el aviso en caso de caída de la electrónica de red (administradores de redes) y otro para aviso en caso de caída del servidor (o los servicios) de la base de datos (administradores de base de datos).
A continuación crearemos otro fichero que contendrá los contactos propiamente dichos y la información de cada uno (email, nombre, etc.):
sudo nano /usr/local/nagios/etc/hosts/contactos.cfg
Con el contenido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
define contact { contact_name alonso alias Alonso J. host_notifications_enabled 1 service_notifications_enabled 1 service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notificar_email host_notification_commands notificar_email email alonso_t@proyectoa.com can_submit_commands 1 } define contact { contact_name ajpdsoft alias AjpdSoft host_notifications_enabled 1 service_notifications_enabled 1 service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notificar_email host_notification_commands notificar_email email ajpdsoft@proyectoa.com can_submit_commands 1 } define contact { contact_name fernando alias Fernando Alonso host_notifications_enabled 1 service_notifications_enabled 1 service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notificar_email host_notification_commands notificar_email email fernando@proyectoa.com can_submit_commands 1 } |
Definición de los comandos
En el paso anterior, para el contacto, en el parámetro «service_notification_commands» hemos establecido el comando «notificar_por_email» que hay que definir. Para ello crearemos un nuevo fichero que llamaremos «comandos.cfg» que contendrá todos los comandos que utilicemos definidos:
sudo nano /usr/local/nagios/etc/hosts/comandos.cfg
Con el contenido:
1 2 3 4 |
define command { command_name notificar_email command_line /usr/bin/printf "%b" "Nagios\n\nTipo: $NOTIFICATIONTYPE$\n<br> \nServicio: $SERVICEDESC$\nHost: $HOSTALIAS$<br> \nIP: $HOSTADDRESS$\nEstado: $SERVICESTATE$\n\nFecha: $DATETIME$\n\n<br> Información:\n\n$OUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ <br> alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ } |
Nota: el contenido anterior para el parámetro «command_line» va en una sola línea, lo hemos partido para que la línea no quede excesivamente larga en la visulazación del navegador.
Verificación de la configuración introducida
Para que los cambios tengan efecto en Nagios, en primer lugar comprobaremos que la sintaxis introducida es correcta, para ello utilizaremos el comando:
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Deberemos asegurarnos de que al compilar no aparezcan errores:
Total Errors: 0
A continuación os mostramos algunos de los posibles errores al compilar los ficheros de configuración de Nagios.
Posibles errores de configuración y su causa y solución
Si hay algún error de sintaxis en algunos de los ficheros .cfg, el comando de verificación anterior nos mostrará algo así:
Nagios 3.0.5
Copyright (c) 1999-2008 Ethan Galstad (http://www.nagios.org)
Last Modified: 11-04-2008
License: GPL
Reading configuration data…
Error: Invalid hostgroup object directive ‘{‘.
Error: Could not add object property in file ‘/usr/local/nagios/etc/hosts/grupos.cfg’ on line 2.
*** One or more problems was encountered while processing the config files…
Check your configuration file(s) to ensure that they contain valid
directives and data defintions. If you are upgrading from a previous
version of Nagios, you should be aware that some variables/definitions
may have been removed or modified in this version. Make sure to read
the HTML documentation regarding the config files, as well as the
‘Whats New’ section to find out what has changed.
Indicando el fichero y la línea del fichero donde está el error de sintaxis y el error que se ha producido.
Si no encuentra un host en el fichero servidores.cfg de los indicados en «members» del fichero grupos.cfg mostrará algo así:
Reading configuration data…
Error: Could not find any host matching ‘srvts1’ (config file ‘/usr/local/nagios/etc/hosts/grupos.cfg’, starting on line 1)
Error: Could not expand members specified in hostgroup (config file ‘/usr/local/nagios/etc/hosts/grupos.cfg’, starting on line 1)
*** One or more problems was encountered while processing the config files…
Si no encuentra un grupo de contactos (contact_groups) para notificación de los hosts, mostrará algo así:
Reading configuration data…
Running pre-flight check on configuration data…
Checking services…
Checked 8 services.
Checking hosts…
Error: Contact group ‘contactos_routers’ specified in host ‘router_oficina’ is not defined anywhere!
Error: Contact group ‘contactos_base_datos’ specified in host ‘srvbd1’ is not defined anywhere!
Error: Contact group ‘contactos_almacenamiento’ specified in host ‘srvdatos1’ is not defined anywhere!
Error: Contact group ‘contactos_almacenamiento’ specified in host ‘srvdatos2’ is not defined anywhere!
Error: Contact group ‘contactos_terminal_server’ specified in host ‘srvts1’ is not defined anywhere!
Si no se ha asociado ningún servicio a un host mostrará un warning (permite iniciar Nagios, es un aviso):
Reading configuration data…
Running pre-flight check on configuration data…
Checking services…
Checked 8 services.
Checking hosts…
Warning: Host ‘router_oficina’ has no services associated with it!
Warning: Host ‘srvbd1’ has no services associated with it!
Warning: Host ‘srvdatos1’ has no services associated with it!
Warning: Host ‘srvdatos2’ has no services associated with it!
Warning: Host ‘srvts1’ has no services associated with it!
Si se produce algún error, como los anteriores, lo solucionaremos editando los ficheros de configuración .cfg (servidores.cfg, grupos.cfg, etc.) indicados en el propio error. Normalmente el comando de verificación suele indicarnos el motivo del error, el fichero donde se produce e incluso la línea del fichero. Tras editarlo y guardar los cambios volveremos a verificar los ficheros con el siguiente comando, hasta que no haya errores (sí puede haber warnings):
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Reinicio servicio Nagios y comprobación de la monitorización de los hosts añadidos
Una vez verificados los ficheros de configuración de Nagios para que no haya errores, reiniciaremos el servicio para que se apliquen los cambios, con el comando:
/etc/init.d/nagios restart
Devolverá algo así:
Running configuration check… done.
Stopping nagios: done.
Starting nagios: done.
Ahora podremos acceder a la administración web de Nagios y veremos los nuevos hosts y dispositivos añadidos (desde «Host Detail»):
En nuestro caso, hemos configurado los host para que se compruebe su estado mediante un PING, si alguno no está disponible en la red, Nagios, mostrará una aviso como este:
CRITICAL – Host Unreachable (192.168.1.150)
Si el host o dispositivo responde al PING correctamente, Nagios, mostrará un mensage como este en «Status Information»:
PING OK – Packet loss = 0%, RTA = 0.16 ms