サーバ監視のためにCactiというソフトを運用している。
こいつはいろんな情報をグラフ化してWebで監視確認できるというすぐれもの。時間帯によってサーバの負荷とかWebサーバを担ってるApatchの状況がどう変化したかなんてのが眺められる。
一番気になるのはHDDの温度変化。空調が行き届いて室温が保たれた部屋で運用してるわけじゃないんで、HDDの寿命に影響する温度変化がどんな感じかをモニタできると安心できる。
HDDの温度をモニタするにはHDDからS.M.A.R.T.の情報を読み出すツール(smartctl)を使うけど、たいていデフォルトではHDDデバイスのパーミションはrootにしか空いてなかったりする。Cactiからツールを実行すると権限がなくて情報の読み出しに失敗してしまう。
実は、これまではデバイスのパーミションを手動で変更して実行していたけど、セキュリティ的に難があるのと、サーバの再起動でパーミションが元に戻ってアクセスできなくなってしまってた。
パーミションの初期値を変えるのも手だけどセキュリティを維持するためにHDDの情報を読み出すツールはcronからroot権限で実行して、結果をファイルに書き出しておき、それをCactiで読み込むという方法に変更した。
Cactiは情報の生成をcronから5分間隔で実行している。HDDから情報を読み出すツールはとりあえずcronで1分間隔で読み出すようにしてみた。
だけど動かしてもRRD(Round Robin Database)が更新されない。
しばらく悩んだけど、原因はCactiの情報の生成とHDDの情報読み出しの時間が被っていたので、HDDからの情報を書き出したファイルがnullだからだった。それらしいエラーも何も出ないので、しばらく悩んでしまった。
ちゃんとファイルの書き出しと読み出しの同期を取る仕組みを実装すべきなんだろうけど面倒なんで、Cactiが情報を生成する時間(5運間隔)と、HDDからの情報を読み出す時間に1分の差を設けて解決させた。
これでサーバに内蔵している4基のHDDの温度変化を見れるようになった。
ちなみにHDD1,HDD2はミラーリング(RAID 1)でOSとhomeを収めてる。HDD3はOSとhomeのバックアップ、HDD4はMacのTime Machine用。