Monitorování UPS pomocí nástroje NUT

Původní stránky (děkuji):
http://www.tachec.org/tipsandtricks/nut/
(Aktualizováno pro CentOS 5)

POZNÁMKA: Problémy s nastavení sériového portu:
Je dobré pamatovat, že některé servery (IBM, Sun..) využívají sériové rozhraní pro vlastní potřeby a také Xen poutívá com1 pro svou konzoli. Pokud tedy konfigurujeme UPS se seriovým rozhraním, je třeba

a) správně nastavit sériové rozhraní v biosu serveru.
U Sunu je to např:

Konkrétně v nastavení IPMI V2.0 (Intelligent Platform Management Interface)

Serivý port byl nastaven pro komunikaci s procesorem BMC

Konkrétně v položce:
Advanced > IPMI 2.0 Configuration > External COM port
musí být „Systém“ ne BMC!

 

b) U Xenu vypnout přiřazení konzole k portu com1 tak, že do souboru /boot/grub/grub.conf do řádku „module“ přidáme xencons=off
Další volby jsou např xencos=/dev/ttyS1 atd.

c) povolení rozhraní com1 u virtuálního stroje:
Viz poznámky na:
http://www.linuxtopia.org/online_books/linux_virtualization/xen_3.0_user_guide/linux_virualization_xen_user_59.html

Zjištění stavu a konfigurace seriového portu (užitečné příkazy):

dmesg|grep tty
setserial /dev/ttyS0
/dev/ttyS1 autoconfig
mknod -m 660 /dev/ttyS0 c 4 64
ls -la /dev/ttyS0
-------------

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

Balíčky nut se nacházejí v repozitářích epel.

yum -y install nut nut-*

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. Z toho logicky vyplývá, že na klientech bude tato direktiva SERVER=no

* 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 1000.

* 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 1000"

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.

Nastavení 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
# v případě klienta zde míst localhost
# samozřejmě uvedeme název nebo IP adresu nut serveru :-)

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:

service ups 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

Ukázky přísupu přes webové rozhraní:

NUT upssetNUT upsset - commands

Rozběhnutí cgi:
http://httpd.apache.org/docs/2.0/howto/cgi.html
==========

 

 

http://articles.techrepublic.com.com/5100-10878_11-6040972.html

Last time, we looked at a useful UPS-monitoring tool called NUT. Part of the power of NUT is in how it can be configured to handle UPS-related events. By default, NUT doesn’t do much of anything; it’s up to you to customize it to respond to certain events.

The first step is to edit /etc/ups/upsmon.conf (the location may vary depending on distribution) and set some NOTIFYFLAG conditions. The NOTIFYFLAG command takes a flag and an action as parameters:

NOTIFYFLAG ONBATT SYSLOG+WALL

This tells upsmon to write to the syslog and to send a broadcast wall message when it detects that the system is on battery power. You can customize this further by setting an EVENT action as well. A more complete example could be:

NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+EXEC
NOTIFYFLAG COMMOK SYSLOG+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL
NOTIFYFLAG FSD SYSLOG+WALL+EXEC

This will run the EXEC command on all events except the REPLBATT event which indicates the UPS battery needs to be replaced. Syslog actions are used for all events, and broadcast messages are sent on all events except communications errors.

Tips in your inbox

Delivered each Tuesday, TechRepublic’s free Linux NetNote provides tips, articles, and other resources to help you hone your Linux skills.

Automatically sign up today!

The EXEC action needs to be defined earlier in the configuration file with the NOTIFYCMD command. NUT comes with a handy tool called upssched that allows for the scheduling of events, so the best NOTIFYCMD to define is upssched:

NOTIFYCMD /usr/sbin/upssched

Once this is done, edit the /etc/ups/upssched.conf file. This configuration file controls how upssched handles events. You can tell it to execute commands or start timers; e.g., if the UPS is still online after 30 seconds, send an e-mail. The first step is to define the CMDSCRIPT, or the shell script (or program) that does the heavy lifting:

CMDSCRIPT /usr/sbin/ups_command

Then you define AT events:

AT ONBATT * START-TIMER onbattwarn 30
AT ONLINE * CANCEL-TIMER onbattwarn

This tells upssched to start a timer that will execute CMDSCRIPT after 30 seconds of being on batteries and will pass CMDSCRIPT the single argument onbattwarn. If the UPS comes back online before 30 seconds is up, upssched cancels the timer.

In this instance, CMDSCRIPT is /usr/sbin/ups_command, which could be a shellscript consisting of nothing more than:

#!/bin/sh
 
case ${1} in
    onbattwarn)
        wall "The UPS is currently running on battery power!"
        ;;
esac
 
exit 0

Of course, you can configure it to handle multiple events and do much more than just send a wall message. You could have it send an e-mail to a cell phone or pager, trigger a series of other scripts, etc. This example, however, illustrates how flexible the handling of UPS-related events can be.

============

http://www.howtoforge.com/make-monit-send-sms-alerts-when-the-server-goes-down

 

How To Make monit Send SMS Alerts When Your Server Goes Down

if (!window.netshel_ord) { netshel_ord=Math.random()*10000000000000000; } if (!window.netshel_tile) { netshel_tile=1; } document.write(‚‚); //–>

Submitted by falko (Contact Author) (Forums) on Thu, 2008-08-07 10:33. :: Linux | Monitoring

How To Make monit Send SMS Alerts When Your Server Goes Down

Version 1.0
Author: Falko Timme
Last edited 08/05/2008

This tutorial explains how you can configure monit to send alert messages per SMS to your mobile phone when a service fails. Because monit can send only emails but not SMS, we will use an email-to-sms gateway where monit will send its emails to, and the email-to-sms gateway will convert the emails to SMS messages.

This document comes without warranty of any kind! I want to say that this is not the only way of setting up such a system. There are many ways of achieving this goal but this is the way I take. I do not issue any guarantee that this will work for you!

 

1 Preliminary Note

I’m assuming that you have already set up monit, e.g. as shown here: http://www.howtoforge.com/server_monitoring_with_munin_monit_debian_etch or here: http://www.howtoforge.com/server_monitoring_with_munin_monit_fedora_7.

In this tutorial I want to monitor a web server (with the web site www.mywebsite.com) to see if it’s still running or not. I therefore use monit on a second server (monit.example.com) so that monit can send alerts if the web server goes down for whatever reason (imagine you installed monit on the web server – if the server goes down, monit cannot send out any alerts…).

The SMS service I’m using here is SMS77.de (if you want to use that service, you must register first and pay at least 5 EUR to your prepaid account). As explained on http://www.sms77.de/email2sms.html (in German), the emails that you send to the gateway need the following format:

Subject: Text of the SMS
Text of the Mail: Email2SMS-Key#Recipient#SMS Type#Sender

You can specify the email2sms key in your SMS77.de account settings; the recipient is the phone number of your mobile phone (if you want to send the message to multiple recipients, separate the phone numbers by commas); as SMS type we use basicplus which costs only 3,5 cents (EUR cents) per SMS. The sender is optional so I leave it out.I will tell monit to format its alert messages so that they match the required format.

You can, of course, use any other email-to-sms gateway. This is just an example of how to do it, and I have no relationship to SMS77.de.

 

2 Configuring monit

Open /etc/monit/monitrc on monit.example.com and add the following stanza to it (at the end of the file):

vi /etc/monit/monitrc

[...]
check host www.mywebsite.com with address www.mywebsite.com
if failed port 80 protocol http and request "/index.php" for 4 cycles then alert
if failed icmp type echo count 5 with timeout 15 seconds for 4 cycles then alert
alert email2sms@sms77.de { connection, timeout, icmp } with mail-format {
from: monit@monit.example.com
subject: $SERVICE $EVENT at $DATE on $HOST
message: 123456#0170123456789#basicplus
}

As you see, with this configuration monit will request the file index.php from www.mywebsite.com, and in addition to that it will try to ping the host www.mywebsite.com. To make sure that monit doesn’t send out too many false positives, it will send an alert only if the tests have failed for four consecutive times (for 4 cycles) – this should indicate that there’s really a problem.

Alerts will be sent to the email-to-sms gateway email address, but only if there was a connection error, a timeout, or lost pings (a list of all available events can be found here: http://www.tildeslash.com/monit/doc/manual.php#alert_message_layout), and the mail-format section specifies the format of the alert email. The variables that you can use in the email are also listed on http://www.tildeslash.com/monit/doc/manual.php#alert_message_layout.

Please adjust this to your email-to-sms gateway!

Restart monit afterwards:

/etc/init.d/monit restart

That’s it!

 

// –>

 

==============

Nejprve je třeba upravit soubor /etc/ups/upsmon.conf a nastavit parametry NOTIFYFLAG:

NOTIFYFLAG ONBATT SYSLOG+WALL

Tento příkas řekne programu upsmon aby zapsal  syslog a poslal broadcast wall message když je detekováno, že systém běží na baterie.

You can customize this further by setting an EVENT action as well. A more complete example could be:

NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+EXEC
NOTIFYFLAG COMMOK SYSLOG+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL
NOTIFYFLAG FSD SYSLOG+WALL+EXEC

Toto bude spouštět příkaz EXEC u všech událostí kromě události REPLBATT, která indikuje, že baterie v UPS potřebují vyměnit. Syslog je užitečný pro všechny události a odeslání zprávy je užitečné u všech ostatních událostí (kromě komunikačních chyb).

Příkaz EXEC musí být definován dříve v konfiguračním souboru s příkazem NOTIFYCMD. NUT přichází s šikovným nástrojem nazvaným upssched který umožňuje plánování událostí. Nejlepší je tedy:

NOTIFYCMD /usr/sbin/upssched

Jakmile je toto hotovo, můžeme upravit soubor /etc/ups/upssched.conf.
Tento soubor určuje jak upssched spravuje události.
Můžeme zadat vykonání příkazu nebo zapnout časování. Např pokud je UPS stále online, pošli po 30 sekundách mail.
Prvním krokem je definování CMDSCRIPT, nebo shellového skriptu, nebo programu, který dělá těžkou práci:

CMDSCRIPT /usr/sbin/ups_command

Pak definujeme AT událost:

AT ONBATT * START-TIMER onbattwarn 30
AT ONLINE * CANCEL-TIMER onbattwarn

Toto řeklo upssched aby nastartoval časovač, který vykoná CMDSCRIPT po 30 sekundách provozu na baterie a ukončí  CMDSCRIPT jeden argument onbattwarn.
Pokud se UPS vrátí zpět k provozu ze sítě před určenými 30 sekundami upssched vypne časovač.

V tomto případě je CMDSCRIPT  /usr/sbin/ups_command, kterým může být shellový skript obsahující  například něco takovéhoto:

#!/bin/sh
case ${1} in
   onbattwarn)
        wall "UPS byla odpojena od sítě a běží na baterie!"
        ;;
esac

exit 0

Samozřejmě, můžete konfiguraovat mnoho důležitých událostí a nastavit mnohem víc věcí než jen odeslání wall message. Můžete odesílat e-mail na mobilní telefon nebo pager atd. Toto je pouze příklad, který ovšem popisuje jak flexibilní je nastavení NUT.