07 April 2007

Windows上のMRTGでサーバ監視

Windows SNMP エージェントのインストール

コントロールパネルのプログラムの追加と削除より、「Windowsコンポーネントの追加と削除」でSNTPサービスをインストールする。

20070408-instsnmp01.png
Windows XP の場合

20070408-instsnmp03.png
Windows Vista の場合

サービスを自動起動させるよう設定する

20070408-instsnmp02.png

Windows Vistaの場合は、サービス名を右クリックしてプロパティを表示し、コミュニティ名を設定する必要性がある。(通常、コミュニティ名はpublicとする)

20070408-instsnmp04.png

Windows標準のSNMPエージェントで得られるのは MIB-2, RFC1514など。ハードウエアの状態などは得られない。

システム関連 のSNMPエージェント拡張

CPUの負荷状態やメモリーの利用状況、ハードディスクの容量などを得るためのSNMPエージェント拡張機能をインストールする。

Windows NT系に対応したフリーのもので、よく使われているものは次の2つくらいか

SNMP Informant Standard (http://www.snmp-informant.com/)
SNMP4W2K Standard (http://www.snmp4tpc.com/snmp4w2k.htm)
どちらか一つを入れればよい。

CPU温度などをSNMP経由で得たい場合は

MBM (Motherboard Monitor) 用の拡張
SNMP Informant-MBM (http://www.wtcs.org/informant/products.htm)
MBMは2004年に開発と配布が終了しているらしい

SpeedFan 用の拡張
SpeedFan SNMP Extension (http://code.bastart.eu.org/projects/sfsnmp/)
MIBが配布されていないので、OIDを直接叩く以外に無い。
CPU温度などの温度センサーは次のOIDに割り付けられている。
.1.3.6.1.4.1.16.0.1.x  (x=0,1,2...)

Perlのインストール

Active Perl (http://aspn.activestate.com/ASPN/Downloads/ActivePerl/)

MRTGのインストール

MRTGの入手と日本語ドキュメント (http://www.mrtg.jp/doc/)

Windows用zipファイルをダウンロードして、C:\Program Filesに解凍する。

mrtg.cfgを自分で作成しない場合は、自マシンのNIC情報のみを付加したmrtg.cfgを自動生成させることも出来る。
※ MRTGのログデータを格納するフォルダ名には、空白が入ってはいけないようだ。

cfgmaker による mrtg.cfg 自動作成方法

c:\Program Files\mrtg-2.15.0\bin>perl cfgmaker public@localhost --global "WorkDir: c:\mrtg" --output mrtg.cfg
--base: Get Device Info on public@localhost:
--base: Vendor Id:
--base: Populating confcache
--coca: populate confcache public@localhost:
--coca: store in confcache public@localhost_ Descr MS TCP Loopback interface --> 1
--coca: store in confcache public@localhost_ Descr Marvell Yukon 88E8053 PCI-E G
igabit Ethernet Controller #2 --> 65539
--coca: store in confcache public@localhost_ Type 24 --> 1
--coca: store in confcache public@localhost_ Type 6 --> 65539
--coca: store in confcache public@localhost_ Ip 127.0.0.1 --> 1
--coca: store in confcache public@localhost_ Ip 192.168.1.10 --> 65539
--coca: store in confcache public@localhost_ Eth --> 1
--coca: store in confcache public@localhost_ Eth 00-01-80-61-00-00 --> 65539
--base: Get Interface Info
--base: Walking ifIndex
--base: Walking ifType
--base: Walking ifAdminStatus
--base: Walking ifOperStatus
--base: Walking ifMtu
--base: Walking ifSpeed
--base: Writing mrtg.cfg

自動作成で出来るファイルは次のようなものなので、これと同じ書式にしたがって自分でmrtg.cfgを作ってもよい

c:\Program Files\mrtg-2.15.0\bin\mrtg.cfg

# Created by
# cfgmaker public@localhost --global "WorkDir: h:\mrtg" --output mrtg.cfg

### Global Config Options

# for UNIX
# WorkDir: /home/http/mrtg

# or for NT
WorkDir: c:\mrtg

### Global Defaults

# to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits

EnableIPv6: no

Target[localhost_65539]: 65539:public@localhost:
SetEnv[localhost_65539]: MRTG_INT_IP="192.168.1.10" MRTG_INT_DESCR="Marvell-Yukon-88E8053-PCI-E-Gigabit-Ethernet-Controller-#2"
MaxBytes[localhost_65539]: 12500000
Title[localhost_65539]: Network Interface
PageTop[localhost_65539]: Network Interface

MRTGの実行

MRTG本体のあるフォルダで実行する。


c:\Program Files\mrtg-2.15.0\bin>perl mrtg mrtg.cfg

5分おきにグラフをアップデートするように設定

Windows 版 cron サービスをインストールする。

Cron NT service (http://www.kalab.com/freeware/cron/cron.htm)

インストーラがインストール先のフォルダ名を聞いてくるので、(たとえば)c:\Windows\system32 にインストールする。
アンインストール用のショートカットなどは「全く」作成されない。インストールしたフォルダでcmd.exeを開き crons.exe /? と実行すれば取り得るオプションが表示される。

Linuxと同じく、1分おきにcrontabを確認しに来るので、crons.exeがあるフォルダに crontab ファイルを作成する。

c:\Windows\system32\crontab

0,5,10,15,20,25,30,35,40,45,50,55 * * * * cron-mrtg-run.cmd

※ */5 のような記述はシンタックスエラーになる。完全にLinux互換とはいかない様だ…

なお、実行するコマンドは次のようなスクリプトファイルにまとめている。

c:\Windows\system32\crontab

cd c:\Program Files\mrtg-2.15.0\bin
perl mrtg mrtg.cfg

MIBブラウザ

Windowsには snmpwalk コマンド等の SNMP を扱うプログラムが標準では提供されていない。
GUIでMIBのOIDツリーを眺められる次のようなツールを使う。

GetIf SNMP MIB Browser (http://www.wtcs.org/informant/free_snmp_tools.htm)

インストールしたら、GetIfのフォルダ内に「mibs」というサブフォルダが作成される。ここに、SNMP Informant や SNMP4W2K のインストールフォルダから MIBツリーの定義ファイルをコピーする。
※ コピーしない場合は、何のキーワードも表示されないだけで、データ自体は参照できる。

20070408-mib01.png

Host Name に、ターゲットのアドレスを入力 (自マシンの場合は localhost) して Enter キーを押す

20070408-mib02.png

MBrowser タブに移り、OIDツリーをたどって必要な項目を表示(①)させて enter キーを押す。
SNMP経由でレスポンスが返ってきたら、必要な項目をクリック(②)して、 enter キーを押す。
そうすると、OIDの識別値が ③ に表示される。

OIDを直接指定してSNMPエージェントから値を得るだけなら、マイクロソフト純正のツールがある。
SnmpUtilG というソフトが、Windows 2000 Resource Kit や Windows XP Support Tool として配布されている。

mrtg.cfg のカスタマイズ

ここで説明している mrtg.cfg をダウンロードする

たとえば、CPU負荷のグラフを描かせたい場合は、次のような設定を追加する。

c:\Program Files\mrtg-2.15.0\bin\mrtg.cfg

# SNMP4W2Kを用いる場合
Target[cpuload]: 1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1.48&1.3.6.1.4.1.311.1.1.3.1.1.2.1.4.1.48:public@localhost:
MaxBytes[cpuload]: 100
Title[cpuload]: CPU Load Log (MRTG)
PageTop[cpuload]: CPU Load Log
Options[cpuload]: growright,absolute,gauge,nopercent,unknaszero,integer
WithPeak[cpuload]: ymw
Unscaled[cpuload]: dwmy
YLegend[cpuload]: CPU Load
ShortLegend[cpuload]: %
LegendI[cpuload]: System
LegendO[cpuload]: User
Legend1[cpuload]: System
Legend2[cpuload]: User

20070408-cpu.png

SpeedFanで温度変化のグラフを描かせたい場合は、次のような設定を追加する。 (sf2mrtgの設定ファイルのサンプルはここからダウンロード)

c:\Program Files\mrtg-2.15.0\bin\mrtg.cfg

# sf2mrtg を用いる場合
Target[temp]: `C:\Program Files\SpeedFan\sf2mrtg\sf2mrtg.exe`
# SpeedFan SNMP Extension を用いる場合
#Target[temp]: 1.3.6.1.4.1.16.0.1.0&1.3.6.1.4.1.16.0.1.1:public@localhost:
MaxBytes[temp]: 60
Title[temp]: System Temperature Log (MRTG/SpeedFan)
PageTop[temp]: System Temperature Log
Options[temp]: growright,absolute,gauge,nopercent,unknaszero,integer
WithPeak[temp]: ymw
Unscaled[temp]: dwmy
YLegend[temp]: Temperature
ShortLegend[temp]: deg-C
LegendI[temp]: System Temp
LegendO[temp]: CPU Temp
Legend1[temp]: System Temp
Legend2[temp]: CPU Temp

20070408-temp.png

MRTG の cfgmaker で作成されたネットワークの負荷を監視するグラフは次のようになる。

c:\Program Files\mrtg-2.15.0\bin\mrtg.cfg

Target[network]: 65539:public@localhost:
SetEnv[network]: MRTG_INT_IP="192.168.1.111" MRTG_INT_DESCR="Marvell-Yukon-88E8053-PCI-E-Gigabit-Ethernet-Controller"
MaxBytes[network]: 62500
Title[network]: Network Interface Log (MRTG)
PageTop[network]: Network Interface
Options[network]: growright,nopercent,unknaszero,bits

20070408-net.png

フリーのLinuxでは簡単に出来て、Windowsは有料ソフトなのに結構手間がかかりますね。
大して技術力もないのに濡れ手に粟のような商売をしている日本のITベンチャー企業にとっては、「何でも金を取れる」ビジネスチャンスのソフトなのかもしれませんが… > Windows

見た目や素人向けのセキュリティ(の雰囲気)を全面に出した Vista より、もっとSEに喜ばれる(?)製品構成にしましょうよ > M$さん