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ů:




