UPSの導入と監視(apcupsd)

1.はじめに

やっぱりサーバーにはUPS付けたいですよね
FreeBSDの場合、そのまま電源が落ちると遅延書き込みしているファイルは死んでしまい
fsckでチェックするとそのファイルは削除しないとクリーンにならないのと
アクセス中だとセクターエラーして使用できなくなります。
個人でも比較的購入し易いAPC製のCS500を導入し監視しましょう
バッテリーも秋月で格安にて購入できるタイプですのでお薦めです

2.apcupsdのインストール

監視ソフトにはapcupsdが有り、APC社のUPSはほとんど対応しています。
まずインストールします
# cd /usr/ports/sysutils/apcupsd
# make install clean
オプションでONしたのは
CGI USB SNMP
です。
CS500の場合、純正ではUSBしか接続ケーブルがなくシリアルケーブルはオプションです
一応購入したのですがUSBでもうまくいきましたのでUSB接続します。
あとapcupsdのCGIが有り、これもなかなかいいのでオプションでONします。
SNMPは・・・使用した事ないんですが将来のためにONしました
勉強しなければ(^_^;

3.設定と起動

設定ファイルをコピーします
# cp /usr/local/etc/apcupsd/apcupsd.conf.sample /usr/local/etc/apcupsd/apcupsd.conf

では設定しましょう
上の方の行を消すと動きませんので、できるだけ必要箇所のみ触りましょう
変更あるいは確認するところは下記のとおりです
/usr/local/etc/apcupsd/apcupsd.conf
# 名前なので何でもよい
UPSNAME CS500

UPSCABLE usb
UPSTYPE usb
# DEVICEは不要
あとはバッテリー残量がどれくらいでシャットダウンするかとかは各自お好みで設定して下さい。
また、高度な設定になると1台のUPSでマシンを複数台接続し順次シャットダウンする事もできます

起動時にapcupsdを走らせるので
/etc/rc.conf へ追記する
apcupsd_enable="YES"

出来上がったら動かして見ましょう。
コマンドラインから
# /usr/local/etc/rc.d/apcupsd start

うまく動いているかはpsコマンドなどで確認して見てください
うまく動いていれば
# /usr/local/etc/rc.d/apcupsd status
とやるとroot宛にステータスがメールされます

4.HP経由での監視

apcupsdの良いところで遠隔からでもHP経由で見る事ができます
そのためにインストール時にCGIをONしてあります。
ちなみにパッケージだとOFF何ですよね〜
まずはApacheのconfファイルに下記を追記しましょう
一応あまり公開したくないのでSSLにして .htaccess で制限して見ました
/usr/local/etc/apache2/ssl.conf
<Directory "/usr/local/etc/apcupsd/cgi/">
    Options Includes FollowSymLinks ExecCGI
    AllowOverride All
</Directory>
あとは
/usr/local/etc/apcupsd/cgi/.htaccess
で制限しておきましょう
.htaccess の例
AuthUserFile /usr/home/****/.password
AuthGroupFile /dev/null
AuthName "By Password"
AuthType Basic
Options Includes ExecCGI
DirectoryIndex multimon.cgi
<Limit POST GET PUT>
require user *****
</Limit>
.htaccessの解説は他のHPを見て下さい

Apacheを再起動させconfを反映したら
https://hogehoge.url/ups/
をアクセスすれば

とこんな感じで出れば成功です。
Systemの下のLocalHostをクリックすると

とこんな感じで出ます

右の「All Data」をクリックすると
ずらずらっとテキストで出て来ます。

5.MRTGでモニター

apcupsdのまたもや良いところでコマンドラインからも値をかえしてくれるので
これを利用してMRTGでカーブが書けます。
コマンドラインから
# apcaccess status
とたたけば、ずらずらっと出て来ます
この中で
・UPSバッテリー容量
・UPSへの入力電圧
・UPS負荷
・UPSで稼働可能な時間
をモニターします
最初は温度もやっていたのですが、CS500だとず〜っと29.4℃なので
ちゃんとモニター出来ないようでしたのでやめました。
他のUPS(smart UPSなど)であれば可能でしたので、一応試して見てください。

それではそれぞれシェルを作成します
■容量
#!/bin/sh
export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
apcaccess status | awk '/^BCHARGE/ {print int($3)}'

■入力電圧
#!/bin/sh
export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
apcaccess status | awk '/^LINEV/ {print int($3)}'

■負荷
#!/bin/sh
export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
apcaccess status | awk '/^LOADPCT/ {print int($3)}'

■稼働可能時間
#!/bin/sh
export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
apcaccess status | awk '/^TIMELEFT/ {print int($3)}'

■温度
#!/bin/sh
export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
apcaccess status | awk '/^ITEMP/ {print int($3)}'

それぞれ実行権限を与えておき好きなファイル名で保存して下さい。
あとはこれをsnmp経由でもよいのでmrtgに設定すればカーブが書けます。