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.8
init.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マシンを新たに組むことがあったら、これを覚えておきたいと思う。