印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux 温度変化を MRTG で表示する

Linux サーバのハードディスクの温度を MRTG でグラフ化する。ディレクトリ構成を少し工夫する。

■ ■ ■

MRTG (Multi Router Traffic Grapher) はネットワークのトラフィックをグラフ化するツールであが(MRTG.JP - MRTG Official Japanese site),トラフィック以外の表示にも使うことができる。Vine Linux サーバのハードディスクの温度が調べられるようになったので(nlog(n): ハードディスクの温度を計測),これをグラフ化する。

MRTG でグラフ化する項目が増えていくと,ファイルが山盛りに増えてしまい,何だか手におえない気分になってくる。実際は,重要なファイルは2つだけである。*.cfg で設定して,*.log に記録が残る。この他の画像ファイルや *.html ファイルは自動生成されるので,仮に消えてしまったとしても悲しくない。とはいっても,普段は見ない自動生成のファイルでも,増えすぎるとうんざりしてくる。そこで,私はグラフ化する対象毎にディレクトリを分けることにしている。

例えば,ハードディスクの温度監視用 MRTG データのディレクトリ構成は次のようになっている。tpt22 は自宅サーバのホスト名で,「-temp」は温度 (temperature) の意味で名づけている。

+ mrtg
  - tpt22-temp.cfg
  - tpt22-temp.ok
  + data
    + tpt22.temp
      - index-day.png
      - index-day.png.meta
      - index-month.png
      - index-month.png.meta
      - index-week.png
      - index-week.png.meta
      - index-year.png
      - index-year.png.meta
      - index.html
      - index.html.meta
      - index.log
      - index.old

mrtg ディレクトリには,設定用のコンフィグレーションファイル tpt22-temp.cfg が置かれている。他にトラフィック監視もしているので,そのコンフィグレーションファイルもこのディレクトリに置かれている。tpt22-temp.ok ファイルは MRTG が勝手に作る,大きさ 0 のファイルである。MRTG が上手く動作していることを示している。

mrtg ディレクトリには data ディレクトリがあり,data ディレクトリ内には,監視している対象のディレクトリが並ぶ。そのディレクトリ tpt22.temp 内に,ログファイルと画像ファイルが生成される。HTML ファイルの名前は index.html にしている。ディレクトリを分ける場合,index.html にしておくのが便利である。

このようにディレクトリを分けておくと,1つのディレクトリに「ドワーッ」と画像ファイルが並ばないので,気分的に楽な感じがする。

さて,このような構成にするためのコンフィグレーション tpt22-temp.cfg の内容は次のようになっている。

WorkDir: /home/httpd/html/mrtg/data
IconDir: /usr/local/mrtg-2/share/doc/mrtg2
Interval: 5
Refresh: 300
WriteExpires: Yes

Directory[index]: tpt22.temp
Options[index]: gauge, growright, nopercent, absolute, unknaszero
MaxBytes[index]: 65
Unscaled[index]: dwmy
WithPeak[index]: wmy
YLegend[index]: Celcius
Legend1[index]: Hard Disk Drive Temperature in Celcius Degrees
Legend2[index]: Hard Disk Drive Temperature in Celcius Degrees
Legend3[index]: Maximal 5 Minute Temperature
Legend4[index]: Maximal 5 Minute Temperature
LegendI[index]: Temp:
LegendO[index]: Temp:
ShortLegend[index]: C

Target[index]: `LANG=C /usr/sbin/hddtemp /dev/hda | gawk '{print $3}'; /usr/sbin/hddtemp /dev/hda | gawk '{print $3}'; uptime | gawk '{$1=""; $2=""; print}'; hostname`
Title[index]: Hard Disk Drive Temperature of Vine 3.1 Linux Server
PageTop[index]: <H1>Hard Disk Drive Temperature of Vine 3.1 Linux Server</H1>
 <TABLE>
   <TR><TD>System:</TD>     <TD>tpt22</TD></TR>
 </TABLE>

それぞれの項目の意味については,オンラインマニュアルで解説されている(MRTG 設定リファレンス)。Options に noo を追加すると,緑色の塗りつぶしだけになり,noi を追加すれば 青い線だけになる。どちらも指定しなければ,両方が表示される。noo と noi の意味は,それぞれ NO Input traffic graph,NO Output traffic graph である。unknaszero は「アンクナスゼロ」とつい読んでしまうが,UNKNown data AS ZERO の意味で,値が返ってこないときにグラフを0にする指定である。MaxBytes で最大値を 65 °C に設定し,Unscaled で dwmy (Daily, Weekley, Monthly, Yearly のグラフ)に対して,最大値がグラフの最高値になるように指定している。

Target で「index」を指定することで,index.html が生成されるようになる。画像ファイルの名前もプレフィックスが「index-」になる。この Target のところで,hddtemp を呼び出している。バッククォートを使うことで,外部コマンドの呼び出しができるのである。MRTG は,外部コマンドの出力が4行あることを期待する。

1行目: 1番目の監視対象の出力値
2行目: 2番目の監視対象の出力値
3行目: 監視対象の稼働時間を示す文字列
4行目: 監視対象の名前を示す文字列

もともと MRTG は,その名前の通りトラフィックを表示するためのものなので,監視対象が入力トラフィックと出力トラフィックの2つになっているのだ。デフォルトでは,1番目の監視対象は入力トラフィック,2番目は出力トラフィックのバイト数になる。3行目と4行目は,グラフを表示する HTML に,サイトのステータス情報として次のような形で表示される。

The statistics were last updated Sunday, 4 September 2005 at 11:45, at which time 'tpt22' had been up for 11 days, 4:36, 1 user, load average: 1.08, 0.37, 0.25.

3, 4 行目をスクリプトが出力しないと,監視対象のホスト名と稼働時間が次のように「unknown」になる。

The statistics were last updated Sunday, 4 September 2005 at 11:45, at which time 'unknown' had been up for unknown

外部コマンドとしては,上で示した4行を出力するようなシェルスクリプトを書くのが一般的だが,ファイルが増えるのがイヤンなので,無理やり直接書いている。このように書く前に,次のような感じで動作検証を行っておく。

$ export LANG=C
$ /usr/sbin/hddtemp /dev/hda
/dev/hda: IC25T048ATDA05-0: 57 C
$ /usr/sbin/hddtemp /dev/hda | gawk '{print $3}'
57
$ uptime
 10:22AM  up 11 days,  3:14,  1 user,  load average: 0.08, 0.22, 0.21
$ uptime | gawk '{$1=""; $2=""; print}'
  11 days, 3:15, 1 user, load average: 0.04, 0.20, 0.20
$ hostname
tpt22

あとはこれらを「;」でつなげるだけである。

$ /usr/sbin/hddtemp /dev/hda | gawk '{print $3}'; /usr/sbin/hddtemp /dev/hda | gawk '{print $3}'; uptime | gawk '{$1=""; $2=""; print}'; hostname
57
57
  11 days, 3:23, 1 user, load average: 0.36, 0.31, 0.24
tpt22

Target の指定では,言語の設定を「LANG=C」として最初に1つだけ書けば,後ろにつづくコマンドにもこの言語設定が有効となるが,bash のコマンドプロンプトでやる場合は「export LANG=C」としてエクスポートしなければならない。「;」で区切られたコマンドはそれぞれ終了時にシェルにリターンするため,前の環境を引き継がないからである。

200509/MRTG-hddtemp.gif
200509/MRTG-hddtemp.gif


午前4時に温度が上がっているのは,cron によるジョブが動くからである。現在の温度 57 °C。温度が高いとハードディスクの寿命が気になるなぁ…。

最近はグラフ表示に MRTG を使うのではなく,RRDTool と HotSaNIC を使うのがトレンドのようだ (yujilog » RRDToolとHotSaNICでハードディスク温度を計測)。カッコイイかも。

追記:
これを書いた後で,Fedora Core 4 での例を見つけてしまった(@IT:MRTGでハードディスクの温度変化をグラフ化するには)。簡潔に解説されている。さすがプロ。

2006年9月2日追記:
Windows マシンの温度も Linux で取得できました(nlog(n): Windows XP マシンの温度を SNMP 経由で監視)。

Posted by n at 2005-09-04 12:07 | Edit | Comments (2) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments

http://smartmontools.sourceforge.net/
これを使ってもHDDの温度がとれますよ。
HDDの状態を示すS.M.A.R.Tというので、
そのほかの情報もとれますし。
Vine Linux は apt できるので、いかがで
しょうか?
あと、ノートPCをお使いでしたら、外付け
のファンがあるので、載せておくといいか
も。

Posted by: tetsu at September 04, 2005 17:11

情報ありがとうございました。便利そうですね。
ノートPC用の外付けファンを購入したのですが,ファンの音が大きいので止めてしまいました(安かったから? 3000円くらいしたのに…)。

Posted by: n at September 04, 2005 23:30
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?