サーバの状態をグラフ化する。
書きながらやってたら詰まったので一部直してます(4/14)
サーバ監視の方法の一つに状態の遷移をグラフ化することがあります。そのためのツールとしてMRTGとRRDTOOLがあるんだけど、WEB+メール+実験目的の自宅サーバにはあらゆる面で上回ってる(と思ってる)PRDTOOLを使ってます。業務用サーバではMRTGが使われていて、特に困ってはいないけれどグラフの色気無さにがっかりしてるので、いつかは置き換える為の布石にすべく今からPRDTOOLにグラフを足す作業の記録を書くとします。
PRDTOOLは収集されたデータからグラフイメージを作成する機能しかありません。WEBで見るためのページや、収集スクリプトは自分で作らなきゃいけません。機能が分かれているのは良い事です。
インストール方法
データ収集+グラフ一覧ページの作成には便利なフロントエンドのcactiを使います。インストール方法は・・・随分前から使ってるので忘れました!確かRRDTOOLは「yum install rrdtool」で、cactiはtarを落としてWebServerのドキュメントディレクトリにそのまま突っ込んだ記憶があります。詳しくはこの辺を参考にしてね
404 Not Found
cacti - グラフツールcactiとは?
じつはかんたん!! RRDTOOL
設定作業
CPU使用量とネットワーク使用量は以前からグラフ化してて、今回はCPU温度とファン回転数のグラフを追加するのです。
データ収集用スクリプトの作成
SNMPは良くわからないので使用しません。そんな高級なプロトコルを使わなくても、フォーマットに従ったテキストデータを出せば良いだけなのでperlで作ります。cactiには作ったスクリプトを実行してくれる機能もついてます。
#!/usr/bin/perl $sensors = `ssh root\@192.168.24.15 sensors `; $cpu = `echo "$sensors" | grep "CPU Temp:"`; $sys = `echo "$sensors" | grep "Sys Temp:"`; $fan = `echo "$sensors" | grep "CPU Fan:"`; $cpu =~ /\d+/; print "cpu:$& "; $sys =~ /\d+/; print "sys:$& "; $fan =~ /\d+/; $fan = int($& / 30);
1行、改行無し、半角スペースで区切るフォーマットです。同じグラフに出す場合は桁数を揃えないと破綻するので、ファンのスピードは30で割ってます。他にもcactiのscriptsディレクトリにサンプルが置いてるので、それを参考に作れば良いと思います。あ、sensorsってのはLm_sensorsと言って、Linuxでハードウェアの情報を出力してくれるアプリです。
lm-sensors
うちの環境で実行すると、こんな感じで出力されます。
> ssh root@192.168.24.15 sensors 83627ehf-isa-0290 Adapter: ISA adapter VCore: +1.28 V (min = +0.00 V, max = +1.74 V) in1: +10.45 V (min = +5.81 V, max = +5.23 V) ALARM AVCC: +3.33 V (min = +3.86 V, max = +0.77 V) ALARM 3VCC: +3.33 V (min = +3.18 V, max = +0.38 V) ALARM in4: +1.83 V (min = +0.52 V, max = +0.93 V) ALARM in5: +1.84 V (min = +1.46 V, max = +0.03 V) ALARM in6: +5.89 V (min = +4.35 V, max = +6.40 V) VSB: +3.31 V (min = +2.05 V, max = +0.86 V) ALARM VBAT: +3.33 V (min = +1.07 V, max = +2.54 V) ALARM in9: +1.69 V (min = +1.81 V, max = +1.35 V) ALARM Case Fan: 0 RPM (min = 10546 RPM, div = 128) ALARM CPU Fan: 612 RPM (min = 84375 RPM, div = 16) ALARM Aux Fan: 0 RPM (min = 10546 RPM, div = 128) ALARM fan5: 0 RPM (min = 10546 RPM, div = 128) ALARM Sys Temp: +40°C (high = +104°C, hyst = +126°C) CPU Temp: +31.0°C (high = +120.0°C, hyst = +115.0°C) AUX Temp: +42.0°C (high = +80.0°C, hyst = +75.0°C)
これを上のスクリプトで拾ってるわけですね。何でsshで繋いでるのかと言うと、xenという仮想環境を使っていて、WebServerやRRDTOOLの動いているサーバはゲストOSなのです。ハードウェアの情報はホストOS上でしか取れないので、sshでホストOSに接続してます