Monitorování UPS pomocí nástroje NUT
Network UPS Tools (NUT) je sada programů, které slouží k monitorování UPS (Uninterruptible Power Supply) a zajišťují korektní vypnutí všech počítačů připojených k dané UPSce v případě dlouhodobého výpadku napájení, kdy UPS již nebude mít dostatečnou energii k napájení počítačů k ní připojených.
Díky NUTu nám stačí mít k UPSce připojen přes sériový (případně USB) kabel pouze jediný počítač (master server) a zbylé počítače (slave) komunikují s tímto serverem přes TCP/IP, tedy přes klasický ethernetový (síťový) kabel.
Program NUT se skládá ze tří částí, první je démon upsd
, který
pomocí obslužného programu (ovladače) pro daný typ UPSky (například apcsmart
pro APC Smart
UPSky) komunikuje přes sériový (nebo USB) port s danou UPSkou.
Druhou částí programu NUT je klientská/monitorovací část realizovaná programem
upsmon
, který na klientské stanici běží také jako démon.
Tento program
komunikuje po síti s démonem upsd
a zároveň se
postará o případné korektní
vypnutí systému tím, že zavolá příkaz /sbin/shutdown -h +0
.
Třetí částí jsou CGI skripty sloužící pro monitoring UPS, případně pro nastavení některých parametrů UPS přes webové rozhraní nebo pro spuštění testů UPS.
Instalace
Protože jsem v žádném z repozitářů CentOSu nenašel balíčky
pro NUT, tak jsem si je musel přeložit sám. Zdrojové kódy stabilní verze
NUTu lze nalézt na adrese
www.networkupstools.org/source/2.0/. Ve zdrojových kódech jsou v adresáři packaging/RedHat/
umístěny SPEC soubory nut.spec
a nut.spec.in
.
Je lepší využít druhý
jmenovaný, protože je novější a opravuje pár nepřesností. Návod jak vyrobit
RPM balíček z tohoto SPEC souboru zde popisovat již nebudu, protože toto je
již popsáno v článku
o buildování RPM balíčků.
Po úspěšném přeložení budete mít k dispozici balíčky
nut-server-2.0.5-1.i386.rpm
, nut-2.0.5-1.i386.rpm
a
nut-cgi-2.0.5-1.i386.rpm
. Instalace balíčků na serveru
(serverový balíček závisí na balíčku klienta, proto je zapotřebí pro splnění
závislostí nainstalovat oba) se provede následovným způsobem:
rpm -Uvh nut-server-2.0.5-1.i386.rpm nut-2.0.5-1.i386.rpm
Konfigurace serveru
Konfigurační soubory nalezneme v adresáři /etc/ups
. Nejprve si
však zprovozníme komunikaci mezi počítačem a UPS. V souboru
/etc/sysconfig/ups
nastavíme
parametr SERVER=yes
, tím říkame, že
náš počítač bude jako server a bude tedy spouštět démona upsd. Dále musíme
nastavit parametr MODEL
, tedy ovladač pro daný typ UPS. Seznam
těchto ovladačů pro dané typy UPS naleznete v souboru
/usr/share/ups/driver.list
.
V mém případě to bude MODEL=apcsmart
, protože budu
komunikovat s UPSkou od firmy APC, typ Smart-UPS 2200. Nakonec ještě musíme
specifikovat port (parametr DEVICE
) na kterém je UPSka
k počítači připojená, tedy například /dev/ttyS0
pro sériový
port 1.
Výsledný konfigurační soubor /etc/sysconfig/ups
bude
vypadat následovně:
SERVER=yes MODEL=apcsmart DEVICE=/dev/ttyS0 OPTIONS= UPSD_OPTIONS=
Nastavíme ještě konfigurační soubor /etc/ups/ups.conf
, kterým se
konfiguruje obslužný program komunikující se samotným démonem upsd. Obsah
souboru bude v mém případě následující:
[smartups] driver = apcsmart port = /dev/ttyS0 sdtype = 0 desc = "APC Smart-UPS 2200"
Jméno UPSky (parametr [smartups]
) může být libovolné. Další
parametry (např. sdtype = 0
) lze nalézt pro daný
ovladač UPSky buď v manuálové stránce (man apcsmart
) nebo výpisem
nápovědy pro daný příkaz (apcsmart -h
).
V tuto chvíli již můžeme vyzkoušet, zda nám komunikace s UPSkou funguje a to následujícím příkazem:
apcsmart -u root -DD -a smartups
Na terminál se vypíše více informací o tom co UPSka podporuje za příkazy a výpis skončí následujícími řádky:
... APC - UPS capabilities determined Detected SMART-UPS 2200 [GS9946005257] on /dev/ttyS0 dstate_init: sock /var/run/nut/apcsmart-ttyS0 open on fd 5
Tímto máme potvrzeno, že komunikace s UPSkou přes sériový kabel funguje,
můžeme program ukončit pomocí kombinace CTRL-c a přistoupit
k další části konfigurace, tedy k nastavení démona upsd
.
Konfigurační soubor démona upsd
je rozdělen
na dva soubory, první se nazývá
/etc/ups/upsd.conf
a jsou v něm nadefinovány počítače,
které smějí s tímto démonem komunikovat přes TCP/IP. Druhý soubor se
jmenuje /etc/ups/upsd.users
a jsou v něm uloženi uživatelé
a hesla pro ověření identity.
Nejprve si nastavíme přístupy klientských počítačů k našemu NUT serveru.
Nastavení je velice jednoduché a myslím si, že soubor
/etc/ups/upsd.conf
nepotřebuje žádný větší komentář:
ACL all 0.0.0.0/0 ACL localhost 127.0.0.1/32 ACL backup 10.0.0.50/32 ACL www 10.0.0.51/32 ACCEPT localhost ACCEPT backup www REJECT all
Tímto jsem povolil přístup k NUT serveru pouze z IP adres 127.0.0.1, 10.0.0.50 a 10.0.0.51. Pozor, maska za IP adresou je povinná!
Ještě si nadefinujeme jména uživatelů a hesla a povolíme jim přístup k
NUT serveru. Toto nalezneme v souboru /etc/ups/upsd.users
:
[ups] password = monu6ivatel allowfrom = localhost backup www upsmon master [admin] password = administr8torups allowfrom = localhost actions = SET instcmds = ALL
Nadefinoval jsem uživatele ups
a admin
. Uživatel
ups
smí pouze monitorovat stav UPS a to z IP adres 127.0.0.1,
10.0.0.50 a 10.0.0.51 a uživatel admin
smí přenastavit parametry
UPSky, případně spustit nějaké testy na UPSce, avšak pouze z IP adresy
127.0.0.1.
Protože mám zapnutý firewall, tak musím na serveru ještě povolit přístup
z IP adres 10.0.0.50 a 10.0.0.51 a to na port na němž naslouchá upsd,
tedy na 3493. Do souboru s firewallem (/etc/sysconfig/iptables
)
přidám na patřičná místa následující řadky:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 10.0.0.50 --dport 3493 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 10.0.0.51 --dport 3493 -j ACCEPT
Tímto máme konfiguraci na straně serveru hotovou a můžeme přejít ke konfiguraci klientů.
Konfigurace klientů
Na klientských stanicích stačí nainstalovat pouze balíček
nut-2.0.5-1.i386.rpm
. V mém případě jsem nastavil klientský
program i na NUT serveru. Klientský program má konfigurační soubor v
/etc/ups/upsmon.conf
. Tento soubor v mém případě vypadá
následovně:
MONITOR smartups@localhost 1 ups monu6ivatel master MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -h +0" POLLFREQ 20 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 60 POWERDOWNFLAG /etc/killpower RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5
Parametr MONITOR
definuje na jakou UPS
(smartups@localhost
), pod jakým
uživatelem (ups
) a s jakým heslem (monu6ivatel
) se
bude klientský program připojovat na upsd
.
Typ master
znamená,
že se jedná o hlavní monitorovací program, který běží na počítači, jenž
prostřednictvím sériového (USB) kabelu komunikuje s UPSkou. Počítač s typem
master
se bude vypínat až jako poslední. Parametr
SHUTDOWNCMD
nastavuje cestu k příkazu, kterým se bude počítač
vypínat. Parametr POWERDOWNFLAG
vytvoří při vypínaní po výpadku
napájení soubor /etc/killpower
a v souboru
/etc/init.d/halt
je testována existence tohoto souboru. V případě, že existuje, tak je těsně před vypnutím počítače poslán signál pro vypnutí
UPS. Tím docílíme toho, že po opětovné obnově napájení dojde k zapnutí UPS a
tím i k zapnutí počítače (toto samozřejmě musí být ošetřené i v BIOSu počítače
tak, aby došlo k automatickému zapnutí počítače po obnově napájení). Kdyby se
nepoužíval tento pomocný soubor (/etc/killpower
), tak by
automaticky při vypnutí počítače došlo i k vypnutí UPS (pokud by toto
chování bylo nastavené), což není úplně
ideální. Parametr POWERDOWNFLAG
se nastavuje pouze na hlavním
(master) monitorovacím počítači.
Popis dalších parametrů v tomto souboru lze nalézt v manuálové stránce
(man upsmon
) nebo přímo v komentářích v daném konfiguračním
souboru.
Někdy je také dobré nastavit si logování některých událostí, což lze provést
přidáním níže uvedených direktiv do souboru /etc/ups/upsmon.conf
:
NOTIFYFLAG ONLINE SYSLOG+WALL NOTIFYFLAG ONBATT SYSLOG+WALL NOTIFYFLAG LOWBATT SYSLOG+WALL
Informace o tom, zda UPS pracuje ze sítě nebo z baterie, případně informace, že baterie je již vybitá se budou zapisovat do logu a zároveň posílat na terminál všem přihlášeným uživatelům. Lze nastavit například i posílání e-mailů.
Tímto je konfigurace klientské části dokončena a můžeme provést otestování.
Nastartujeme démon NUT a monitorovací program NUTu:
/etc/init.d/upsd start /etc/init.d/upsmon start
Pomocí programu upsc
můžeme získat informace o UPS:
upsc smartups@localhost battery.alarm.threshold: 0 battery.charge: 100.0 battery.charge.restart: 00 battery.date: 11/10/99 battery.packs: 000 battery.runtime: 10320 battery.runtime.low: 420 battery.voltage: 55.05 battery.voltage.nominal: 048 driver.name: apcsmart driver.version: 2.0.5 driver.version.internal: 1.99.7 input.frequency: 50.00 input.quality: FF input.sensitivity: H input.transfer.high: 253 input.transfer.low: 196 input.transfer.reason: R input.voltage: 244.4 input.voltage.maximum: 245.7 input.voltage.minimum: 243.1 output.voltage: 244.4 output.voltage.target.battery: 230 ups.delay.shutdown: 180 ups.delay.start: 000 ups.firmware: 80.11.I ups.id: TACHEC ups.load: 006.7 ups.mfr: APC ups.mfr.date: 11/10/99 ups.model: SMART-UPS 2200 ups.serial: GS9946005257 ups.status: OL ups.temperature: 036.9 ups.test.interval: 1209600 ups.test.result: NO
Pro zjištění příkazů, které UPSka podporuje můžeme použít následující příkaz:
upscmd -l smartups@localhost Instant commands supported on UPS [apc@localhost]: test.panel.start - Start testing the UPS panel test.panel.stop - Stop a UPS panel test load.off - Turn off the load immediately shutdown.return - Turn off the load and return when power is back shutdown.stop - Stop a shutdown in progress beeper.on - Enable the UPS beeper beeper.off - Disable the UPS beeper
Příkazy lze UPSce zadávat pomocí programu uspcmd
, bude vyžadován
uživatel, který smí zadávat příkazy a jeho heslo. V mém případě by to byl
uživatel admin
a heslo administr8torups
.
upscmd -u admin smartups@localhost beeper.off
Konfigurace CGI skriptů
Pokud nán funguje NUT server a pomocí NUT klienta jsme schopni získat
informace z UPS a chceme mít informace o UPS v čitelnější podobě, tak si
můžeme nainstalovat balíček nut-cgi-2.0.5-1.i386.rpm
.
rpm -Uvh nut-cgi-2.0.5-1.i386.rpm
CGI skripty nalezneme klasicky v adresáři /var/www/cgi-bin/
. Než
na dané skripty přistoupíme webovým prohlížečem, tak je zapotřebí udělat ještě
menší úpravy v některých konfiguračních souborech. V souboru
/etc/ups/hosts.conf
je zapotřebí nadefinovat název UPS a adresu:
MONITOR smartups@localhost "Local UPS"
V případě, že budeme chtít využívat webové rozhraní i k zadávaní parametrů
dané UPS, tak je dobré si projít soubor /etc/ups/upsset.conf
a
dle pokynů v něm napsaných omezit přístup k CGI skriptu
upsset.cgi
a poté v tomto souboru odkomentovat direktivu
I_HAVE_SECURED_MY_CGI_DIRECTORY
.
Skripty jsou dostupné přes webový prohlížeč na adresách:
http://127.0.0.1/cgi-bin/upsstats.cgi http://127.0.0.1/cgi-bin/upsset.cgi
Ukázka výstupu CGI skriptů: