Sie sind auf Seite 1von 4

PORTADA Semforo Nagios

Luces que nos informan del estado de nuestro centro de datos

CEDA EL PASO
Una inteligente combinacin de Nagios y de semforos nos permite conocer cmo se siente nuestra red. POR MICHAEL SCHWARTZKOPFF

Magical Art, Fotolia

agios [1] es una excelente opcin a tener en cuenta a la hora de gestionar un elevado nmero de mquinas y servicios. Nagios es capaz de monitorizar mquinas, conexiones de red y servidores, mostrando el estado de salud de la interfaz web con los

colores verde (ok), amarillo (aviso) y rojo (crtico). Vase la Figura 1. Es una pena que tenga una interfaz web tan discreta. Cuando hay calma en el frente, el administrador puede cerrar tranquilamente el navegador y centrarse en los avisos de Nagios por email del flujo general del trfico. Un da se nos ocurri que deba haber un modo mejor de hacer las cosas. Por suerte, Nagios es muy fcil de adaptar y ampliar. Con un poco de scripting y algo de hardware electrnico de bajo coste, montamos un simple semforo con la Figura 1: El monitor de redes Nagios consulta regularmente la salud de intencin de los hosts y muestra los resultados con los colores de un semforo en ponerlo en cualel escritorio. quier sitio, y que

mostrara el estado de la red en cada momento (ver Figura 2). El semforo da una idea del estado de la red mucho ms tangible que la que cualquier interfaz web pueda ofrecer. Si el trfico cambia de verde a amarillo, o a rojo, el administrador de la red sabe que ha llegado el momento de ponerse manos a la obra. Es maravilloso entrar por la maana en la oficina y encontrarse con una fantstica luz verde, augurndonos un da de trabajo apacible. En este artculo describimos la implementacin de nuestro semforo de red. Sus detalles variarn dependiendo de los componentes de que se disponga en segn qu parte del mundo, pero deja patente la idea general de lo fcil que resulta hacernos nuestras propias soluciones con Nagios.

A la Base de Datos
En vez de mostrar miles de estados individuales, como la interfaz web, el semforo presenta simplemente

34

Nmero 41

WWW.LINUX- MAGAZINE.ES

Semforo Nagios PORTADA

un intuitivo resumen del estado general de nuestros hosts y servicios. El primer reto es determinar el de todos ellos. La mejor manera de hacerlo es dejar que el software de monitorizacin haga su trabajo y escriba sus conclusiones en una base de datos. La extensin NDOUtils de Nagios se antoja perfecta para esta tarea. Cualquier aplicacin con acceso a la base de datos puede evaluar las tablas centrales hoststatus y servicestatus; dependiendo de la instalacin, las tablas podran incluir el prefijo nagios_. La siguiente consulta establece el estado del host:
SELECT current_stateU FROM nagios_hoststatus;

El valor 0 nos indica que el host existe, 1 significa que hay algn problema de disponibilidad y el 2 representa un estado desconocido. De un modo similar, podemos consultar el estado de los servicios:
SELECT current_stateU FROM nagios_servicestatus;

Figura 2: Este discreto semforo, colocado en la mesa del administrador de sistemas, le advierte de problemas en la red. Cuanto ms verde, mejor.

Los cuatro valores posibles en el estado de un servicio son: 0 para indicar que est bien, 1 para indicar un estado de aviso, 2 para crtico y 3 para un estado desconocido. El semforo slo responde ante estados problemticos que acaban de ocurrir y de los que el administrador an no se ha encargado. La consulta completa presenta el siguiente aspecto:
SELECT *U FROM nagios_hoststatusU WHERE current_state > 0 ANDU problem_has_been_acknowledgedU = 0;

Figura 3: Este fragmento extrado de las tablas NDOUtils Entity Relationship Diagram muestra cmo se enlazan los estados de los hosts y servicios.

cos es ms complejo que todo esto, ya que cualquiera de ellos se considera en estado crtico en cuanto la mquina deja de estar disponible. Una vez que el administrador tiene conocimiento del problema y ha activado la casilla de notificacin del host en cuestin, la luz roja se

desactiva para evitar que nos pasen desapercibidos otros problemas. La tabla de configuracin de Nagios es necesaria para definir el enlace entre los servicios y las mquinas en los que se ejecutan: La base de datos no tiene una referencia directa entre las tablas de los

Listado 1: Servicios Crticos


01 SELECT * FROM ((nagios_servicestatus 02 INNER JOIN nagios_services 03 ON nagios_servicestatus.service_o bject_id 04 =nagios_services.service_objec t_id) 05 INNER JOIN nagios_hosts 06 ON nagios_services.host_object_id 07 =nagios_hosts.host_object_id) 08 INNER JOIN nagios_hoststatus 09 ON nagios_hosts.host_id 10 =nagios_hoststatus.hoststatus_ id 11 WHERE nagios_servicestatus.current_s tate > 1 12 AND nagios_servicestatus.problem_h as_been_acknowledged=0 13 AND nagios_hoststatus.problem_has_ been_acknowledged=0;

Si la consulta devuelve algo, la luz roja se enciende; de otro modo, se puede comprobar el estado del servicio (nagios_servicestatus) con otra consulta similar. Un estado del servicio 2 3 debe encender la luz roja del semforo. Si un estado de servicio 1 devuelve una coincidencia, la luz debe pasar a amarillo. Est claro que consultar servicios problemti-

WWW.LINUX- MAGAZINE.ES

Nmero 41

35

PORTADA Semforo Nagios

Listado 2: Control del Semforo


01 #!/bin/bash 02 # 03 # Inicializacin 04 stty -F /dev/ttyUSB0 19200 min 0 -icanon -ixon brkint imaxbel 05 echo -en ,\0001\0001\0000\0000 > /dev/ttyUSB0 06 # 07 # Bucle infinito 08 while true ; do 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 if [[ $LAMP = 0 ]] ; then RESULT=`echo SELECT nagios_servicestatus.service_object_id FROM ((nagios_servicestatus INNER JOIN nagios_services ON nagios_servicestatus.service_object_id=nagios_ser vices.service_object_id) INNER JOIN nagios_hosts ON nagios_services.host_object_id=nagios_hosts.host_ object_id) INNER JOIN nagios_hoststatus ON nagios_hosts.host_id=nagios_hoststatus.hoststatus _id WHERE nagios_servicestatus.current_state > 1 34 AND nagios_servicestatus.problem_has_been_acknowledge d=0 AND nagios_hoststatus.problem_has_been_acknowledged=0 ; | mysql -u nagios -h db_host nagios | wc -l` 37 if (( $RESULT > 0 )) ; then 57 -l` 58 59 60 61 62 63 64 65 66 67 68 69 70 71 sleep 30 LAMP=0 if [[ $LAMP = 0 ]] ; then # No hay problemas -> luz verde echo -en ,\0003\0001\0001\0003 > /dev/ttyUSB0 fi fi if (( $RESULT > 0 )) ; then # Aviso en el estado del Servicio -> luz amarilla echo -en ,\0003\0001\0002\0000 > /dev/ttyUSB0 LAMP=1 fi LAMP=0 RESULT=`echo SELECT instance_id FROM nagios_hoststatus WHERE current_state <> 0 AND problem_has_been_acknowledged = 0; | mysql -u nagios -h db_host nagios | wc -l` if (( $RESULT > 0 )) ; then # Hay un host con algn problema -> luz roja echo -en ,\0003\0001\0004\0006 > /dev/ttyUSB0 LAMP=1 # Se establece LAMP fi 54 55 52 53 50 51 47 48 49 40 41 42 43 44 45 46 if [[ $LAMP = 0 ]] ; then RESULT=`echo SELECT nagios_servicestatus.service_object_id FROM ((nagios_servicestatus INNER JOIN nagios_services ON nagios_servicestatus.service_object_id=nagios_ser vices.service_object_id) INNER JOIN nagios_hosts ON nagios_services.host_object_id=nagios_hosts.host_ object_id) INNER JOIN nagios_hoststatus ON nagios_hosts.host_id=nagios_hoststatus.hoststatus _id WHERE nagios_servicestatus.current_state = AND nagios_servicestatus.problem_has_been_acknowledge d= AND nagios_hoststatus.problem_has_been_acknowledged=0 ; | mysql -u nagios -h db_host nagios | wc fi 38 39 # Servicio crtico -> luz roja echo -en ,\0003\0001\0004\0006 > /dev/ttyUSB0 LAMP=1 fi

56

29 30

31 32

33

35

36

72 done

36

Nmero 41

WWW.LINUX- MAGAZINE.ES

Semforo Nagios PORTADA

estados de los servicios y las mquinas en que se ejecutan (Figura 3 [2]). La consulta completa para los estados crticos se muestra en el Listado 1. La estructura de los archivos de configuracin, registro y estado ofrece un diseo de las tablas que hay en esta base de datos simple. Podra resultarnos conveniente, si no fuera porque hace que las consultas sean ms complejas. Es mejor disear la base de datos conforme a las prcticas recomendadas y comnmente aceptadas.

Componentes
Todos los componentes necesarios se pueden encontrar en casi cualquier proveedor de material electrnico. Para la fabricacin de un semforo, o baliza de sealizacin si se prefiere, necesitamos componentes que permitan a un programa, ejecutndose en la mquina, encender y apagar sus luces. Para implementarlo, podemos usar la interfaz RS-232. Nosotros adquirimos los componentes de nuestro semforo en Conrad Electronic [3]. Las luces usan elementos de iluminacin de 24 voltios. El artculo 96772062 del catlogo de Conrad es un rel que la mquina puede controlar a travs del puerto serie RS-232. Por desgracia, el mdulo soporta un mximo de 15 voltios, por lo que necesitamos dos fuentes de alimentacin: una de 12 y otra de 24 voltios. El resto de los componentes, como los de iluminacin, los de conexin, la carcasa para el ensamblaje (Euro PCB), y un cable serie, nos salieron por unos 200 euros.

Figura 4: El mdulo de control, que se enlaza con el ordenador a travs de un cable RS-232, utiliza tres rels para cambiar las luces del semforo. La unidad de control y el semforo disponen de alimentadores de corriente diferentes.

nuevo dispositivo es detectado cada vez que conectamos el adaptador. Para asegurarnos de que las comunicaciones con el rel funcionan correctamente, tenemos que configurar los parmetros de la interfaz (por ejemplo, la velocidad de transmisin) al llamar a stty:
stty -F /dev/ttyUSB0 19200U min 0 -icanon -ixon brkintU imaxbel

Salida Simple
La mayora de las conexiones elctricas son de tipo roscado, por lo que slo hay que usar el soldador con los conectores macho y hembra de la fuente de alimentacin. As que no hay que ser un cientfico nuclear para montar el hardware. La Figura 4 muestra el diagrama del cableado. Si no disponemos de una conexin serie tpica, nos bastar con colocar un convertidor de USB a serie. El kernel de Linux puede detectar el convertidor automticamente, probablemente con un chip PL2303, y configurarlo como /dev/ttyUSB0. El

Cada comando para el rel consta de 4 bytes. El primer byte establece el tipo de comando (get, set, ?), mientras que el segundo establece la direccin del mdulo. Debido a que slo tenemos un mdulo, ste siempre va a ser 1. La mquina pasa los datos en el tercer byte, correspondindose cada bit a un solo rel. El cuarto byte es un simple XOR de los primeros 3 bytes, a fin de proporcionar un checksum:
echo -enU ,\0001\0001\0000\0000>U /dev/ttyUSB0 echo -en ,\0003\0001\0001\0003U >/dev/ttyUSB0

(lneas 4 y 5) antes de leer la tabla status de la base de datos en un bucle infinito (que comienza en la lnea 8), que evala para controlar las luces del semforo. El usuario nagios puede acceder a la base de datos nagios del host db_host sin contrasea. La primera consulta a la base de datos, en las lneas 11 a la 14, determina qu hosts presentan estado crtico. Slo nos interesan los nmeros, razn por la cual la lnea 15 termina con wc -l, guardando en la variable RESULT el nmero de lneas resultante. Si el valor es mayor que 0, la lnea 18 enciende la luz del semforo. Las siguientes dos consultas identifican los servicios crticos; ocurre en las lneas 33 a la 54: Si el estado es mayor que 1, se enciende la luz roja (lnea 39), mientras que la luz amarilla se activa con un estado igual a 1 (lnea 60). Finalmente, la lnea 67 cambia la luz de nuevo a verde si est todo bien (LAMP=0). Slo resta esperar que nuestra red nunca necesite las luces roja y amarilla. Y que nuestra amiga, la luz verde, sea lo primero que veamos I cada da al entrar en la oficina.

El primer comando inicia el ensamblaje, mientras que el segundo enciende el primer rel. La sintaxis se describe en el manual del montaje.

RECURSOS
[1] Nagios: http://www.nagios.org [2] Documentacin de NDOutils: http:// nagios.sourceforge.net/docs/ ndoutils/NDOUtils_DB_Model.pdf [3] Electrnica Conrad: conrad.com/

Monitorizacin
El programa del Listado 2 inicializa la interfaz y el mdulo de rel

http://www.

WWW.LINUX- MAGAZINE.ES

Nmero 41

37

Das könnte Ihnen auch gefallen