HotSaNICでCPUの温度等をグラフ化 (2005/08/14更新)

環境 Debian Sarge RC2,Sarge r0a
CPU温度やFAN回転数の監視ができるようになったところで, そのログを取れたらいいな〜とネットを徘徊していたら, 自分が期待する以上の優れたツールを発見しました. それは,HotSaNIC (サンプル)です. サーバーのCPU温度やFAN回転数の監視だけでなく,ネットワークトラフィックや, CPU負荷,メモリー使用量,HDD使用量などありとあらゆるリソースをリアルタイムに, 6時間毎,1日毎,1週間毎,1ヶ月毎,1年毎のグラフにしてWebブラウザで見ることが 出来るという素晴らしいツールです.
まず,CPU温度やFAN回転数の監視を有効にするにはlm-sensorsをインストールしておく必要があります.詳しくは,私のサイトの を御覧下さい.

インストール準備

HotSaNICはデータを収集してグラフ化するためのフロントエンドなので,その前に必要なツールをインストールします.

rrdtoolのインストール

RRD (Round Robin Database) は時系列データの蓄積とそのデータの表示をするシステムです.まずこれをインストールします.
# apt-get install rrdtool librrds-perl

imagemagickのインストール

HotSanicはグラフを出力しますが,一つ一つのサイズが大きい (680x340くらいあります)ので, サムネイルにして一覧表を作ってくれます.そのとき,imagemagickが入っていなければブラウザの縮小機能で,入っていれば 'gif' か 'png' で縮小してくれます.当然そっちの方が奇麗なのでimagemagickをインストールしましょう.
# apt-get install imagemagick

snmpのインストール

ネットワーク上の別のマシンの情報も得たい場合はインストールします.自分のマシン以外に監視する必要は無かったので入れませんでした.

HotSaNICのインストール

準備が整ったらいよいよHotSaNICをインストールします. しかし,残念ながらaptにはないので本家からソースをダウンロードして来ます.単なるスクリプトなので恐れることはないです(^^).

インストール手順

  1. 解凍
    /usr/localに持っていき,解凍.
    # su
    # cp hotsanic-0.5.0-pre6-snapshot.tgz /usr/local/.
    # tar zxvf hotsanic-0.5.0-pre6-snapshot.tgz
    /usr/local/HotSaNICというディレクトリが出来上がります.
  2. setup.plの実行
    READMEに書かれているようにとりあえずsetup.plを実行します.
    # cd /usr/local/HotSaNIC
    # ./setup.pl
    まずは,1つ1つモジュールを使うかどうか尋ねられます.意味がわからなければとりあえず最初は全部 Y で答えておきましょう.実際にグラフを見て,いらないと思ったら後でもう一度setup.plをやりなおせばOKです.
    Do you want to use this module? (Y/n) > y
    Do you want to show this module's graphs on the webpage? (Y/n) > y
    続いて,各モジュールのセッティングを行なうことになります.モジュールをたくさん選んでしまった場合,質問が大量に来ます.ここは覚悟しておきましょう.こちらも失敗したら後でやり直せばよいです.
    質問が終了すると,それに合った起動スクリプト(rrdgraph)と各settingsファイル作成してくれるので,
    # cd /etc/init.d
    # ln -s /usr/local/HotSaNIC/rrdgraph .
    # update-rc.d rrdgraph defaults 98
    のようにして,起動スクリプトを/etc/init.dと各ランレベルに配置します.
  3. 続いてsettingsの中のモジュールに関する設定ファイルを編集します.
    # cd /usr/local/HotSaNIC
    # vi settings  (注意する点は以下)
    • rrdtoolのパスの設定
      BINPATH="/usr/bin"
    • ブラウザで見られる適当な場所を指定.
      WEBDIR="/var/www/HotSaNIC"
    • グラフの出力形式.pngで出します.
      IMAGEFORMAT="png"
    • サムネイルの出力エンジン
      CONVERTMETHOD="ImgMgck"
    • convertのパス
      CONVERTPATH="/usr/bin/convert"
  4. いよいよスタートさせます.
    # /etc/init.d/rrdgraph start
    Starting rrdtimer...
    rrdtimer [14882]: reading & checking config (/usr/local/HotSaNIC/settings) ...
    [Sun 2005-02-13 02:55:29] - rrdtimer [14882]: evaluating cmdline arguments...
    [Sun 2005-02-13 02:55:29] - rrdtimer [14882]: entering daemon mode...
    起動スクリプトを実行して上記のようにデーモンモードになってくれていればとりあえず成功です!! デフォルトでは15分ごと,詳しくは時計が0,15,30,45分のときにグラフが出力されるので,最高15分待てばWEBDIRで指定した場所にグラフができていきます.15分毎というのはグラフを作る間隔であって,データの収集はデフォルトでは10秒毎にされています.
  5. htmlの雛型の出力
    グラフが出力される時間になったら以下のコマンドを実行します. 各グラフの配置を自動で決めてhtmlをWEBDIRに作成してくれます.
    # ./makeindex.pl
  6. サムネイルの出力
    サムネイルはデフォルトでは1日1回しか更新されないので,現時点でできたhtmlを見ると「×」だらけになっています.そこで,以下のコマンドを実行して今の状態でサムネイルを作成しておきます.
    # ./convert.pl
  7. htmlを確認してみる
    以降,グラフの更新は勝手にされていきます. Webブラウザで見てみましょう.以下のような感じになっていると思います.
    ところどころ表示されていなかったり,余計なものがあると思いますので, 次にカスタマイズの方法を示します.

HotSaNICのカスタマイズ

いらないモジュールを削除する

個人的には,瞬時値を観測するものは不要だと考えています. 例えば,TRAFFICDISKIOですね.その他,UPSとかPINGとか不要です. それらを削除するにはsettingsファイルをいじくります. RUNSHOWの行からそれらを削除すればOKです. 私の場合はこうしました.
# cd /usr/local/HotSaNIC
# vi settings
RUN="netstat ntp part sensors system worms"
SHOW="netstat ntp part sensors system worms"

各モジュールのセッティング

SENSORSとかは setup.plを全部「y」で実行したら不要な行がいっぱいでてきてしまいます.そういうときはまず,そのモジュールのsettingsファイルを削除して個々のsetup.plを実行してもう一度settingsファイルを作り直します.
# cd modules/sensors
# rm settings
# ./setup.pl
私の場合,CPU温度とFAN回転数で実際に数値が出てるものだけ有効にしました.
不要な項を削除したら次は作成された設定ファイルを少し眺めてみます.
# vi settings
SENSOR="/proc/sys/dev/sensors/pc87366-isa-0810/temp2,temp2,some temperature,4,1,0,ーC,0,70"
すると,参照するデバイス,グラフのタイトル,スケール,単位などが書かれているのがわかります.書式は以下.
SENSOR=<device-file>,<dbname>,<description>,<entry>,<scale-factor>,<add>,<unit>,<min>,<max>
私は,グラフタイトルとグラフ最大値を変更して以下のようにしました.
SENSOR="/proc/sys/dev/sensors/pc87366-isa-0810/temp2,temp2,CPU Temp,4,1,0,ーC,0,60"
もし,グラフは出力されるが水平線で全然変化が無いと言う場合は <entry>の項が間違っている可能性があります. そういうときはデバイスファイルを直接見て<entry>の値を変更します.
# cat /proc/sys/dev/sensors/pc87366-isa-0810/temp2
70 0 85 35
この場合,測定温度(この例では35度)が出ているのは4番目なので<entry>=4になります.
この要領で他のモジュールも変更すれば望みのグラフが出来上がるでしょう.
設定が終わったらrrdgraphを再起動します.
# /etc/init.d/rrdgraph restart
追加削除した場合は,15分たったら
# cd /usr/local/HotSaNIC
# ./makeindex.pl
# ./convert.pl
を実行しておきます.

補足: hddtempのグラフも作成

数字が得られる物であれば何でもグラフ化できるようです.サンプルとしてHDD温度を取得できるhddtempのグラフを作成する方法が示されていましたので載せておきます.
  1. インストール
    # apt-get install hddtemp
    設定はデフォルトで良いでしょう.
  2. modulessettingsファイルを変更
    # cd /usr/local/HotSaNIC
    # vi /modules/sensors/settings (以下の行を適当なところへ追加)
    SENSOR="/usr/sbin/hddtemp -n /dev/hda |",hda,HDD1,1,1,0,ーC,0,60
  3. rrdgraphの再起動とグラフhtmlを作成しなおす.
以上でグラフができました.

データの収集間隔を長めにする(10秒→30〜60秒間隔へ)

CPUの性能がそれほど良くないと,HotSaNICを動かしているだけでCPUパワーを常時数十パーセント消費してしまうかも知れない.我が家のサーバーはPentiumIII 700MHzなので全く問題はないのですが,ハードディスクが10秒毎にガリッと鳴るので気になってしょうがない.そこでデータ収集間隔を30秒程度に長くしてみましょう.これを行なうと,CPU使用率,ディスクやイーサネットのトラフィックなどの変化の早いものは全く当てにならなくなりますが,既にそれらの必要性は感じていないのでOKとします(笑).
その方法は,時間計測やそれに応じた指令を出すrrdtimer.plというスクリプトの中身を書き換えることです.
# vi /usr/local/HotSaNIC/rrdtimer.pl (200行目付近,30秒間隔にする例)
# sleep until system time's next full 10 seconds
#
#my $sleeptime=10-(time % 10);
my $sleeptime=30-(time % 30);
HotSaNIC-0.4系列とは若干記述が異なるようなので0.4系列を使用している人は注意して下さい. 書き換えたらrrdgraphを再起動して下さい.

グラフの曜日が文字化けするのを治す.

良く見るとグラフの曜日が文字化けしていました.これは漢字表記になっているからです.起動スクリプトを以下のように修正すれば良いようです.ただし,setup.plを実行して起動スクリプトを作り直してしまったらその都度修正しなおさなければいけません.(もっといい方法ないかな…)
# vi /etc/init.d/rrdgraph (先頭付近に以下の行を追加して下さい)
PERL_BADLANG=0
export PERL_BADLANG
LC_TIME="abday"
export LC_TIME
書き換えたらrrdgraphを再起動して下さい.