Configura NUT (Network UPS Tools) en Linux y controla un SAI

Configura NUT (Network UPS Tools) en Linux y controla un SAI

Sergio De Luz

Network UPS Tools (NUT) es un completo programa para sistemas operativos basados en Unix y Linux para administrar y gestionar correctamente un Sistema de Alimentación Ininterrumpido (SAI). La mayoría de fabricantes incorporan un software capaz de monitorizar el estado del SAI y enviar avisos por email, también permite ejecutar el sistema como «maestro» de tal forma que otros ordenadores se conecten a él como «esclavos» para leer el estado del SAI. Tanto los equipos maestros como los esclavos, al leer el estado del SAI se pueden configurar para que se apaguen de forma automática si hay un corte de luz.

En este manual se pretende configurar desde cero el programa NUT en una Raspberry Pi con sistema operativo Raspbian. El punto fuerte de utilizar este sistema en lugar de un ordenador es el bajo consumo de energía y permite una gran configurabilidad como por ejemplo avisos por email. NUT también permite que ordenadores «esclavos» se conecten para leer el estado del mismo.

nut_ups

Rendimiento de Network UPS Tools

Está solución resulta muy robusta y versátil, para poder gestionar y monitorizar dispositivos UPS en sistemas UNIX y Linux. Pero para poder realizar una evaluación de su rendimiento, lo mejor es analizar diferentes aspectos que con muy importantes. Y el primero de ellos es el consumo de recursos, donde es conocido por ser bastante ligero. Utilizar esta herramienta no debería suponer una disminución significativa del rendimiento de tu sistema cuando se ejecuta. Incluso en hardware más antiguo, no debería tener mucho problema. Lo cual es beneficioso para su estabilidad y confiabilidad, donde se trata de una solución madura y bien mantenida. Resulta muy estable en la gran mayoría de las configuraciones, pero si está correctamente configurado, puede ser una solución muy buena.

En cuanto a flexibilidad y escalabilidad también nos sorprende. Y es que tiene la capacidad de administrar diferentes UPSs, y con configuraciones bastante complejas. Esto es porque se puede escalar desde pequeñas configuraciones de tan solo una UPS, a sistemas más grandes con diferentes UPS. Esto nos podría llevar a pensar en aumentos de latencia, pero en este caso suele ser muy rápido y bastante confiable. Ya que estas respuestas, pueden ser críticas para garantizar que se toman las acciones adecuadas en los tiempos oportunos. El problema que podemos tener en cuanto a las configuraciones, es on su propia interfaz. Esta no es la más sencilla e intuitiva del mundo, por lo cual requiere cierta curva de aprendizaje para poder tenerla totalmente controlada.

Por otro lado, la integración don los sistemas es muy buena. NUT se integra con la gran mayoría de los sistemas operativos actuales y entornos Linux y UNIZ. Por lo cual se puede instalar en sistemas de inicialización como Systemd o SysVinit. Siendo posible también la instalación de sistemas de monitorización y notificación de posibles incidencias que se puedan producir. Esto lo podemos trasladar al hardware, donde NUT cuenta con un amplio soporte para dispositivos UPS diferentes. En cambio, siempre es buena idea verificar la compatibilidad de los modelos específicamente, antes de que realicemos alguna instalación.

Instalación

Lo primero que tenemos que hacer es instalar el programa:

sudo apt-get install nut

Editar archivos de configuración

Una vez que se ha instalado, nos tenemos que ir al directorio /etc/nut/ donde se encuentran todos los archivos .conf para proceder con su configuración.

Nosotros hemos probado esta configuración con un SAI Salicru SPS SOHO+ 1400VA. A continuación os vamos a poner el contenido de nuestros archivos para que la Raspberry actúe como maestro y envíe notificaciones por email en caso de problemas. Tan sólo debemos editarlos en modo superusuario (root) con nuestro editor de archivos favorito (vi, vim, nano o cualquier otro).

Archivo nut.conf

MODE=standalone

Archivo ups.conf

[salicru]
driver = blazer_usb
port = auto
desc = "SAI Salicru"

Archivo upsd.conf

MAXAGE 15
MAXCONN 1024
LISTEN 127.0.0.1 3493
LISTEN ::1 3493

Archivo upsmon.conf

MONITOR salicru@localhost 1 nonmaster contraseña master

MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /bin/upssched-cmd
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC

RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

Archivo upsd.users

[nonmaster]
password = contraseña
actions = set
instcmds = ALL
upsmon master

Archivo upssched.conf

CMDSCRIPT /bin/upssched-cmd
PIPEFN /var/run/nut/upssched/upssched.pipe
LOCKFN /var/run/nut/upssched/upssched.lock

AT COMMOK * EXECUTE notify
AT COMMBAD * EXECUTE notify
AT REPLBATT * EXECUTE notify
AT NOCOMM * EXECUTE notify
AT FSD * EXECUTE forced-shutdown
AT NOPARENT * EXECUTE notify
AT SHUTDOWN * EXECUTE notify
AT ONLINE * CANCEL-TIMER shutdown
AT ONLINE * EXECUTE resume
AT ONBATT * START-TIMER shutdown 60000
AT ONBATT * EXECUTE shutdown-warning
AT LOWBATT * START-TIMER shutdown
AT LOWBATT * EXECUTE shutdown-warning

Hasta aquí llegaría la configuración de los archivos fundamentales para que el sistema operativo reconozca el SAI correctamente y comience a funcionar. Sin embargo, hay un archivo extra ubicado llamado upssched-cmd ubicado en /bin/ que se encarga de realizar las acciones configuradas en los anteriores archivos, como por ejemplo ejecutar el apagado del servidor en caso de que estemos bajos de batería o notificar en el syslog los diferentes eventos que están ocurriendo en el SAI.

La ruta de este archivo (que es fundamental para una buena configuración) está en /bin/upssched-cmd, procedemos a editarlo con nuestro editor de archivos favorito con el siguiente contenido:

Archivo upssched-cmd

#!/bin/sh

case "${NOTIFYTYPE}" in
ONLINE)
_notifymessage="UPS ${UPSNAME} - Equipo funcionando con la luz electrica";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
ONBATT)
_notifymessage="UPS ${UPSNAME} - Corte en el suministro electrico, el sistema funciona con bateria. CUIDADO";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
LOWBATT)
_notifymessage="UPS ${UPSNAME} - Bateria baja";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
FSD)
_notifymessage="UPS ${UPSNAME}: - Forzando el apagado del equipo";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
COMMOK)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha establecido correctamente";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
COMMBAD)
_notifymessage="La comunicacion con el UPS ${UPSNAME} se ha PERDIDO, ERROR.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;
upsdrvctl start salicru;;
SHUTDOWN)
_notifymessage="Finalizando sesion y apagando el equipo.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
REPLBATT)
_notifymessage="UPS ${UPSNAME} - The battery needs to be replaced!";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
NOCOMM)
_notifymessage="UPS ${UPSNAME} - El UPS no esta disponible";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;
upsdrvctl start salicru;;
NOPARENT)
_notifymessage="No se puede apagar automaticamente el servidor, se necesita
intervencion del administrador.";
echo ${_notifymessage} | mail -s "SAI" destinatario_email@gmail.com;;
esac

case "${1}" in
shutdown-warning)

_message="${_notifymessage}.
Apagado inminente en ${_shutdowntimer} segundos.";;

shutdown)
_message="${_notifymessage}.
Se inicia el apagado del equipo.";
shutdown -p now ${_message};;

resume)
_message="${_notifymessage}.
Apagado cancelado.";;

forced-shutdown)
_message="${_notifymessage}.
Apagado forzado inminente en 100 minutos.";
shutdown -h 100;;

notify)
_message="${_notifymessage}";;

*)
_message="Unknown command: ${1}";
esac

# Write message to syslo
logger -t upssched-cmd "${_message}"

Comprobar funcionamiento y mirar logs

Después de realizar estas acciones, es recomendable reiniciar el sistema operativo para comprobar que todo funciona correctamente. Hay un comando muy útil para comprobar si los drivers y el sistema en Raspbian funcionan correctamente:

upsdrvctl start salicru

Todos los logs se guardan en syslog, por tanto podemos hacer un simple tail para obtener las últimas líneas de información del sistema para detectar problemas en el arranque u otros avisos:

tail /var/log/syslog

Como habéis podido observar en este último archivo de configuración, hemos utilizado el servidor SMTP que hemos instalado en Raspbian para enviar los avisos por email.

Si usamos clientes de NUT en los ordenadores esclavos como por ejemplo WinNUT, podremos leer el estado del SAI y apagar los diferentes ordenadores. Esta configuración que os proponemos, la hemos probado y funciona correctamente, no obstante, es posible que tengáis algún tipo de problema por los drivers u otros motivos, os invitamos a ponernos un comentario si tenéis problemas e intentaremos echaros una mano.

Ventajas e inconvenientes de NUT

Aunque NUT es un programa muy usado para administrar los Sistemas de Alimentación Ininterrumpido, tiene algunas ventajas y desventajas que debes tener en cuenta antes de usarla en un entorno de red.

Ventajas

  • Monitorización remota: NUT permite monitorear el estado de los dispositivos SAI desde cualquier lugar de la red, lo que facilita la supervisión centralizada de varios sistemas.
  • Gestión centralizada: Con NUT, es posible administrar varios SAI desde una sola interfaz de administración, lo que simplifica la gestión y reduce la necesidad de un software específico para cada dispositivo.
  • Notificaciones: NUT puede enviar notificaciones automáticas por correo electrónico o mensajes de texto en caso de circunstancias importantes, como cortes de energía, sobrecargas o fallos en la batería. Esto ayuda a los administradores a tomar medidas rápidas para proteger los sistemas.
  • Automatización de acciones: Permite configurar acciones automáticas en respuesta a situaciones específicas, como apagar servidores de manera segura en caso de un corte prolongado de energía para evitar la pérdida de datos.
  • Compatibilidad: NUT es compatible con una amplia gama de dispositivos SAI de diferentes fabricantes, lo que da flexibilidad y opciones a los usuarios al elegir hardware para sus Sistemas de Alimentación Ininterrumpida.

Inconvenientes

  • Configuración inicial: Configurar correctamente NUT puede necesitar un conocimiento técnico avanzado, especialmente cuando se trata de integrarlo con dispositivos SAI específicos y configurar la red para permitir la comunicación entre los dispositivos y el servidor de monitoreo. Esto puede suponer un problema para usuarios amateur que no tengan los conocimientos técnicos necesarios.
  • Riesgo de dependencia de red: Si la red tiene problemas de conectividad o fallos, la capacidad de monitorear y controlar los dispositivos SAI a través de NUT puede verse comprometida, lo que podría afectar la capacidad de respuesta ante emergencias.
  • Posibles problemas de seguridad: Al permitir el acceso remoto a dispositivos SAI, existe el riesgo de que estos sistemas puedan ser vulnerables a ataques cibernéticos si no se implementan medidas adecuadas de seguridad de red y autenticación.
  • Soporte limitado: Aunque NUT es una herramienta de código abierto con una comunidad activa de usuarios y desarrolladores, puede carecer del mismo nivel de soporte técnico y recursos disponibles que ofrecen otro tipo de soluciones comerciales, lo que puede ser un problema para los usuarios menos experimentados.
¡Sé el primero en comentar!