Monitorizar un SAI con Debian
Monday, 20 November 2017
Inicio | Documentacion | Software | Acerca de

Documentación y Software
Inicio
Documentacion
Software
Acerca de


Como instalar y configurar las utilidades Network UPS Tools para controlar y monitorizar un SAI con GNU/Debian Linux.

Descargar este documento en formato: PDF

Monitorización de un SAI con GNU/Debian Linux

Monitorización de un SAI con GNU/Debian Linux

Paco Brufal pbrufal@servitux.com

Versión 0.3, 07/06/2005
Este pequeño documento explica como monitorizar un SAI (Sistema de Alimentación Ininterrumpida) con un servidor Linux Debian mediante el puerto serie. La unidad SAI es una Pulsar ESV14+ con puerto serie, pero este documento se puede aplicar, con pequeñas modificaciones, a otras unidades SAI. La última versión de este documento siempre estará en http://www.servitux.org. Este documento se distribuye SIN NINGUNA GARANTIA bajo la licencia GPL ( http://www.gnu.org). No me responsabilizo de los posibles daños que pueda causar la ejecución de los pasos descritos en este documento.

1. Introducción

Para la explicación de este documento vamos a suponer el siguiente escenario. Poseemos una unidad SAI con puerto serie. A este SAI están conectados 5 servidores más, que serán 1 maestro (el que controla el SAI por el puerto serie), 4 esclavos, que monitorizan el estado del SAI mediante la red local, y además usaremos la workstation del administrador para saber el estado del SAI, pero ésta workstation NO estará conectada al SAI.

Para monitorizar el SAI usaremos las herramientas NUT (Network UPS Tools). El servidor maestro será un sistema Linux Debian Sid (inestable), 3 esclavos será Linux Debian Sid (inestable), 1 sistema esclavo Linux Debian Woody (estable), y el sistema del administrador es una Debian Sid.

La página web de las herramientas NUT es http://www.exploits.org/nut/

Antes de instalar nada comprueba que el SAI está con la batería cargada al máximo, que los servidores están tomando la corriente del SAI, y que el cable serie está correctamente conectado.

Y como última recomendación, si no usas la distribución Debian, no sigas los pasos al pie de la letra, ya que hay cosas que pueden cambiar (poco, pero pueden cambiar).

2. Como funciona todo esto

Paso a explicar brevemente como funciona el control del SAI.

  1. Todo está funcionando perfectamente
  2. Se va la luz, y el SAI entra en modo batería
  3. La batería llega a su carga mínima
  4. El sistema maestro notifica a los esclavos que dentro de poco se deben apagar
  5. Cuando los esclavos reciben la orden:
    1. Generan un evento NOTIFY_SHUTDOWN
    2. Esperan el tiempo definido en FINALDELAY
    3. Ejecutan el comando definido en SHUTDOWNCMD
    4. Se apagan correctamente
  6. El sistema maestro espera que todos los clientes se desconecten
  7. El maestro empieza la secuencia de apagado:
    1. Genera un evento NOTIFY_SHUTDOWN
    2. Espera el tiempo definido en FINALDELAY
    3. Crea el fichero definido en POWERDOWNFLAG
    4. Ejecuta el comando definido en SHUTDOWNCMD
  8. El proceso de apagado se lleva a cabo normalmente, y el sistema va parando los servicios y desmontando unidades
  9. El sistema encuentra en fichero definido en POWERDOWNFLAG, y ejecuta el apagado del SAI
  10. Cuando vuelve la luz, todos los sistemas se activan y todo vuelve a su estado normal.

El hecho de crear un fichero sirve para que los scripts de apagado del sistema comprueben si existe, y si es así, envien al SAI el comando de apagado. Esto es porque no merece tener el SAI encendido si ningun sistema está funcionando.

En Debian, el sistema de corte de corriente ya viene implementado. El último script que se ejecuta durante el apagado es /etc/init.d/halt. Este script llama a otro script /etc/init.d/ups-monitor con el parámetro poweroff. Si existe el fichero definido en POWERDOWNFLAG, el SAI se apagará y quedarán todos los ordenadores sin electricidad.

3. Instalación de NUT

Para instalar NUT en el servidor usaremos la herramienta apt-get de Debian:

# apt-get install nut

En Debian Sid (inestable), una vez ha terminado de instalarse, debes editar el fichero /etc/default/nut y poner a yes las opciones START_UPSD y START_UPSMON:

# start upsd
START_UPSD=yes

# start upsmon
START_UPSMON=yes

Seguidamente, añadiremos el usuario nut al grupo dialout, que es el grupo propietario de los puertos serie (/dev/ttyS0 por ejemplo).

# adduser nut dialout

4. Configuración del controlador del SAI

En este apartado vamos a configurar el sistema que controla al SAI por el puerto serie.

4.1 Especificación del SAI

Una vez instalado, pasamos a configurar el controlador. En primer lugar configuramos el fichero /etc/nut/ups.conf. Este fichero contiene los parámetros necesarios para conectarnos al SAI.

[elsai]
        driver = mge-utalk
        port = /dev/ttyS0

Lo que va entre corchetes ([elsai]) es un nombre descriptivo, puede ser el que nosotros queramos (sin espacios ni signos de puntuación, para no liar la cosa ;). La linea driver especifica qué tipo de comunicación se usará para hablar con el SAI. En este caso he usado el mge-utalk, que sirve para modelos de SAI MGE. La linea port especifica cual es el puerto serie por el cual nos comunicaremos con el SAI.

Dentro de este fichero hay mucha documentación que te será muy util si tienes algún problema.

4.2 Listas de control de acceso

Una de las características de NUT es que nos permite configurar niveles de acceso a las distintas máquinas de la red. Los controles de acceso se configuran en el fichero /etc/nut/upsd.conf. Este es un ejemplo:

ACL localhost 127.0.0.1/32
ACL maquina1 172.16.2.3/32
ACL maquina2 172.16.2.6/32
ACL maquina3 172.16.2.1/32
ACL maquina4 172.16.2.18/32
ACL maquina5 172.16.2.14/32
ACL all 0.0.0.0/0

ACCESS grant monitor localhost
ACCESS grant monitor maquina1
ACCESS grant monitor maquina2
ACCESS grant login maquina3
ACCESS grant monitor maquina4
ACCESS grant monitor maquina5
ACCESS deny all all

En el primer bloque se definen una serie de nombres asociados a unas IPs. En el segundo bloque se define qué clase de acceso tienen los distintos nombre antes mencionados. Fijate que la maquina3 tiene un parámetro login en vez de monitor, esto se debe a que maquina3 tiene instalado un sistema Debian Woody (estable), y en la versión de NUT incluida no existe el modo monitor. La directiva grant significa acceso permitido, y la directiva deny significa acceso denegado. El orden de las ACL SI que importa, así que primero se debe permitir el acceso a las máquinas que queramos, y luego se deniega todo lo demás.

En las últimas versiones de NUT (2.x), la forma de conceder o denegar acceso ha cambiado. Ahora deberían especificarse las reglas así:

ACL localhost 127.0.0.1/32
ACL maquina1 172.16.2.3/32
ACL maquina2 172.16.2.6/32
ACL maquina3 172.16.2.1/32
ACL maquina4 172.16.2.18/32
ACL maquina5 172.16.2.14/32
ACL all 0.0.0.0/0

ACCEPT localhost
ACCEPT maquina1
ACCEPT maquina2
ACCEPT maquina3
ACCEPT maquina4
ACCEPT maquina5
REJECT all

4.3 Creación de los usuarios de acceso

Para que las máquinas (tanto el servidor como los esclavos) tengan acceso al sistema de control, será necesario crear una serie de usuarios con sus correspondientes contraseñas. Estos usuarios se configuran en el fichero /etc/nut/upsd.users:

[admin]
        password = mipassword
        allowfrom = localhost
        actions = SET
        instcmds = ALL

[control]
        password = otropassword
        allowfrom = localhost
        upsmon master
        
[clientes]
        password = yotropassword
        allowfrom = maquina1 maquina2 maquina4 maquina5
        upsmon slave

[woody]
        password = debianwoody
        allow from = maquina3
        upsmon slave

Lo que va entre corchetes es el nombre del usuario que vamos a crear. La linea password es la contraseña que le asignamos a ese usuario. La linea allowfrom especifica la máquina desde la cual se puede conectar ese usuario. La linea actions define qué acciones puede realizar ese usuario. La linea instcmds define los comandos que pueden ser usados por ese usuario. Por último, la linea upsmon master define que ese usuario será el controlador del servidor, y upsmon slave será el controlador remoto.

Como ves, hemos puesto la maquina3 separada de las demás. Esto es porque maquina3 al llevar una versión diferente de NUT, necesita una configuración especial que veremos más adelante.

4.4 Configuración del monitor de SAI

Pasamos a configurar el fichero /etc/nut/upsmon.conf. Este fichero contiene la configuración del demonio upsmon:

MONITOR elsai@localhost 1 control mipassword master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /usr/local/bin/mensaje-ups
POLLFREQ 60
POLLFREQALERT 10
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYMSG ONLINE "UPS %s en estado normal"
NOTIFYMSG ONBATT "Alguien ha quitado el cable del SAI %s"
NOTIFYMSG LOWBATT "Bateria demasiado baja"
NOTIFYMSG FSD "Ha llegado el momento de apagar el SAI"
NOTIFYMSG COMMOK "Fiiiuuu, ya puedo volver a hablar con el SAI"
NOTIFYMSG COMMBAD "Otiiaa, que el SAI no me habla"
NOTIFYMSG SHUTDOWN "Apagando!"
NOTIFYMSG REPLBATT "Macho, ves cambiando la bateria"
NOTIFYFLAG ONLINE SYSLOG+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+EXEC
NOTIFYFLAG COMMBAD SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+EXEC
NOTIFYFLAG REPLBATT SYSLOG+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

La linea MONITOR especifica que queremos monitorizar el SAI llamado elsai, que está conectado a la máquina localhost (localmente), que tiene 1 bateria, nuestro login es control, nuestro password es mipassword y estamos en modo master.

Te recomiendo que mires la documentación que trae este mismo fichero sobre todas las opciones disponibles, ya que es demasiado extenso como para ponerlo aqui.

Fijate en la linea NOTIFYCMD, como parámetro tiene el comando /usr/local/bin/mensaje-ups. Este es el contenido de ese script:

#!/bin/sh

echo "
ATENCION
----------------------

MENSAJE DEL SAI: $NOTIFYTYPE" | mail -s "MENSAJE DEL SAI" admin@tudominio.com

Cada vez que ocurra un evento, se enviará un mail a la dirección admin@tudominio.com. El evento se almacena en la variable $NOTIFYTYPE

4.5 Iniciando el servidor

Una vez que hemos configurado todo, podemos iniciar el servidor con el comando

/etc/init.d/nut restart

No debería ocurrir ningún error, pero te recomiendo que mires el fichero /var/log/syslog para ver los mensajes de los demonios upsd y upsmon

5. Configuración de los sistemas esclavos

Los sistemas esclavos son aquellos que controlan el estado del SAI a través del servidor que hemos configurado antes.

5.1 Instalación y configuración en Debian Sid

Lo primero es instalar las herramientas NUT. Lo haremos mediante apt-get:

apt-get install nut

Una vez instalado, configuramos el fichero /etc/default/nut

# start upsd
START_UPSD=no

# start upsmon
START_UPSMON=yes

Fijate que ahora hemos puesto que no se ejecute el demonio upsd, porque en este equipo no tenemos ningun SAI conectado directamente. Será el demonio upsmon el que controle el SAI remoto.

Y ya para terminar, el único fichero que debemos configurar es /etc/nut/upsmon.conf, ya que los demás ficheros no se van a usar

MONITOR elsai@172.16.2.2 1 clientes yotropassword slave
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

La linea MONITOR especifica que queremos monitorizar el SAI llamado elsai, que está conectado a la máquina con IP 172.16.2.2, que tiene 1 bateria, nuestro login es clientes, nuestro password es yotropassword y estamos en modo slave.

Igual que antes, te recomiendo que mires las demás opciones para poder configurarlo con más detalle si así lo deseas.

Al terminar de configurarlo, inicia el demonio con el comando

/etc/init.d/nut restart

Mira en /var/log/syslog por si hubiese algún problema.

5.2 Instalación y configuración en Debian Woody

En la versión Woody de Debian, la versión de NUT es diferente de las que hemos instalado hasta ahora, por ello necesita una configuración un poco distinta.

Instalaremos el paquete nut con el comando

apt-get install nut

Pasamos a configurar el fichero /etc/nut/upsmon.conf, que es el único que nos interesa

MONITOR elsai@172.16.2.2:3493 1 debianwoody slave
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/nut/killpower

Como ves, la linea MONITOR es diferente al resto, falta el campo del usuario, y además hemos especificado el puerto de conexión de la máquina remota. Todo esto es porque la versión de NUT incluida en Debian Woody no es tan completa como la que viene en Sid. El resto de opciones es prácticamente igual.

6. Configuración del puesto de control

El puesto de control será la workstation del administrador. En la configuración del servidor corresponde a maquina5. El administrador será capaz de saber en todo momento el estado del SAI de manera gráfica, a través de unos gráficos presentados en el navegador web.

Se podrían instalar las herramientas gráficas en el mismo servidor que controla el SAI, pero si esa máquina no tiene servidor web, no merece la pena instalar uno solo para controlar el SAI.

En definitiva, las herramientas de control deben ser instaladas en una máquina que tenga un servidor web y posibilidad de ejecutar CGIs. No voy a explicar cómo instalar un servidor web porque no es la finalidad de este documento.

6.1 Instalación y configuración

El primer paso es instalar el paquete nut-cgi con el comando

apt-get install nut-cgi

Luego en /etc/nut/hosts.conf añadimos la linea

MONITOR elsai@172.16.2.2 "SAI Principal"

La linea MONITOR tan solo contiene el SAI remoto y una descripción del mismo.

Como medida de seguridad, los autores de NUT han incluido un fichero llamado upsset.conf, en el que tan solo deberemos descomentar la linea que pone

###
I_HAVE_SECURED_MY_CGI_DIRECTORY
###

cuando hayamos configurado de manera correcta nuestro servidor web. Luego abrimos un navegador y escribimos la siguiente URL

http://localhost/cgi-bin/upsstats.cgi

y tendremos una página con los detalles de nuestro SAI, como la carga de la bateria, voltaje de entrada, voltaje de salida, etc...

7. Recomendaciones y enlaces

Este documento lo he escrito después de haber montado todo el tinglado, así que posiblemente se me escape algo. En futuras revisiones iré completandolo. Si ves que hay algo que no entiendes no dudes en escribirme.

Desde que implanté el control del SAI en el trabajo, no se ha ido la luz, así que no he podido comprobar que realmente funciona, y la cosa no está como para ir forzando el apagado ;) El dia que se vaya la luz, seguro que me toca reeditar este documento para corregir errores ;)

Algunos enlaces interesantes:


  Last modified: Thu, 22 December 2016  Contenidos © ServiTux Servicios Informáticos