MRTGによるサーバ監視(Windows2K/XP編)


MRTG は、サーバやルータ等のトラヒック情報などをグラフで表示するツールです。Windows2000 については以前から確認が済んでいましたが、新たにWindowsXP もサポートしているツール ( Windows2003 もサポートしているようですが、おやじは所有していないので未確認)が見つかったので、テストしてみました。集計したのは、トラヒック、CPU 使用率、メモリ量、ハードディスクの空き容量、NTT-ME MN8300W のNAT テーブル数です。更に、Motherbord Monitor 5 が動作するマザーボードなら、MBM5で表示できるデータ ( CPUやCaseの温度、CPUやCase FANの回転数、各種電源電圧等 )も監視できます。(旧Windows2000専用版はこちら)
なお、SNMP や MRTG に関しては、SNMPによるネットワークモニタリングで詳しく解説されているので、こちらを参考すればよいでしょう。

■必要なソフトやモジュール

ここでは、サーバ機にいろいろインストールして、サ−バ機自身を監視します。もちろん他のPCから監視も可能です。定期的なmrtgの起動は、Windows版Cronを使用しました。
必要なソフトは下記のとおりです。
  1. 下記から、ソフトを入手します。

    ● MRTG

         Zipファイルをダウンロード。おやじが試験したのは、mrtg-2.10.15.zip。

       http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/

    ● httpd

         おやじはApache。おやじが試験したのは、Apache_2.0.52-Openssl_0.9.7d-Win32.zip。

       ・通常版   :http://www.apache.org/dist/httpd/binaries/win32/
       ・SSL対応版:http://hunter.campbus.com/

    ● ActivePerl

         Windows用のMSIをダウンロード。おやじが試験したのは、ActivePerl-5.8.4.810-MSWin32-x86.msi。

       http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl

    ● CPU、メモリ、ハードディスクの空き容量を監視するための拡張ツール

       Downloadのページから、ダウンロードファイルを指定してダウンロードする。SNMP Informant-STD v1.3 (informant-std-13.zip :拡張ツール)とSNMP Informant-MBM v1.0 (informant-mbm-10.zip :MBM5用拡張ツール)をダウンロード。

       http://www.snmp-informant.com/

    ● MotherBoard Monitor 5

       Windows用マザーボードモニタソフト。マザーボードによっては使用できないので、下記URLの左側にあるMotherBoard Listで使用できるか確認する。MotherBoard Monitor本体とLanguege packをダウンロード。おやじが試験したのは、mbm5370.exeとMBM5370Language.exe。

       http://mbm.livewiredev.com/

    ● Cron

         Windows版Cron。NTサービス用をダウンロード。

       http://www.kalab.com/freeware/cron/cron.htm


  2. SNMP のインストール

    先ずは、SNMP のインストールです。Windows2000/XP の CD を用意し、コントロールパネルの「アプリケーションの追加と削除」から「Windowsコンポーネントの追加と削除」を選択し、「管理とモニタツール」にチェックを入れ、簡易ネットワーク管理プロトコル(SNMP)をインストールする。
    コントロールパネルの「管理ツール」内の「サービス」から、「SNMP Service」が「状態:開始」、「スタートアップの種類:自動」となっていることを確認する。なっていなければプロパティから設定を変更し、サービスを有効にする。

  3. httpd、Active.perl  のインストールと設定

    Windows 版のApache+ActivePerlの設定Apache+SSLの設定を参照してください。

  4. MRTG のインストール

    ダウンロードした mrtg-2.10.15.zip をシステムディレクトリに解凍し、フォルダ名 mrtg-2.10.15 を mrtg に変更する。おやじは、C:\以下に解凍し、C:\mrtgとした。(以後はこれを前提に説明する。)

  5. Cron のインストールと設定

     ダウンロードした crons.zip を適当なところ(日本語フォルダ内に解凍するとntsetup.exe 実行時にエラーが出て実効できないとの情報を頂きましたので注意してください。基本的に日本語フォルダやファイル名は使用しないほうが余計なトラブルを回避できます。)で解凍します。解凍すると、ntsetup.exe ができるので実行します。インストールパスを聞いてくるので、そのまま実行すれば ntsetup.exe のあったところに crons.exe がインストールされます。おやじは、system32 フォルダにインストールしました。管理ツールのサービスを確認すると、CRON サービスがインストールされていると思います。

  6. MotherBoard Monitor 5 インストールと設定

    MotherBoard Monitor 5が使用できるマザーボードを使用されている方で、CPU温度等の管理をする場合のみ、インストールする。動かしてみれば設定も簡単なので説明は省略するが、「MBM5」でググレばいろいろあるので、そちらを参考にインストールと設定を行う。なお、最新版では、インストールの中で対応するマザーの情報を入手して、自動でセンサーを設定できる機能があるので、それを利用すると設定が楽である。

  7. SNMP Informant のインストール

    先ずは、SNMP Informant をインストールする。ダウンロードした informant-std-13.zip を解凍して、できあがった informant-std-13.exe を実行してインストールする。デフォルトのままインストールすれば、README.TXT が表示されるので、目を通しておく。
    続けて、CPUの温度管理等を行うなら、ダウンロードした informant-mbm-10.zip を解凍して、できあがった informant-mbm-10.exe を実行してインストールする。デフォルトのままインストールすれば、README.TXT が表示されるので、目を通しておく。

■MRTGの設定と起動

MRTG を動かすには、以下の手順で必要な設定と確認をしていきます。

  1. MRTG の設定ファイルの作成

    まずは、MRTG が作成する html ファイルを置くディレクトリを決め、ディレクトリを作成するとともに MRTG のアイコンをコピーしておく。ここでは、ディレクトりを C:\Apache2/htdocs/mrtg とした。コマンドプロンプトで、以下のようにディレクトリを作成し MRTG のアイコンをコピーする。

    C:\>mkdir C:\Apache2/htdocs/mrtg
    C:\>copy C:\mrtg\images\*.png C:\Apache2/htdocs/mrtg


    続いて、コマンドプロンプトで、以下のようにしてベースとなる設定ファイル ( mrtg.cfg )を作成する。mrtg.cfg は、C:\mrtg\bin 配下に作成される。cfgmaker のパラメータの意味等はインストールした mrtg 内の doc 内にあるのでそちらで確認してください。コミュニティ名は、Windows2000/XPのデフォルトが「public」になっているのでそのままにした。コミュニティ名は、コンパネのサービスでSNMPのプロパティで追加・変更もできる。

    C:\>cd C:\mrtg\bin
    C:\mrtg\bin>perl cfgmaker public@localhost --global "WorkDir: C:\apache2\htdocs\mrtg" --output mrtg.cfg


  2. MRTG の動作確認

    mrtg が問題なく動作するか、ここでとりあえず確認します。コマンドプロンプトで、以下のように入力しします。

    C:\mrtg\bin>perl mrtg  mrtg.cfg


    これで、先に指定したディレクトリにhtmlファイルが作成されいるはずですので、開いて内容を確認してください。一回しか動作させていないので、数値も0ですが、グラフや MRTG のアイコンが正常に表示されていることを確認してください。数分置きに3回起動すれば、数字も表示されるはずです。しかしこのままでは、余計なものが表示されるのと、html ファイル名が扱いづらいと思いますので、mrtg.cfg ファイルを編集して見やすくしていきます。

  3. 設定ファイル(mrtg.cfg)の編集

    cfgmaker でこちらのようなmrtg.cfgファイルが作成されますので、これをベースに修正していきます。但し、ここで作成できるのはトラヒックの設定ファイルだけです。CPU使用率等は、別途、作成が必要です。コメント部分を除いて設定を変更した内容を示します。は変更、は追加、は削除したものです。

    Target[localhost_16777219]: 16777219:public@localhost:
    SetEnv[localhost_16777219]: MRTG_INT_IP="192.168.1.100" MRTG_INT_DESCR="Intel 8255x-based Integrated Fast Ethernet"
    MaxBytes[localhost_16777219]: 1250000
    Title[localhost_16777219]: Traffic Analysis for 16777219 -- OYAJI
    PageTop[localhost_16777219]: <H1>Traffic Analysis for 16777219 -- OYAJI</H1>
    <TABLE>
    <TR><TD>System:</TD> <TD>OYAJI in </TD></TR>
    <TR><TD>Maintainer:</TD> <TD></TD></TR>
    <TR><TD>Description:</TD><TD>Intel 8255x-based Integrated Fast Ethernet  </TD></TR>
    <TR><TD>ifType:</TD> <TD>ethernetCsmacd (6)</TD></TR>
    <TR><TD>ifName:</TD> <TD></TD></TR>
    <TR><TD>Max Speed:</TD> <TD>1250.0 kBytes/s</TD></TR>
    <TR><TD>Ip:</TD> <TD>192.168.1.100 (oyaji.aconus.com)</TD></TR>
    </TABLE>

    Workdir: C:\Apache2\htdocs\mrtg

                 ↓追加、変更、削除

    # ブラウザのリフレッシュ間隔(5分:ブラウザで表示したままにしておくと指定間隔でリフレッシュされる)
    Refresh: 300

    # デフォルトではヨーロッパ言語になり文字化けするので日本語表示を指定
    Language: eucjp

    # [ ]内の名称でhtmlファイルが作成される。関連項目は全て同一名称で設定(以下同様)
    # Targetで統計データの対象を指定
    Target[traffic]: 16777219:public@localhost:

    # 余計なものは表示しない。
    #SetEnv[localhost_16777219]: MRTG_INT_IP="192.168.1.100" MRTG_INT_DESCR="Intel 8255x-based Integrated Fast Ethernet"

    # データがとりうる最大値を指定。(100BASE-TXの最大値。100,000,000bps/8=12,500,000Byte)
    MaxBytes[traffic]: 12500000

    # グラフの左が過去(growright)になるようにし、デバイス名等の情報を出力しない(noinfo)ように設定。
    Options[traffic]: growright, noinfo

    # Titleはhtmlのtitle、PageTopはページのヘッドタイトルになる。
    Title[traffic]: Traffic Analysis
    PageTop[traffic]: <H1>Traffic Analysis</H1>

    # 余計なものは表示しない。
    # <TABLE>
    # <TR><TD>System:</TD> <TD>OYAJI in </TD></TR>
    # <TR><TD>Maintainer:</TD> <TD></TD></TR>
    # <TR><TD>Description:</TD><TD>Intel 8255x-based Integrated Fast Ethernet </TD></TR>
    # <TR><TD>ifType:</TD> <TD>ethernetCsmacd (6)</TD></TR>
    # <TR><TD>ifName:</TD> <TD></TD></TR>
    # <TR><TD>Max Speed:</TD> <TD>1250.0 kBytes/s</TD></TR>
    # <TR><TD>Ip:</TD> <TD>192.168.1.100 (oyaji.aconus.com)</TD></TR>
    # </TABLE>

    Workdir: C:\Apache2\htdocs\mrtg


  4. 変更後の動作確認

     変更後、期待したとおり表示が変わっているか、2項と同様に起動します。

    C:\mrtg\bin>perl mrtg  mrtg.cfg


  5. その他の情報取得のための追加設定

     cfgmaker では、トラヒックを表示する設定しかできません。追加で CPU 使用率と空きメモリ、ハードディスクの空き容量をとることにしました。
     それぞれ、cfg ファイルを作成し別々に起動することもできますが、分ける理由もないので mrtg.cfg に各項目毎に Target 以下を追加記述する方法で作成しました。
     OIDについては、SNMP Informant をインストールしたディレクトリ内のmibsディレクトリにある informant-xxx(std/mbm)-tree.txt を参照してください。


    ●CPU使用率の測定

      MRTG では、2系統のグラフを出力できる(2系統でしかできないので1系統しか必要ない場合は、同じOIDを指定する等の対策要)ので、システムとユーザ(アプリ)のそれぞれの CPU 使用率をグラフ化するよう、Target で指定した。 (本設定をコピペして利用する場合は、行の後ろのコメントは必ず消すこと) 

    ### CPU Load Average ###
    Target[cpu]: .1.3.6.1.4.1.9600.1.1.5.1.5.1.48&.1.3.6.1.4.1.9600.1.1.5.1.6.1.48:public@localhost:
    MaxBytes[cpu]: 100                   #データの最大値(100%)
    Unscaled[cpu]: dwmy                  #データに合わせて拡大縮小しない(100%まで縦軸を表示)
    Options[cpu]: gauge, absolute, growright, noinfo, nopercent
                                         #gauge:データの値の差をとらない(取得情報は既に平均値)
                                         #absolute:gauge同様データの値の差をとらず、計測時間間隔で割った値
                                         #growright:グラフの横軸(時間)を左が過去になるよう指定
                                         #noinfo:HTMLの先頭にデバイス名等を表示しない
                                         #nopercent:パーセント表示しない(取得情報は既に%値)
    YLegend[cpu]: CPU Load (%)           #Y軸の軸の名前(ラベル)を指定
    ShortLegend[cpu]: %                  #Y軸の軸の単位(ラベル)を指定
    Legend1[cpu]: Privileged (system) CPU use in percent
                                         #OID1(受信側)のグラフ名(ラベル)を指定
    Legend2[cpu]: User (application) CPU use in percent
                                         #OID2(送信側)のグラフ名(ラベル)を指定
    LegendI[cpu]: PrivCPU:&nbsp;         #OID1(受信側)のラベルを指定
    LegendO[cpu]: UserCPU:&nbsp;         #OID2(送信側)のラベルを指定
    Title[cpu]: CPU Load Average (Privileged & User)
                                         #HTMLのタイトル
    PageTop[cpu]: <H1>CPU Load Average (Privileged & User)</H1>
                                         #HTMLのページ上部に表示される内容


    ●空きメモリの測定

      ここでは、空きメモリとコミットチャージ(システムおよびプログラムに割り当てられているメモリ)を表示することにした。MaxBytes1/2にそれぞれのメモリの最大値を設定するが、タスクマネージャのパフォーマンスから物理メモリの合計とコミットチャージの制限値を調査し設定する。(タスクマネージャの値はKByteなので、000を追加して設定すること。)

    ### Memory Free ###
    Target[mem]: .1.3.6.1.4.1.9600.1.1.2.1.0&.1.3.6.1.4.1.9600.1.1.2.4.0:public@localhost:
    MaxBytes1[mem]: 327152000              #ODI1データの最大値(空きメモリ)  
    MaxBytes2[mem]: 794844000              #ODI2データの最大値(コミットチャージ)  
    Unscaled[mem]: dwmy                    #データに合わせて拡大縮小しない  
    Options[mem]: gauge, absolute, growright, noinfo
                                           #gauge:データの値の差をとらない(容量のためそのまま利用)
                                           #absolute:gauge同様データの値の差をとらず、計測時間間隔で割った値
                                           #growright:グラフの横軸(時間)を左が過去になるよう指定
                                           #noinfo:HTMLの先頭にデバイス名等を表示しない
    YLegend[mem]: Bytes                    #Y軸の軸の名前(ラベル)を指定 
    ShortLegend[mem]: Bytes                #Y軸の軸の単位(ラベル)を指定  
    Legend1[mem]: Available Memory (Bytes) #OID1(受信側)のグラフ名(ラベル)を指定
    Legend2[mem]: Committed Memory (Bytes) #OID2(送信側)のグラフ名(ラベル)を指定  
    LegendI[mem]: Avail&nbsp&nbsp&nbsp:&nbsp; #OID1(受信側)のラベルを指定  
    LegendO[mem]: Commit:&nbsp;            #OID2(送信側)のラベルを指定 
    Title[mem]: Memory: Available vs Committed Byes
                                           #HTMLのタイトル
    PageTop[mem]: <H1>Memory: Free Bytes vs. Committed Bytes</H1>
                                           #HTMLのページ上部に表示される内容


    ●ハードディスクの空き容量の測定

      ハードディスクの空き容量については、論理ディスクで情報が取得できる。ここでは、システムディスクの C: を監視する例をあげたが、それ以外のディスクを監視したい場合は、Target行のOIDを下記により変更すれば同様に監視できる。

     
      と書いたが、実はWindows2000では、このデータはこのままでは取得できない。Readme.txt にあるように、若干のおまじないが必要である。手順を下記に示すが、手順どおり実施しないとうまくいかないことが多いので注意のこと。(特にコマンドプロンプト画面を閉じてからの再起動等)

    1. コマンドプロンプトを開き、「diskperf -y」と入力し、コマンドプロンプトを閉じてシステムを再起動する。
    2. この状態で、一度4項で動作確認してみる。正常に動作しない場合は、下記を行う。
    3. コマンドプロンプトを開き、「diskperf -n」と入力して一度カウンタをリセットし、コマンドプロンプトを閉じてシステムを再起動する。
    4. コマンドプロンプトを開き、再度「diskperf -y」と入力しカウンタを起動し、コマンドプロンプトを閉じてシステムを再起動する。
    5. この状態で、再度4項で動作確認してみる。ここで、大体うまく取得できるはずだが、それでも正常に動作しない場合は、下記を行う。
    6. 一旦、SNMP Informantをアンインストールし、そのまま再起動せずにもう一度SNMP Informantをインストールする。
    7. この状態で、4項で動作確認してみる。これで、正常に動作するはずで、これでうまくデータが取得できない場合、上記を再トライしてみる。これで、駄目な場合はあきらめるしかない。


    ### DISK Free on C: ###
    Target[hddc]: .1.3.6.1.4.1.9600.1.1.1.1.5.2.67.58&.1.3.6.1.4.1.9600.1.1.1.1.5.2.67.58:public@localhost:
    MaxBytes[hddc]: 100                    #データの最大値(100%)
    Unscaled[hddc]: dwmy                   #データに合わせて拡大縮小しない
    Options[hddc]: gauge, absolute, growright, noinfo, nopercent
                                           #gauge:データの値の差をとらない
                                           #absolute:gauge同様データの値の差をとらず、計測時間間隔で割った値
                                           #growright:グラフの横軸(時間)を左が過去になるよう指定
                                           #noinfo:HTMLの先頭にデバイス名等を表示しない
                                           #nopercent:パーセント表示しない
    YLegend[hddc]: Free space (%)          #Y軸の軸の名前(ラベル)を指定
    ShortLegend[hddc] : %                  #Y軸の軸の単位(ラベル)を指定
    Legend1[hddc]: Disk Space Available
                                           #OID1(受信側)のグラフ名(ラベル)を指定
    Legend2[hddc]:                         #OID2(送信側)のグラフ名(ラベル)を指定(未指定)
    LegendI[hddc]: Free:&nbsp;             #OID1(受信側)のラベルを指定
    LegendO[hddc]:                         #OID2(送信側)のラベルを指定(未指定)
    Title[hddc]: DISK Free on C:           #HTMLのタイトル
    PageTop[hddc]: <H1>DISK Free on C</H1>
                                           #HTMLのページ上部に表示される内容


    ●ルータ(MN8300W)のNAPTセッション数の測定

    おやじが使用しているルータ( MN8300W ) には snmp は実装されていないので、 NAPT セッション数を測定する perl スクリプトを作成し、 mrtg からの要求に対してルータからデータを読み取って返送するようにした。このルータはこれぐらいしか採るデータがないが、他に採れるならスクリプトを改造すればかなりのことはできるはずである。
    おやじが作成したスクリプトはこちらのようなものである。Disk と同様にデータがひとつしかないが、MRTG では2系統表示が必須なので同じ物を設定した。なお。こちらのスクリプトはEUC_JPでないと動作しないので注意が必要である。

    #### NAPT Sessions ###
    #  --- Target に mn8300_napt.cgi のあるパスを指定
    #                   バックティック (`) は必要
    Target[napt]: `perl /usr/local/bin/mn8300/mn8300_napt.cgi`
    #      --- MaxBytes を各自の場合にあわせて下さい
    MaxBytes[napt]: 4096                    #データの最大値(最大セッション数)
    Options[napt]:  gauge, growright, absolute, integer, nopercent, noinfo
                                            #gauge:データの値の差をとらない(取得情報は既に平均値)
    #growright:グラフの横軸(時間)を左が過去になるよう指定
    #absolute:gauge同様データの値の差をとらず、計測時間間隔で割った値 #integer:値を整数化
    #noinfo:HTMLの先頭にデバイス名等を表示しない
    #nopercent:パーセント表示しない(取得情報は既に%値)
    #Unscaled[napt]: dwmy #最大値に対して値が小さいのでデータに合わせて拡大縮小 YLegend[napt]: Sessions #Y軸の軸の名前(ラベル)を指定 ShortLegend[napt]: Ses. #Y軸の軸の単位(ラベル)を指定 LegendI[napt]: NAPT&nbsp; #OID1(受信側)のラベルを指定 LegendO[napt]: NAPT&nbsp; #OID2(送信側)のラベルを指定 Title[napt]: NAPT Sessions #HTMLのタイトル PageTop[napt]: <H1>MN8300 NAPT Sessions</H1> #HTMLのページ上部に表示される内容


    ●MatherBoard Monitor 5 での測定

      MatherBoard Monitor 5 で取得しているデータを informant-mbm をインストールすることにより、測定できる。データとOIDの対応を以下に示すので、必要なものを指定して設定を追加すればよい。下表は、センサ名とOIDは一致しており、データ名はマザーボード毎(MBM5の設定)に依存するので、自分の環境に合わせて設定する。


    No. カテゴリ センサ名 データ名 OID
    1 温度 Sensor 1 Case温度 .1.3.6.1.4.1.9600.1.10.6.1.5.1
    2 Sensor 2 CPU温度 .1.3.6.1.4.1.9600.1.10.6.1.5.2
    3 電圧 Voltage 1 Core 0 .1.3.6.1.4.1.9600.1.10.6.1.5.33
    4 Voltage 2 Core 1 .1.3.6.1.4.1.9600.1.10.6.1.5.34
    5 Voltage 3 +3.3V .1.3.6.1.4.1.9600.1.10.6.1.5.35
    6 Voltage 4 +5.0V .1.3.6.1.4.1.9600.1.10.6.1.5.36
    7 Voltage 5 +12.0V .1.3.6.1.4.1.9600.1.10.6.1.5.37
    8 ファン Fan 1 CPU .1.3.6.1.4.1.9600.1.10.6.1.5.49
    9 Fan 2 Case F .1.3.6.1.4.1.9600.1.10.6.1.5.50
    10 Fan 3 Case R .1.3.6.1.4.1.9600.1.10.6.1.5.51


    ここでは、温度監視をする例を示す。

    ### CPU & CASE Temperatures ###
    Target[temp]: .1.3.6.1.4.1.9600.1.10.6.1.5.1&.1.3.6.1.4.1.9600.1.10.6.1.5.2:public@localhost:
    MaxBytes1[temp]: 80                    #データの最大値(80℃)
    MaxBytes2[temp]: 80                    #データの最大値(80℃)
    Unscaled[temp]: dwmy                   #データに合わせて拡大縮小しない
    Options[temp]: gauge, absolute, growright, noinfo, nopercent
                                           #gauge:データの値の差をとらない
                                           #absolute:gauge同様データの値の差をとらず、計測時間間隔で割った値
                                           #growright:グラフの横軸(時間)を左が過去になるよう指定
                                           #noinfo:HTMLの先頭にデバイス名等を表示しない
                                           #nopercent:パーセント表示しない
    YLegend[temp]: Temperatures            #Y軸の軸の名前(ラベル)を指定
    ShortLegend[temp]: deg                 #Y軸の軸の単位(ラベル)を指定
    Legend1[temp]: CASE Temperature (deg)
                                           #OID1(受信側)のグラフ名(ラベル)を指定
    Legend2[temp]: CPU&nbsp; Temperature (deg)
                                           #OID2(送信側)のグラフ名(ラベル)を指定
    LegendI[temp]: CASE:                  #OID1(受信側)のラベルを指定
    LegendO[temp]: CPU&nbsp;:              #OID2(送信側)のラベルを指定
    Title[temp]: CPU & CASE Temperatures   #HTMLのタイトル
    PageTop[temp]: <H1>CPU & CASE Temperatures</H1>
                                           #HTMLのページ上部に表示される内容


  6. 自動起動の設定

     上記で設定が完了したら、4項と同じ方法でしばらく動かし、予定どおりの表示がなされ、5分毎に変化しているか確認してください。
     問題なく動作することが確認できたら、MRTGを周期的(5分毎)に起動できるようにします。Cron用の設定ファイルを作成します。適当なエディタで下記内容でcrontabというファイルを作成し、system32に置きます。

      0,5,10,15,20,25,30,35,40,45,50,55 * * * * perl C:\mrtg\bin\mrtg C:\mrtg\bin\mrtg.cfg

     設置できたら、コントロールパネルの管理ツール内のサービスを起動し、「Cron service」のプロパティを開き開始に設定すれば、5分毎に更新されるはずです。


Top Pageへ