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


MRTGは、ルータ等のトラヒックをグラフで表示するツールです。Linuxに引き続きWindowsについてもテストしてみました。集計したのは、トラヒック、CPU使用率、メモリ量、ハードディスクの空き容量です。
こちらで対応可能なOSは、Windows2000のみです。WindowsXP については、こちらが利用できますし、Windows2000もこちらのほうが良いでしょう。
なお、SNMPやMRTGに関しては、SNMPによるネットワークモニタリングで詳しく解説されているので、こちらを参考すればよいでしょう。

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

ここでは、サーバ機にいろいろインストールして、サ−バ機自身を監視します。もちろん他のPCから監視も可能です。今回は、少し手抜きでCronを使わずにやっていますが、 Cronは結構便利なのでインストールしてこちらでmrtgを起動してもいいでしょう。

必要なものは下記のとおりです。

  1. 下記から、ソフトを入手します。

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

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

    ● httpd (おやじはApache)

       http://www.apache.org/dist/httpd/binaries/win32/

    ● ActivePerl (Windows用のMSIをダウンロード)

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

    ● CPU、メモリ、ハードディスクの空き容量を監視するための拡張ツール(Windows2000用のSNMP4W2K STD(free) versionをダウンロード)

       http://www.wtcs.org/snmp4tpc/default.htm

  2. SNMPのインストール

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

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

    Windows版のWWWサーバの構築を参照してください。

  4. MRTGのインストール

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

  5. SNMP4W2Kのインストール

    ダウンロードしたSNMP4W2K-STD.zipを解凍して、できあがったSNMP4W2K-STD.exeを実行してインストールする。インストール中にMIBINST.BATが起動され、コマンドプロンプトが起動するので、全て、「Y」でEnterすると、SNMPが再起動されインストールが完了する。デフォルトのままインストールすれば、README.TXTが表示されているはずである。

■MRTGの設定と起動

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

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

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

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

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

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


  2. MRTGの動作確認

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

    D:\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: D:\Apache2\htdocs\mrtg
    
                 ↓追加、変更、削除
    
    # MRTGには5分毎に起動する機能があるので、今回はこの機能を使用。(下記を追加)
    RunAsDaemon: yes
    
    # ブラウザのリフレッシュ間隔(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: D:\Apache2\htdocs\mrtg
  4. 変更後の動作確認

     変更後、期待したとおり表示が変わっているか、またデーモン動作が問題ないかを確認します。2項と同様に起動します。

    D:\mrtg\bin>perl mrtg  mrtg.cfg
    Daemonizing MRTG ...
    Do Not close this window. Or MRTG will die


     ここで、MRTGが起動状態のままになりますが、閉じずに表示を確認してください。その後、5分以上経過後、再度表示を確認すると、最終更新日時等が変わっているはずです。確認が終わったら、一旦コマンドプロンプトを閉じてください。これでmrtgは停止します。


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

     cfgmakerでは、トラヒックを表示する設定しかできません。追加でCPU使用率と空きメモリ、ハードディスクの空き容量をとることにしました。
     それぞれ、cfgファイルを作成し別々に起動することもできますが、分ける理由もないのでmrtg.cfgに各項目毎にTarget以下を追加記述する方法で作成しました。
     
    ●CPU使用率の測定

      MRTGでは、2系統のグラフを出力できる(2系統でしかできないので1系統しか必要ない場合は、同じOIDを指定する等の対策要)ので、システムとユーザ(アプリ)のそれぞれのCPU使用率をグラフ化するよう、Targetで指定した。 (本設定をコピペして利用する場合は、行の後ろのコメントは必ず消すこと) 
    ### CPU Load Average ###
    Target[cpu]: 1.3.6.1.4.1.311.1.1.3.1.1.2.1.5.1.48&1.3.6.1.4.1.311.1.1.3.1.1.2.1.4.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.311.1.1.3.1.1.1.2.0&1.3.6.1.4.1.311.1.1.3.1.1.1.3.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を下記により変更するとともに、最大値(MaxBytes)を変更すれば同様に監視できる。

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

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


    ### DISK Free on C: ###
    Target[hddc]: 1.3.6.1.4.1.311.1.1.3.1.1.5.1.4.2.67.58&1.3.6.1.4.1.311.1.1.3.1.1.5.1.4.2.67.58:public@127.0.0.1:
    MaxBytes[hddc]: 5233                   #データの最大値(Mbyte)
    kMG[hddc]: M,G                         #M(メガ)、G(ギガ)に単位を変更する
    Unscaled[hddc]: dwmy                   #データに合わせて拡大縮小しない
    Options[hddc]: gauge, growright, noinfo, nopercent
                                           #gauge:データの値の差をとらない
                                           #growright:グラフの横軸(時間)を左が過去になるよう指定
                                           #noinfo:HTMLの先頭にデバイス名等を表示しない
                                           #nopercent:パーセント表示しない
    YLegend[hddc]: Bytes                   #Y軸の軸の名前(ラベル)を指定
    ShortLegend[hddc] : Bytes              #Y軸の軸の単位(ラベル)を指定
    Legend1[hddc]: Disk Space Available in Bytes
                                           #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のページ上部に表示される内容

  6. 自動起動の設定

     上記で設定が完了したら、4項と同じ方法でしばらく動かし、予定どおりの表示がなされ、5分毎に変化しているか確認してください。
     問題がなければ、4項の方法ですとコマンドプロンプトの画面を閉じることができないので、wperlを使用してスタートアップに登録することにより、バックグラウンドで動作させるようにします。バックグラウンドで動作させても、動作時、コマンドプロンプトが動作するので一瞬画面がチラツイてしまいますが、Cronで動かせばこういうことはありません。

     設定は、「スタート」->「設定」->「タスクバーと「スタート」メニュー」から、「詳細」->「追加」で「項目の場所」に下記コマンドを入力し、「次へ」を選択し「ショートカットを保存するフォルダ」として「スタートアップ」を選択し、登録する。登録名は適当でかまいません。

      ・ wperl D:\mrtg\bin\mrtg D:\mrtg\bin\mrtg.cfg

     設定が完了したら、システムを再起動し、5分毎に更新されるか確認してください。念のため、「タスクマネージャ」でプロセスの中に「wperl.exe」があることを確認しておいたほうがいいでしょう。

Top Pageへ