miércoles, 4 de mayo de 2011
martes, 31 de marzo de 2009
External Command File
El External Command File es un archivo externo el cual Nagios revisa por comandos externos a procesar. El commando CGI escribe directamente al archivo. Es creado cuando Nagios es ejecutado y es destruido cuando Nagios deja de ejecutarse. Su definición esta en nagios.cfg.
Format: command_file=
Example: command_file=/usr/local/nagios/var/rw/nagios.cmd
Ahora, vamos a arreglar todo para que no tengamos problemas al querer ejecutar comandos desde la página WEB de Nagios.
Primero verificamos en que grupo corre nuestro servidor WEB (nobody, apache, etc), que usuario esta ejecutando Nagios (por lo regular es nagios) y debemos crear un grupo para Nagios, puede ser nagios o nagioscmd, en este ejemplo usamos nagios, por lo regular según tu instalación ya estará creado.
Si no esta creado ejecutamos el siguiente commando.
isuraeru@isuraeru:~> /usr/sbin/groupadd nagios
Despues agregamos el grupo WEB al grupo de Nagios
isuraeru@isuraeru:~> /usr/sbin/usermod -G nagios apache
Despues verificamos si existe el directorio rw en nuestro directorio var:
i.e. /usr/local/nagios/var/rw
Si no existe adivinen que, pues lo creamos.
En caso de que ya exista confirmamos que tenga los siguientes permisos:
isuraeru@isuraeru:~> drwxrws--- 2 nagios nagios 1024 Aug 11 16:30 rw
Si no existe hacemos estos movimientos:
isuraeru@isuraeru:~> mkdir /usr/local/nagios/var/rw
isuraeru@isuraeru:~> chown nagios.nagios /usr/local/nagios/var/rw
isuraeru@isuraeru:~> chmod u+rwx /usr/local/nagios/var/rw
isuraeru@isuraeru:~> chmod g+rwx /usr/local/nagios/var/rw
isuraeru@isuraeru:~> chmod g+s /usr/local/nagios/var/rw
Verificamos los permisos
isuraeru@isuraeru:~> drwxrws--- 2 nagios nagios 1024 Aug 11 16:30 rw
Reiniciamos el servidor WEB y listo, solo vamos a cualquier equipo y en la sección de Host Commands podemos ejecutar cualquiera, tambien en los servicios.
NRPE
Introducción
Este pequeño daemon te permite ejecutar plugins locales en equipos remotos de equipos Linux, como es esto, el plugin check_nrpe es llamado por Nagios y hace las peticiones de los plugins hacia el equipo remoto, requiere que NRPE este siendo ejecutado en ese equipo como un standalone daemon o como un servicio en inetd, tambien soporta encriptación nativa de SSL/TLS.
Hay una versión para Win2 pero la verdad opte por nsclient o nc_net.
NOTA - La última versión es la 2.0 y es incompatible con las versiones 1.x, tanto para clientes como servidores.
Aquí explicare de manera básica sus archivos y su funcionamiento.
En el paquete de NRPE pueden encontrar los siguientes archivos:
NRPE - Este es el programa que se ejecuta como proceso en el background en los equipos remotos y procesa las peticiones de ejecución de comandos del plugin check_nrpe del equipo donde esta Nagios. Recibe la petición del equipo autorizado, procesa la información del command line asociado con el comando que recibe y envia la información solicitada al plugin check_nrpe.
check_nrpe - Este es el plugin que se ejecuta en el equipo donde esta Nagios y es utilizado para contactar el proceso NRPE en los equipos remotos. Este plugin solicita al plugin remoto a ejecutarse en el equipo y espera que el proceso de NRPE se ejcuta y regrese la informacion solicitada.
Compilar
Sencillo, simplemente descompriman el paquete y ejecuten:
isuraeru@localhost$ ./configure
isuraeru@localhost$ make all
IMPORTANTE - El daemon NRPE debe ser compilado en el equipo remoto.
Instalación
Solo copiar el archivo check_nrpe en /usr/local/nagios/plugins o dependiendo donde tengan sus plugins.
En el caso del equipo remoto deben tener el daemon NRPE en donde tienen sus daemons i.e. /etc/rc.d/nrpe y tambien el archivo nrpe.cfg i.e. /etc/nrpe.cfg.
Ejecutando bajo inetd o xinetd
Asi es como lo tengo configurado y me funciona muy bien tenemos que ejecutar nrpe bajo inetd o xinetd y hacemos uso de los TCP wrappers, realizamos lo siguiente:
1.- Agregamos una linea en /etc/services como la siguiente:
nrpe 5666/tcp # NRPE
2.- Despues configuramos las entradas del daemon NRPE ya sea en inetd o xinetd, yo utilice inetd
NOTA - Si ejecutamos nrpe en inetd o xinetd, las variables server_port y allowed_hosts en el archivo de configuración del nrpe serán ignoradas.
Inetd
Si nuestro sistema utiliza inetd CON tcpwrappers agregamos la siguiente entrada en /etc/inetd.conf:
nrpe stream tcp nowait [user] /usr/sbin/tcpd [nrpebin] -c [nrpecfg] --inetd
Si nuestro sistema utiliza inetd SIN tcpwrappers agregamos la siguiente entrada en /etc/inetd.conf:
nrpe stream tcp nowait [user] [nrpebin] -c [nrpecfg] --inetd
Solamente reemplazamos user por el usuario que el servidor nrpe sera ejecutado. i.e. nagios.
nrpebin con el path del binario de nrpe i.e. /usr/local/nagios/nrpe
nrpecfg con el path del archivo de configuracion de nrpe i.e. /usr/local/nagios/nrpe.cfg o /etc/nrpe.cfg.
Xinetd
Si nuestro sistema utiliza xinetd en vez de inetd creamos un archivo llamado nrpe en /etc/xinetd.d conteniendo lo siguiente:
# default: on
# description: NRPE
service nrpe
{
flags = REUSE
socket_type = stream
wait = no
user = [user]
server = [nrpebin]
server_args = -c [nrpecfg] --inetd
log_on_failure += USERID
disable = no
only_from = [ipaddress1] [ipaddress2] ...
}
Reemplazamos user por el usuario que el servidor nrpe sera ejecutado. i.e. nagios.
nrpebin con el path del binario de nrpe i.e. /usr/local/nagios/nrpe
nrpecfg con el path del archivo de configuracion de nrpe i.e. /usr/local/nagios/nrpe.cfg o /etc/nrpe.cfg
ipaddress con las direcciones IP de los equipos qu deseamos sean aceptados para conectarse al daemon NRPE. Esto funciona solamente si xinetd fue compilado con soporte para tcpwrappers.
3.- Reiniciamos inetd o xinetd i.e.
isuraeru@localhost# /etc/rc.d/init.d/inet restart
isuraeru@localhost# /etc/rc.d/init.d/xinetd restart
4.- Agregamos entradas en nuestros archivos /etc/hosts.allow y /etc/hosts.deny para habilitar protección TCP wrapper para el servicio nrpe, es opcional pero altamente recomendado.
IMPORTANTE - Los plugins que se deseen ejecutar en el equipo remoto forzosamente deben estar en ese equipo por i.e. yo tengo un equipo que ejecuto check_procs, check_users y check_cpu los cuales los tengo en /usr/local/nagios/libexec y deben de ser propiedad de nagios.nagios.
OK, todo esto fue para los equipos remotos o clientes, ahora vamos a configurar el equipo donde esta Nagios.
Configuración equipo Nagios
Primeramente ya contamos con un archivo de configuracion nrpe.cfg de ejemplo incluido en el paquete de nrpe el cual va en los equipos remotos ahora definiremos el comando para nrpe ya sea en checkcommands.cfg o commands.cfg dependiendo d cual esten utilizando, el cual podemos declararlo así
define command{
command_name check_nrpe
command_line /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
Ahora, para ejecutar este comando en los equipos remotos debemos de crear un servicio para tales equipos por ejemplo
define service{
host_name someremotehost
service_description someremoteservice
check_command check_nrpe!yourcommand
... etc ...
}
En donde yourcommand es el comando que deseamos ejecutar en el equipo remoto i.e. check_procs.
Y listo.
Dudas, ya saben a donde escribir. Saludos.
SNMP
Introduccion
El Simple Network Managment Protocol (SNMP) es un protocolo de la capa de aplicacion el cual facilita el intercambio de informacion entre los dispositivos de la red, es parte del Transmission Control Protocol/Internet Protocol (TCP/IP).
El protocolo SNMP fue desarrollado en 1988 y se ha convertido en el estandar por defecto para el manejo de la comunicacion. Debido a que es sencillo y facil de desarrollar aplicaciones para el los proveedores de dispositivos pueden facilmente agregar agentes SNMP a sus productos.
Actualmente hay dos versiones de SNMP : SNMP version 1 (SNMPv1) y SNMP version 2 (SNMPv2), las cuales son similares, pero la version 2 tiene mejoras en cuanto a operaciones del protocolo, hay una tercera version la cual tiene pendiente la estandarizacion SNMP Version 3 (SNMPv3), por lo cual nos enfocaremos solo a las primeras versiones.
Componentes basicos y arquitecturas de manejo de red.
Una red manejada por SNMP cuenta con tres componentes clave para su funcionamiento : Dispositivos manejados (Managed Devices), Agentes (Agents) y Sistemas de manejo de red (network-management systems (NMSs)).
Un managed device es un nodo en la red el cual contiene un agente SNMP, pueden colectar y guardar informacion de manejo y ponen esta informacion disponible a los NMS de la red usando SNMP, estas entidades pueden ser Bridges, hubs, switches, servidores de red, etc. estos son unos ejemplos y tambien suelen ser llamados elementos de red.
Un Agent es un modulo de software de manejo de red que esta en un managed device, tiene conocimiento local de informacion de manejo y traduce esa informacion en forma compatible para SNMP.
Un NMS ejecuta aplicaciones que monitorean y controlan los managed devices. NMS provee la informacion de los recursos de procesamiento y de memoria que son requeridos para el manejo de la red. Uno o mas pueden coexistir en la red.
Ok, como utilizo esto en Nagios?
Bueno, ahora vamos a la mejor parte, como utilizar nuestro SNMP en Nagios, no voy a entrar al tema de como configurar el SNMP en Linux.
Primero que nada debemos saber nuestros OIDs (Object Identifiers) para lo que deseamos monitorear, esto lo podemos obtener por medio de un MIB Browser (Managment Information Base), con esto podemos saber lo que deseemos de nuestros equipos, vamos a poner un ejemplo:
Tengo un servidor Windows 2003 Server y quiero saber solamente su uptime, podemos hacer lo siguiente:
1.- Habilitar el servicio de SNMP en el servidor, asignarle nuestra comunidad y permisos necesarios para que solamente nosotros tengamos acceso a esa información.
2.- Agregamos el servicio en Nagios
define service{
use generic-service
host_name myserver
service_description Uptime
is_volatile 0
check_period 24x7
max_check_attempts 4
normal_check_interval 8
retry_check_interval 1
contact_groups nt-admins
notification_interval 120
notification_period 24x7
notification_options c,r
check_command check_snmp!.1.3.6.1.2.1.1.3.0 # Este es el OID del uptime
}
3.- Declaramos nuestro comando check_snmp
define command{
command_name check_snmp
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -C readonly -o $ARG1$
}
¿Como funciona el comando?, primero le indicamos de que host deseamos la información, la comunidad (-C) y el OID (-o) el cual viene como argumento ($ARG1$), esto quiere decir que puedo declarar otro servicio SNMP y utilizar el mismo comando, solo cambiando el OID o argumento.
Verificamos que no haya ningún error en la configuración y reseteamos el proceso de Nagios.
Y eso estodo, es solamente de jugar con los OIDs.
APAN
Obteniendo Apan y requerimientos previos.
Previamente necesitamos RRDTool instalado para poder continuar, ya que RRDTool es una herramienta para guardar y desplegar datos de tiempo-serie (ejemplo: ancho de banda de una red, temperatura de una maquina en un cuarto, etc., lo bueno de este software es que guarda la información en una forma muy compacta y que a la larga no se expande demasiado y puede usarse vía scripts o frontends.
RRD significa Round Robin Database.
Instalando Apan
Para instalar Apan hacemos lo siguiente
Vamos a nuestro directorio de Nagios (i.e. /usr/local/nagios) y extraemos el archivo de Apan.
Un nuevo directorio es creado llamado apan, solo verificamos que el usuario de Nagios tenga privilegios en
el directorio y que pueda ejecutar el archivo apan-sql.sh
Copiamos los archivos apan-sql.cgi y generate-sql.cgi a el directorio cgi-bin de Nagios (i.e. /usr/local/nagios/sbin), los cuales hacemos ejecutables para el servidor WEB.
Copiamos el archivo graph.png al directorio logos de Nagios (i.e. /usr/local/nagios/share/images/logos).
Configurando Apan.
Primero configuramos el entorno:
Modificamos apan.defs a nuestras necesidades, si tenemos Apan en otro directorio que no sea el /usr/local/nagios/apan-sql tenemos que poner el path de apan.defs en los archivos apan-sql.sh, apan-sql.cgi, generate.cgi y apanconf-sql.
Creamos la base de datos, Apan esta preconfigurado para MySQL pero puede ser portado a otra base modificando sql.conf y createdb.sh.
Debemos tener funcionando MySQL y entramos al mismo como superusuario o usamos cualquier frontend de MySQL como phpMyAdmin, MysqlBrowser, etc. y ejecutamos los siguientes comandos:
create database nagios;
grant all on nagios.* to nagios@localhost identified by 'nagios123';
podemos usar nuestro propio nombre de la base de datos, usuario y contraseña.
Actualizamos el archivo sql.conf con los datos que nosotros proporcionamos en el paso anterior.
Creamos la base de datos ejecutando el archivo createdb.sh
Con Apan viene el script apanconf-sql el cual podemos usarlo para manejar los servicios de Apan, antes de usarlo ocupamos modificarlo a nuestras necesidades:
NAGIOSUSERGROUP : Usuario y grupo de Nagios (default: nagios / nagios)
EXTINFOFILE : El archivo donde serviceextinfo esta guardado. Serviceextinfo es usado para poner un enlace y un icono a un lado del servicio en la interfaz WEB de Nagios. El archivo debe de estar configurado en el archivo cgi.cfg de Nagios usalmente podemos usar el mismo serviceextinfo que ya esta en el directorio etc.
CGIURL: El directorio CGI de Nagios usalmente localizado en nagios/cgi-bin o /usr/local/nagios/sbin.
RRDDIR: El directorio donde estan guardados los archivos RRD generados usualmente en $NAGIOSDIR/rrd. RRDSTEP, RRDDSMIN, RRDDSMAX, RRDDRAWTYPE: Especifica el intervalo base en segundos en el cual los datos seran agregados en los archivos RRD, valores mínimos y máximos y el tipo de línea utlizada para las gráficas. Default 60,0, U y Line2. Para mayor referencia ve el Manual de RRDTool.
RRAS: Archivos Round-Robin predeterminados para nuevos archivos RRD. Valores predeterminados son: RRA:AVERAGE:0.5:1:50400 RRA:AVERAGE:0.5:60:43800
Esto significa un archivo con un promedio de 1 minuto de los ultimos 35 dias y un archivo con promedios de 1 hora de los ultimos 5 años.
HINTS: Para que sea mas facil apanconf despliega los ultimos valores de graph-label, graph-unit y extra arguments de rrdtool, podemos copiarlos y pegarlos cuando queramos crear nuevos servicios. El valor 0 desactiva la funcion.
Asi nos quedaria el check-command para Apan:
- define command{
command_name apan-sql
command_line /usr/local/nagios/apan-sql/apan-sql.sh $ARG1$ $HOSTNAME$ $SERVICEDESC$ $TIMET$ $ARG2$ $ARG3$
}
Añadiendo Servicios.
Ahora viene lo interesante, agregar servicios de Apan a Nagios.
Para agregar servicios a Nagios hacemos lo siguiente:
Definimos el servicio por ejemplo ping y load:
define service {
host_name server1,server2
service_description Ping
check_command apan-sql!ping!100.0,20%!500.0,60%
name Ping
use generic-service
normal_check_interval 1
}
define service {
host_name server3,server4
service_description Load
check_command apan-sql!load!70!90
use generic-test
normal_check_interval 1
}
Ahora agregamos los servicios en Apan ejecutando apanconfig-sql:
1. Seleccionamos 1 (Agregar nuevo servicio).
2. Escribimos el nombre del equipo (Igual que en Nagios, es sensible mayúsculas y minúsculas).
3. Escribimos el nombre del servicio (El mismo que en service_description en Nagios).
4. Escribimos comentarios adicionales (opcional).
5. Escribimos el nombre del archivo RRD o aceptamos el que esta propuesto.
6. Escribimos el encabezado de la gráfica (graph-label).
7. Escribimos el encabezado de las unidades (graph-unit).
8. Escribimos el valor de los pasos para el RRD o aceptamos el valor propuesto.
9. Escribimos los argumentos extras para rrdtool, por ejemplo "-b 1024" escalara la gráfica a unidades de 1024 en vez de 1000,
"-10" hara que el eje de las y empiecen en cero. Para más referencia de estos valores checa el manual antes mencionado de RRTool.
10. Escribimos un argumento para el plugin (hay ejemplos abajo).
11. Escribimos el nombre del DS que corresponda para el argumento de arriba por ejemplo c-used.
12. Escribimos el tipo de DS el cual puede ser 1 para GAUGE y 2 para COUNTER.
13. Escribimos los valores del heartbeat,min,max y drawing-type o simplemente aceptamos los valores.
14. Escribimos el nombre de el siguiente argumento para ir al paso 11 o simplemente presionamos 11 si ya terminamos.
Para que se entienda mejor esta información, a continuación estan unos ejemplos.
Ejemplos:
Monitorear el uso en disco del drive C en un equipo con Windows.
define service {
host_name winsrv1
service_description Disk usage
check_command apan-sql!disk_by_snmp!90!95
use service-template
}
Ejecutamos apanconf-sql, seleccionamos 1 e introducimos los siguientes valores:
Hostname: winsrv
Service: Disk usage
Graph-label: Disk usage
Graph-unit: %
Argument #1: C
DS-name: C
DS-type: 1
Y presionamos enter cuando nos solicite el sergundo argumento.
Monitorear el trafico de red en un equipo.
Agregamos el servicio a Nagios:
define service {
host_name server2
service_description Net usage
check_command apan-sql!snmpget!10!20
use generic-hl
notifications_enabled service-template
}
Ejecutamos apanconf-sql, seleccionamos 1 e introducimos los siguientes valores:
Hostname: server2
Service: Net usage
Graph-label: Network throughput
Graph-unit: Bytes/sec
Argument #1: public:.1.3.6.1.2.1.2.2.1.16.2
DS-name: IN
DS-type: 2
Argument #2 public:.1.3.6.1.2.1.2.2.1.10.2
DS-name: OUT
DS-type: 2
Cuando solicite el tercer argumento presionamos enter.
Agregamos un icono y un enlace en el archivo serviceextinfo.cfg:
define serviceextinfo{
host_name server
service_description Ping
notes_url /nagios/cgi-bin/apan.cgi?host=server&service=Ping
icon_image graph.png
icon_image_alt View graphs
}
Eso es todo, ya tienen funcionando Apan para crear graficas como esta:
Recuerden que no inmediatamente apareceran datos, se tienen que ir llenando las bases rrd que crearon, pero si alcabo de el tiempo que ustedes especificaron no obtienen información es importante ver si el usuario Nagios tiene permisos en el directorio y archivos de rrd.
Si tienen preguntas envienme un correo, esto me lo avente lo más rápido que pude y todavia no esta completo, faltan más ejemplos.
Audio en Nagios
Ejecutando Wav's como alarma de audio.
Vamos a ejecutar unos archivos de sonido .wav cada vez que exista un problema en Nagios, esto es a la forma simple y rápida, lo implementamos verificando que tengamos descomentado lo siguiente en el archivo cgi.cfg
(esto esta al final del archivo):
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
Listo, ya tenemos audio alarmas en Nagios listas para indicarnos cuando exista algún problema, este sonido se ejecutara en el cliente (máquina donde abrimos la página de nagios) o sea que ese cliente debe de tener bocinas, audio habilitado y tener abierto siempre el navegador. Los archivos wav ya vienen incluidos con la instalación de Nagios.
Usando Festival para alarmarnos
Pues este es un interesante apartado, "Usando Festival para alarmarnos" y se preguntarán los newbies ¿Qué es Festival?, unos contestaran, "Es como el carnaval de Veracruz o un InstallFest", pues no!!! jajajaja (un pequeño chiste), Festival es un proyecto del Centro de investigación de Tecnología del Habla
de la Universidad de Edinburgh, el cual permite convertir el texto simple en audio (a grandes rasgos)
y ¿Para qué nos sirve a nosotros?, podemos enviar texto de Nagios a Festival e imaginense los resultados :).
Ok, ¿Qué ocupamos hacer?
- Debemos ver la forma en que vamos a ejecutar los sonidos, esto es si el servidor de Nagios lo va a hacer
o si los vamos a ejecutar en otra máquina (por RED). - Lo queremos para un servidor en producción (en alguna empresa), para un servidor de prueba o de nuestra propia red en casa o algún otro lugar.
Como en todo, siempre hay ventajas y desventajas:
Ventajas:
- Inmediatamente recibimos el audio si alguna falla ocurre en nuestra red.
- Sabremos con exactitud que servicio y que equipo esta abajo.
- No ocupas tener el navegador abierto.
- Impresionaremos a nuestros jefes y colegas :D.
Desventajas:
- Desperdicio de recursos y más si lo emplementamos en red (para algunos casos, para otros no).
- Nos puede asustar, jejejeje, esto si estas solo en tu cuarto (casa, trabajo, etc.) en la noche, creeme
que te puedes asustar si te quedas medio dormido (ya me ha sucedido :P).
Si estan concientes de esto y lo desean implementar no perdamos tiempo.
Instalando Festival, NAS y configurando todo.
Como les comente podemos ejecutar el audio ya sea en el servidor de Nagios o en otra máquina
Primero que nada ocupamos instalar Speechd el cual es un demonio para ejecutar
el audio directamente de un texto a /dev/speech, el cual es muy útil.
Despues instalamos Festival, aquí esta un pequeño How to para hacerlo.
E instalamos el NAS (Network Audio System) también con su respectivo How to para hacerlo.
Ya tenemos instalado el software necesario, ahora tenemos que configurar a Nagios para poder utilizar Festival:
Vamos a configurar las alarmas en forma global para esto descomentamos las siguientes líneas en el archivo nagios.cfg:
global_host_event_handler=global-hst-event-handler
global_service_event_handler=global-svc-event-handler
Despues agregamos los siguientes comandos en checkcommands.cfg:
define command{
command_name global-hst-event-handler
command_line $USER1$/eventhandlers/hst_event_handler $HOSTNAME$ "$HOSTALIAS$" $HOSTSTATE$ $HOSTSTATETYPE$ $HOSTATTEMPT$
}
define command{
command_name global-svc-event-handler
command_line $USER1$/eventhandlers/svc_event_handler $HOSTNAME$ "$HOSTALIAS$" "$SERVICEDESC$" $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$
}
Listo, ahora solo nos faltan los scripts para poder usar estos comandos, encontraran unos de ejemplo:
svc_event_handler-speechd, svc_event_handler, hst_event_handler-speechd, hst_event_handler. Noten que puse unos para usarlos con Festival directamente y otros para usar el /dev/speech.
NOTA: Es importante que especifiquen el nombre correcto de los scripts para que tengan ningún problema.
Si todo salió bien entonces puedes parar algún servicio para probar esta configuración.
Lo malo que solo lo tengo implementado para manejar audio en inglés.
Mapas y configuración adicional
El archivo cgi.cfg
En este archivo podemos configurar varias cosas entre ellas el modo en que se va a ver el mapa del status de Nagios (statusmap.cgi), primero que nada ocupamos localizar la siguiente sección:
# DEFAULT STATUSMAP LAYOUT METHOD
# This option allows you to specify the default layout method
# the statusmap CGI should use for drawing hosts. If you do
# not use this option, the default is to use user-defined # coordinates. Valid options are as follows:
# 0 = User-defined coordinates
# 1 = Depth layers
# 2 = Collapsed tree
# 3 = Balanced tree
# 4 = Circular
# 5 = Circular (Marked Up)
default_statusmap_layout=0
Y aquí podemos modificar la vista del mapa, como pueden ver en este ejemplo las coordenadas nosotros las definimos (User-defined coordinates 0), estas coordenas las especificamos en el archivo hostextinfo.cfg el cual explicaremos a posteriormente.
En este archivo también podemos cambiar el fondo (background) de nuestro mapa 2D, esto lo hacemos de la siguiente forma:
- Descomentamos la linea
- statusmap_background_image=miimagen.gd2
En este caso las imagenes tienen que se .gd2 por lo cual creamos nuestro propio fondo lo grabamos como .png y utilizamos la herramienta png2gd2 para poder convertirla en gd2:
isuraeru@localhost$ png2gd2 imagen.png /usr/local/nagios/share/images/miimagen.gd2 1 1
Es importante dejar los parametros 1 1 al final ya que son indispensables para la creación de estos archivos y listo ya tenemos nuestro fondo personalizado.
El archivo hostextinfo.cfg
Aquì es donde va la información de nuestros equipos para el aspecto gráfico (que icono va a tener, en que posición de mapa va a estar, etc.):
define hostextinfo{
# Este es el nombre del equipo que se especificó en hosts.cfg.
host_name windows2003
# La imagen que aparecera a un lado del nombre del equipo.
icon_image windows.png
# La imagen que aparecera en el mapa 2D.
statusmap_image windows.gd2
# Coordenadas para el mapa 2D.
2d_coords 250,350
# La imagen que aparecera en el mapa 3D (utilicé jpg por que se ve mejor).
vrml_image windows.jpg
# Coordenadas para el mapa 3D, las cuales deben estar en float (punto flotante, me traume con programación)
# 0.0,0.0,0.0 lo cual es lògicamente x,y,z
3d_coords 20.0,30.0,6.0
# Y si queremos agregar mayor información a nuestro host por ejemplo saber donde esta ubicado, una foto, etc.
# Esto lo podemos hacer con la siguiente propiedad la cual nos dirige a una p? gina web
# para ver esta información adicional, en este ejemplo este equipo lo tiene en nagiosserver/windows2003/info.html
notes_url http://nagiosserver/windows2003/info.html
}
define hostextinfo{
host_name windows2000
icon_image windows.png
2d_coords 320,350
statusmap_image windows.gd2
vrml_image windows.jpg
3d_coords 50.0,40.0,10.0
notes_url http://nagiosserver/windows2000/info.html
}
Agregamos la información para cada uno de los equipos.
El archivo hostextinfo.cfg
Este archivo tambien nos sirve para agregar gráficos a los servicios que tenemos en el sistema, una configuración ejemplo seria así:
# La configuración es parecida al hostextinfo.cfg
# Digamos que tenemos un servidor web linux
define serviceextinfo{
# Primero indicamos el nombre del equipo definido en hosts.cfg.
host_name slackwebserver
# Descripción del servicio.
service_description Servidor Apache en Slackware
# Página de información adicional
notes_url http://nagiosserver/slackwebserver/info.html
# Imagen que aparecera en dicho servicio.
icon_image apache.png
# En caso de no localizar la imagen es desplegara este texto o podemos indicar otra imagen.
icon_image_alt Web Service
}
Como pueden observar agregue comentarios en cada uno de los puntos para que sea más rápida la referencia, con esta informacián agregamos los demas equipos y listo, si nos dirigimos a nuestra página de Nagios podremos ver los cambios ocurridos.
NOTA: Es importante que todas las imagenes que utilicemos esten en el directorio share/images de nuestro directorio de Nagios.
Los mapas 2D y 3D
Bueno, ya tenemos configurado todo para poder ver los equipos en los mapas, ya podemos entrar a Status Map en nuestra página de Nagios, pero si queremos entrar a 3-D Status Map nos va a querer grabar el archivo y no lo va abrir,
¿Por qué?, simple, no tenemos instalado un cliente VRML (Virtual Reality Modeling Language) para nuestro navegador, para esto podemos utilizar los siguientes:
Windows
Cortona VRML Client
La verdad a mi el que me gusto fue el de Cortona, se me hace un muy buen software para el caso de Windows,
pero para linux las opciones libres son amplias, si ninguna de estas les convence pues entren a Freshmeat
o Sourceforge y bajen las que m? s les sea de su agrado, incluso hay especiales para Gnome, etc.
Y con esto ya tenemos a Nagios con m? s información sobre los equipos y servicios que estamos monitoreando y nos permite en forma visual percatarnos de cualquier falla.
Configurando Nagios 2.x
¿Qué ocupamos monitorear?
Para esto hacemos nuestra lista de Equipos y Servicios, en este caso dare unos ejemplos:
2 servidores Windows
2 servidores Linux
1 router
1 switch
2 paginas Web
y Nuestro Nagios
¿Qué ocupamos saber de cada uno?
Servidor Windows 2003 (windows2003-192.168.0.10) : DNS, Host Alive, disk_usage y load.
Servidor Windows 2000 (windows2000-192.168.0.11): SQL.
Servidor Linux (linuxs-192.168.0.12): Squid.
Servidor Linux (linuxw-192.168.0.13): HTTP.
Cisco (cisco-192.168.0.14): FastEthernet, UPtime, Serial
Switch (switch-192.168.0.15): Ping, Uptime.
Pagina 1 (paginac-): www.cisco.com
Pagina 2 (paginag-): www.google.com
Nagios (nagios-192.168.0.15): En este caso en particular monitoreo la temperatura del equipo.
Son pocos pero sustanciosos, con estos trabajaremos para hacer nuestra configuración.
Agregando Contactos
Inicialmente empezaremos a agregar nuestros contactos, editamos contacts.cfg,
con nuestro editor favorito (el mío vi :)).
define contact{
contact_name tobi
alias Nagios Super Admin
contactgroups nt-admins ;podemos agregar desde aquí los grupos
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email correo@dominio.com
}
define contact{
contact_name superman
alias Nagios Super Admin
contactgroups linux-admins ;podemos agregar desde aquí los grupos
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email correo@dominio.com
}
define contact{
contact_name batman
alias Nagios Super Admin
contactgroups network-admins ;podemos agregar desde aquí los grupos
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email correo@dominio.com
}
Lo grabamos y listo, tenemos algunos contactos, podemos agregar cuantos queramos.
Agregando Grupos de Contactos
Ahora editamos el contactgroups.cfg y podemos agregar los contactos en los grupos:
# 'linux-admins' contact group definition
define contactgroup{
contactgroup_name linux-admins
alias Linux Administrators
members superman, batman
}
# 'nt-admins' contact group definition
define contactgroup{
contactgroup_name nt-admins
alias NT Administrators
members tobi
}
# 'network-admins' contact group definition
define contactgroup{
contactgroup_name network-admins
alias Network Administrators
members batman
}
# 'web-admins' contact group definition
define contactgroup{
contactgroup_name web-admins
alias WEB Administrators
members batman, tobi, superman
}
Grabamos y ya llevamos 2 archivos de configuracion.
Se preguntaran por que hicimos esta configuracion primero y no nos fuimos al grano o sea a a los equipos,
bueno en esta version 2 de Nagios en las directivas de host se agrego a la configuracion de cada equipo la linea contact_groups,
esto quiere decir que cada equipo tiene su grupo de contacto definido,
anteriormente estaban declarados los contact_groups en el archivo hostgroups.cfg.
Agregando Equipos
A continuación esta la configuración de hosts.cfg:
# Generic host definition template
define host{
name generic-host ; The name of this host
template - referenced in other host definitions, used for template recursion/res
olution
notifications_enabled 1 ; Host notifications are enabled
event_handler_enabled 1 ; Host event handler is enabled
flap_detection_enabled 1 ; Flap detection is enabled
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information acro
ss program restarts
retain_nonstatus_information 1 ; Retain non-status information
across program restarts
register 0 ; DONT REGISTER THIS DEFINITION
- ITS NOT A REAL HOST, JUST A TEMPLATE!
}
define host{
use generic-host
host_name windows2003
alias NT 2003 Server
address 192.168.0.10
check_command check-host-alive
contact_groups nt-admins
max_check_attempts 10
notification_interval 480
notification_period 24x7
notification_options d,u,r
}
define host{
use generic-host
host_name windows2000
alias NT 2000 Server
address 192.168.0.11
check_command check-host-alive
contact_groups nt-admins
max_check_attempts 10
notification_interval 480
notification_period 24x7
notification_options d,u,r
}
Y asi sucesivamente vamos agregando y grabamos nuestro archivo hosts.cfg
Agregando Grupos de Equipos
Ahora creamos o editamos el archivo hostgroups.cfg, la forma como agrupemos los equipos aquí
se veran en la página de Nagios en la opción de hosts overview.
define hostgroup{
hostgroup_name webpages
alias Web Pages
members paginac,paginag
}
define hostgroup{
hostgroup_name winservers
alias Windows Servers
members windows2003,windows2000
}
Agregamos los demas y grabamos el archivo.
Agregando Servicios
Creamos o editamos services.cfg:
define service{
use generic-service
host_name windows2003
service_description DNS Service
is_volatile 0
check_period 24x7
max_check_attempts 4
normal_check_interval 5
retry_check_interval 2
contact_groups nt-admins
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_dns
}
define service{
host_name paginac,paginag
service_description PING
is_volatile 0
check_period 24x7
max_check_attempts 4
normal_check_interval 5
retry_check_interval 1
contact_groups web-admins
notification_interval 240
notification_period 24x7
notification_options c,r
check_command check_ping!1050.0,30%!1550.0,60%
}
Después se explicará como agregar más plugins y su configuración, esto es solo para que puedan
entender el funcionamiento de Nagios en una forma rápida y no muy a fondo por el momento.
Grabamos y salimos.
Agregando Grupos de Servicios
Agregamos un grupo de servicio (Ping) para varios hosts, esto en el archivo servicegroups.cfg
(Este archivo también es una de las nuevas características de la versión 2 de Nagios).
define servicegroup{
servicegroup_name pingservices
alias Ping Services
members paginac,Ping Service,paginag,Ping Service,switch,Ping Service
}
Grabamos y listo ya tenemos la configuración mínima para echar a andar a Nagios, hay otro archivo
que es el serviceextinfo.cfg pero ese se explicará después.
Verificando que todo funcione adecuadamente
Para verificar si todo esta funcionando como debe de ser, ejecutamos lo siguiente:
isuraeru@localhost# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
y si todo termina así:
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
Perfecto podemos daemonizar a Nagios:
isuraeru@localhost# /etc/rc.d/nagios start
Starting network monitor: nagios
PID TTY TIME CMD
29864 ? 00:00:00 nagios
Y ya tenemos a Nagios trabajando, solo es cuestión de entrar a nuestra página y ver como funciona.
NOTA: Aquí solo se mostro la configuración de algunos equipos para dar una idea de como hacerlo, para
monitorear más equipos o servicios los tenemos que ir agregando.
Instalando Nagios 2.x
Proceso de Instalación
Si queremos ulitizar SNMP tenemos que instalar el net_snmp el cual lo podemos bajar de LinuxPackages para Slackware, si quieren el source está en esta página o instalenlo con el rpm de su distro.
Obtenemos Nagios y los plugins de Nagios Download
Descomprimimos Nagios:
isuraeru@localhost$ tar xvfz nagios-2.0b2.tar.gz
Creamos un usuario y grupo de nombre nagios:
isuraeru@localhost# groupadd nagios
isuraeru@localhost# adduser nagios -g nagios
Listo, podemos agregar un grupo para ejecutar comandos con Nagios, pero utilizaremos el grupo nagios:
isuraeru@localhost# usermod -G nagios (usuario de apache)
Ejecutamos el script de configuración:
isuraeru@localhost$ ./configure --prefix=prefix --with-cgiurl=cgiurl --with-htmurl=htmurl --with-nagios-user=someuser --with-nagios-grp=somegroup --with-command-grp=cmdgroup
prefix default es /usr/local/nagios.
cgiurl default es /nagios/cgi-bin.
htmlurl default es /nagios/.
someuser default es nagios.
somegroup default es nagios.
cmdgroup default es nagios.
Recordemos que en esta versión 2 ya no se utiliza la base de datos y es mejor para el caso de los newbies. Realmente pueden configurar Nagios con solo ejecutar configure, pero si lo quieren personalizado pueden cambiar las variables.
Compilamos:
isuraeru@localhost$ make all
Instalamos binarios y los archivos HTML:
isuraeru@localhost# make install
Instalamos el script de iniciacion:
isuraeru@localhost# make install-init
De una vez instalamos los archivos de configuracion de ejemplo:
isuraeru@localhost# make install-config
Lo cual instalara los archivos .cfg en /usr/local/nagios/etc. Importante que todos los archivos en /usr/local/nagios incluyendo el directorio Nagios tengan como usuario y grupo a nagios:
isuraeru@localhost# chown -R nagios.nagios nagios/
y listo, ya tenemos instalado Nagios y si nos dirigimos a /usr/local/nagios encontraremos:
Sub-directorio Contenido
bin/ Programa Nagios
etc/ Los archivos de configuracion como Main, resource, object, y CGI van aqui.
sbin/ CGIs
share/ Archivos HTML
var/ Directorio vacío para log file, status file, retention file, etc.
var/archives Directorio vacío para los logs
var/rw Directorio vacío para el archivo external command
Posteriormente instalamos los plugins basicos, los cuales usualmente van en libexec/ en el directorio de Nagios.
Después tenemos que configurar la interfaz Web:
Editamos nuestro archivo /etc/apache/httpd.conf (Recuerden que esto esta enfocado a Slackware) y agregamos:
Para nuestros CGI's:
ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin
AllowOverride AuthConfig
Options ExecCGI
Order allow,deny
Allow from all
Para las paginas HTML agregamos:
Alias /nagios /usr/local/nagios/share
Options None
AllowOverride AuthConfig
Order allow,deny
Allow from all
Ojo primero va el ScriptAlias y después el Alias.
Para Slackware ya viene un archivo en /etc/apache/nagios.conf solo hay que agregarlo al httpd.conf.
Grabamos los cambios y reiniciamos el Web Server:
isuraeru@localhost# apachectl restart
Solamente nos dirigimos a http://tumaquina/nagios/ y debemos ver Nagios funcionando.
Si lo deseamos con Autentificacion Web hacemos lo siguiente:
Creamos un archivo .htaccess en el raíz del directorio CGI o HTML (/usr/local/nagios/sbin y /usr/local/nagios/share)
isuraeru@localhost# cat <<>> .htaccess
> AuthName "Acceso a Nagios"
> AuthType Basic
> AuthUserFile /usr/local/nagios/etc/htpasswd.users
> require valid-user
> KO
isuraeru@localhost#
Luego agregamos el valid-user (eso lo pueden cambiar):
isuraeru@localhost# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Y si quieren agregar más solo ejecutan:
isuraeru@localhost# htpasswd /usr/local/nagios/etc/htpasswd.users
Y listo, Nagios ya esta instalado y lo pueden ver vía Web, pero todavía nos falta para tenerlo funcionando realmente, por lo cual pasamos a la siguiente sección.