CentOS5.2(x64)にAPC ES 500のUPS(無停電装置)をつけてモニタリングしてみる。
動機
もともと常用する気がなくてちょっと立てた古い自作サーバも気に入ったのでRAIDにしたけれど、
使っているUPSがサンワサプライのUPS-500Tで
すでに3年ぐらい使っていて、ときどきバッテリー交換アラームがなったりする。
よくわらないがオムロンのOEMなのかどうなのか、交換バッテリはオムロンで買う必要があるのだが、ネットで価格を調べると\8000ぐらいする。
(本体は、もうどこも在庫切れ。)
最近のUPSは安くなっているので新しい機種を買った方がいいような気がする。
ちなみに、このUPS-500Tは単純なバックアップ電源でしかなくモニタリングも何もできない。
自宅の他のUPSは、他にRS232Cで接続するオムロン製の古いもの(もう8年ぐらい?)と、コンシューマ向けのUSB接続のAPC製のものが現役稼働中である。
このAPC製のものは半年ほど前に買ってWindowsマシンにつないでいるが、かなり気に入っている。
これは付属のソフト(PowerChute Personal Edition)を使うとUSB接続でバッテリ状態をモニタリングしたり残量が少なくなるとシャットダウンを開始してくれたりする。
ただし、コンシューマ向けな製品に付属するPowerChute Personal Editionでは、Linuxはサポートしていないようである。
調べたところ、APC ES-500の安価のもの(1万円前後?)であってもLinux(CentOS5)で同様に(サードパーティ製ではあるが)USB接続でモニタリングしたりシャットダウンしてくれたりすることがわかった。
それで、近所のPC量販店でAPC ES-500を購入することとした。*1
無停電装置を新調することなど、とうぶん無いだろうから次回忘れていると思うので念のためメモしておく。
Apcupsd a daemon for controlling APC UPSesを入れる。
CentOS5.2上でAPC製の無停電装置を監視するためのデーモンを入れる。
以下のサイトが非常に役立った。
展開・ビルド・インストール
$ tar xvfz apcupsd-3.14.5.tar.gz $ cd apcupsd-3.14.5 $ ls COPYING Developers ReleaseNotes c examples platforms ChangeLog INSTALL VERIFYING configure include src DISCLAIMER Makefile autoconf doc kernstodo
./configureして、make, make installする、普通のプロジェクトのようである。
$ ./configure --enable-usb --with-upstype=usb --with-upscable=usb \ --enable-cgi --with-cgi-bin=/etc/apcupsd/cgi
本当に必要なのは--enable-usb だけと思われる。
--with-upstype, --with-upscable はインストール後のapcupsd.conf設定ファイルの書換えでも対応できる。
--enable-cgiは、cgiでブラウザからモニタリングできるようにするもの。
そのcgiの配備場所を--with-cgi-binで指定する。
とりあえず、ビルドする。
$ make
インストールすることにより以下のようにファイルが配備される。
$ sudo make install
Password:
src
src/lib
src/drivers
src/drivers/apcsmart
src/drivers/dumb
src/drivers/net
src/drivers/pcnet
src/drivers/usb
src/drivers/usb/linux
src/cgi
MKDIR /etc/apcupsd/cgi
COPY multimon.cgi => /etc/apcupsd/cgi
COPY upsstats.cgi => /etc/apcupsd/cgi
COPY upsfstats.cgi => /etc/apcupsd/cgi
COPY upsimage.cgi => /etc/apcupsd/cgi
MKDIR /etc/apcupsd
COPY apcupsd.css => /etc/apcupsd/apcupsd.css
COPY hosts.conf => /etc/apcupsd/hosts.conf
COPY multimon.conf => /etc/apcupsd/multimon.conf
COPY apcupsd => /sbin/apcupsd
COPY apctest => /sbin/apctest
COPY apcaccess => /sbin/apcaccess
COPY smtp => /sbin/smtp
platforms
platforms/etc
COPY apcupsd.conf => /etc/apcupsd/apcupsd.conf
COPY changeme => /etc/apcupsd/changeme
COPY commfailure => /etc/apcupsd/commfailure
COPY commok => /etc/apcupsd/commok
COPY offbattery => /etc/apcupsd/offbattery
COPY onbattery => /etc/apcupsd/onbattery
platforms/redhat
------------------------------------------------------------
RedHat distribution installation
------------------------------------------------------------
COPY apcupsd => /etc/rc.d/init.d
CP /etc/rc.d/init.d/halt => //etc/rc.d/init.d/halt.old
AWK /etc/rc.d/init.d/halt
=================================================
apcupsd script installation for RedHat complete.
You should now edit /etc/apcupsd/apcupsd.conf to correspond
to your setup then start the apcupsd daemon with:
/etc/rc.d/init.d/apcupsd start
thereafter when you reboot, it will be stopped and started
automatically.
Please check that your halt script in:
/etc/rc.d/init.d/halt
was properly updated (see installation section of manual)
=================================================
COPY apccontrol => /etc/apcupsd/apccontrol
COPY 80-apcupsd-ups-policy.fdi => /usr/share/hal/fdi/policy/20thirdparty
doc
COPY apcupsd.man => /usr/share/man/man8/apcupsd.8init.dにサービスが登録されていることがわかる。
また、haltスクリプトが若干修正されている。(apcupsdコメントがついている数行が追加されている)
$ diff /etc/init.d/halt.old /etc/init.d/halt 198a199,210 > # See if this is a powerfail situation. # ***apcupsd*** > if [ -f /etc/apcupsd/powerfail ]; then # ***apcupsd*** > echo # ***apcupsd*** > echo "APCUPSD will now power off the UPS" # ***apcupsd*** > echo # ***apcupsd*** > /etc/apcupsd/apccontrol killpower # ***apcupsd*** > echo # ***apcupsd*** > echo "Please ensure that the UPS has powered off before rebooting" # ***apcupsd*** > echo "Otherwise, the UPS may cut the power during the reboot!!!" # ***apcupsd*** > echo # ***apcupsd*** > fi # ***apcupsd*** >
UPS監視設定を行う
設定ファイルを修正する。
$ sudo vim /etc/apcupsd/apcupsd.conf
configureでusbを指定しているので、できあがったconfファイルには修正する箇所はあまり無い。
変更点は以下のとおり。
$ diff /etc/apcupsd/apcupsd.conf.org /etc/apcupsd/apcupsd. conf 15c15 < #UPSNAME --- > UPSNAME APC_ES_500 76c76 < DEVICE /dev/ttyS0 --- > #DEVICE /dev/ttyS0
※ DEVICE /dev/ttyS0をコメントアウトしないとUSBに接続できない、というエラーが発生した。
サービスに登録する。
$ sudo /sbin/chkconfig --list apcupsd サービス apcupsd は chkconfig をサポートしますが実行レベルで参照されていません (run 'chkconfig --add apcupsd') $ sudo /sbin/chkconfig --add apcupsd $ sudo /sbin/chkconfig --list apcupsd apcupsd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
init.d下にapcupdsは準備されているので、あとはchkconfigで登録すればOK。
サービスを起動する。
$ sudo /sbin/service apcupsd start Starting UPS monitoring: [ OK ]
モニタリングできるか確認してみる。
$ /sbin/apcaccess
大丈夫そうだ。
USBが接続できなかったり、USBが抜けたり、商用電源が停止したり、などといったイベントが発生すると、
/var/log/apcupsd.eventsファイルに記録されるので、そこでも確認できる。
テスト
UPSのテストには、/sbin/apctestが使える。
これは対話的にテストを行うもので、このテストツールを動作させるには背後でapcaccessやapcupsdサービスが動作していると、
USBを排他的にオープンできないので、あらかじめ停止しておく必要がある。
CGIによるモニタリングの有効化
apache2のconf.dにapcupsdの設定を追加し*2、Apacheを再起動する。
$ ls /etc/apcupsd/cgi
multimon.cgi upsfstats.cgi upsimage.cgi upsstats.cgi
$ sudo vim /etc/httpd/conf.d/apcupsd.conf
Alias /apcupsd-status "/etc/apcupsd/cgi/"
<Location /apcupsd-status>
SSLRequireSSL
AddHandler cgi-script .cgi
Options indexes ExecCGI
DirectoryIndex multimon.cgi
AuthType Basic
AuthName "apcupsd-status"
AuthUserFile /etc/apcupsd/.htpasswd
Require valid-user
</Location>
$ sudo /sbin/service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]これで、ブラウザからhttps://servername/apcupsd-status/でアクセスすると、
現在のUPSの各種情報を表やグラフとして、また、最近のイベントログも確認することができる。
なお、ローカル外からUPSの状態をモニタリングする意味はあまりないと思うが、SSL且つBASIC認証でステータス表示は保護してみた。
また、http://servername/apcupsd/でcgiを開きたいのでScriptAliasではなく、ただのAliasとして、DirectoyIndexにモニタ用cgiを指定している。
単にBASIC認証+SSLだけならば、AddHandler,Options,DirectoryIndexを消してAliasをScriptAliasにして直接cgiのURLを叩けば問題なし。
シャットダウンの実験
UPSのバッテリ切れで本当にシャットダウンしてくれるのかテストしてみた。
とはいえ、バッテリ切れをテストするための簡単な方法がわからなかった。(apctestには電源断をテストする項目はあるが、バッテリ残量があるのでシャットダウン開始には至らなかった。)
しかたないので商用電源を本当に抜いてバッテリ動作させて警告音をピーピーならしながらテストしてみた。
購入したばかりだからバッテリ残量が少ないので助かったが、60W電球を二個ぐらいつけて余計に電力を消費させてみたりしてテストした。
ブラウザからのバッテリ残量のモニタリングは自動リフレッシュが効いているので、それで残量が減ってゆくのを確認できる。
結果、予定された残り時間に達したとき、きちんとシャットダウンイベントが発生して、きれいにpoweroffしてくれるのを確認できた。
ちなみに、この自宅サーバの消費電力は、サンワサプライの「ワットチェッカー」によると常時70W+なので、ES-500の容量だと余裕で30分ぐらいの時間はありそうな感触である。
結論
APC製USB接続のUPSはLinuxでも問題なく使えるとわかった。
今後、Linuxマシンを新たに組むことがあったら、これを覚えておきたいと思う。