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


NET-SNMP > MRTG

続いて MRTG でグラフ化しますが、これも SuSE 標準のものを使いましたので、インストールされていなかったら YaST でインストールしてください。こちらも、SNMPによるネットワークモニタリングで詳しく解説されているので参考にしました。

こちらの内容は、RedHat の時と基本的に変わりはなく、若干パスが違うくらいです。なお、今回はルータの NAPT セッション数の測定についても記述してみました。

■MRTG の設定

MRTG では、統計をグラフ化した PNG 形式の画像ファイルとそれを含む HTML ファイルおよびログが作成されます。合わせて、HTML ファイル用に MRTG のロゴ、MRTG 用のconfig や制御用データを置くディレクトリが必要になります。これらを置くディレクトリは、結果を web で見られるようにおやじのユーザディレクトリにすると同時に、ログ等は見せるものではないので別のディレクトりに配置することにしました。なお、3項の MRTG のアイコンは rpm でインストールすると /var/www/html 配下にあるので、これをコピーします。

  1. HTMLファイル用: /home/oyaji/public_html/mrtg
  2. グラフ(png)用  : /home/oyaji/public_html/mrtg/images (MRTGの条件から、このディレクトリは1項配下にすること)
  3. MRTGロゴ(png)用: /home/oyaji/public_html/mrtg/icons (MRTGのアイコンはrpmでインストールすると/srv/www/icons配下にある)
  4. 制御用      : /usr/local/mrtg/data
  5. ログ用      : /usr/local/mrtg/logs
# mkdir /home/oyaji/public_html/mrtg
# mkdir /home/oyaji/public_html/mrtg/images
# mkdir /home/oyaji/public_html/mrtg/icons
# cp /srv/www/icons/*.png /home/oyaji/public_html/mrtg/icons
# mkdir -p /usr/local/mrtg/data
# mkdir -p /usr/local/mrtg/logs
    |    └ count [ CGI設置用 ]/--+--・
次に MRTG の設定ファイルを作成しますが、MRTG には cfgmaker というプログラムがあるので、これを使いベースとなる設定ファイル(mrtg.cfg)を作成します。
 /usr/local/mrtg/data配下に作成しました。
# cfgmaker private@localhost > /usr/local/mrtg/data/mrtg.cfg

 cfgmaker コミュニティ名@エージェントのアドレス > 設定ファイルの出力先
  |    └ count [ CGI設置用 ]/--+--・
上記の操作により、こちらのようなmrtg.cfgファイルが作成されますので、これをベースに修正していきます。但し、ここで作成できるのはトラヒックの設定ファイルだけです。CPU使用率等は、別途、作成が必要です。コメント部分を除いて設定を変更した内容を示します。は変更、は追加、は削除したものです。

Target[localhost_2]: 2:private@localhost:
SetEnv[localhost_2]: MRTG_INT_IP="192.168.1.100" MRTG_INT_DESCR="eth0"
MaxBytes[localhost_2]: 1250000
Title[localhost_2]: Traffic Analysis for 2 -- homeserver
PageTop[localhost_2]: <H1>Traffic Analysis for 2 -- homeserver</H1>
<TABLE>
<TR><TD>System:</TD> <TD>homeserver in Homesever</TD></TR>
<TR><TD>Maintainer:</TD> <TD>Root &lt;root@localhost&gt;</TD></TR>
<TR><TD>Description:</TD><TD>eth0 </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 (homeserver.aconus.com)</TD></TR>
</TABLE>

             ↓追加、変更、削除

# htmlファイルを置くディレクトリをHtmdirで指定(1項)
Htmldir: /home/oyaji/public_html/mrtg

# グラフ(pngファイル)を置くディレクトリをImagedirで指定(2項:1項配下にすること)
Imagedir: /home/oyaji/public_html/mrtg/images

# mrtgのロゴを置くディレクトリをIconDirでHtmldirからの相対アドレスで指定(3項)
IconDir: icons

# mrtgのログを置くディレクトリをLogdirで指定(5項)
Logdir: /usr/local/mrtg/logs

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

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


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

#SetEnv[localhost_2]: MRTG_INT_IP="192.168.1.100" MRTG_INT_DESCR="eth0"

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

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

Title[traffic]: Traffic Analysis
PageTop[traffic]: <H1>Traffic Analysis</H1>

# 余計なものは表示しない。
#<TABLE>
#<TR><TD>System:</TD> <TD>homeserver in Homesever</TD></TR>
#<TR><TD>Maintainer:</TD> <TD>Root &lt;root@localhost&gt;</TD></TR>
#<TR><TD>Description:</TD><TD>eth0 </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 (homeserver.aconus.com)</TD></TR>
#</TABLE>


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

cfgmakerでは、トラヒックを表示する設定しかできない。追加でCPU使用率、空きメモリ用、ディスク使用率をとることにしました。
それぞれ、cfgファイルを作成することもできますが、分ける理由もないのでmrtg.cfgに各項目毎にTarget以下を追加記述する方法で作成しました。
グラフ化したい情報は、Target行で以下のようにOIDを指定します。

Target[統計情報名]: OID1&OID2:コミュニティ名@SNMPエージェントのIPアドレス

  1. 統計情報名: Target以下のオプション等、1つの情報は全て同じ名称にすること。この名称は、HTMLファイルのファイル名になる。
  2. OID1/2   : 対象となる情報のOIDを2つ指定する。グラフではOID1が受信側とみなされデータが緑色で,OID2が送信側として青色で表示される。
             OIDについては、ここ以外の項目を測定したければSNMPによるネットワークモニタリング等に書かれているので参照のこと。

◆CPU関係の測定


◆空きメモリ容量の測定

ここでは、物理メモリとスワップメモリの空き容量を表示することにした。ここでは、MaxBytes1/2にメモリの最大値を設定するが、下記のようにsnmpwalk コマンドを使って値を調査し設定する。 

# snmpwalk -v 1 localhost -c private .1.3.6.1.4.1.2021.4.5
ucd-snmp-mib::memTotalReal.0 = INTEGER: 255560
# snmpwalk -v 1 localhost -c private .1.3.6.1.4.1.2021.4.3
ucd-snmp-mib::memTotalSwap.0 = INTEGER: 1052248

 

### Memory Free ###
#
Target[mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.4.0:private@localhost
MaxBytes1[mem]: 255560 #ODI1データの最大値(物理メモリ *)
MaxBytes2[mem]: 1052248 #ODI2データの最大値(スワップメモリ *)
Unscaled[mem]: dwmy #データに合わせて拡大縮小しない
Options[mem]: gauge, absolute, growright, noinfo
#gauge:データの値の差をとらない(容量のためそのまま利用)
#absolute:gauge同様データの値の差をとらず、計測時間間隔で割った値
#growright:グラフの横軸(時間)を左が過去になるよう指定
#noinfo:HTMLの先頭にデバイス名等を表示しない
YLegend[mem]: Mem Free(Bytes) #Y軸の軸の名前(ラベル)を指定
ShortLegend[mem]: Bytes #Y軸の軸の単位(ラベル)を指定
kilo[mem]: 1024 #キロの単位へ切替。容量は1キロ=1024で計算される。
kMG[mem]: k,M,G,T,P #単位をk(キロ)からに変更
LegendI[mem]: Real #OID1(受信側)のラベルを指定
LegendO[mem]: Swap #OID2(送信側)のラベルを指定
Legend1[mem]: 空き物理メモリ[MBytes] #OID1(受信側)のグラフ名(ラベル)を指定
Legend2[mem]: 空きスワップメモリ[MBytes] #OID2(送信側)のグラフ名(ラベル)を指定
Title[mem]: Memory Free #HTMLのタイトル
PageTop[mem]: <H1>Memory Free</H1> #HTMLのページ上部に表示される内容

 

◆ディスク使用率の測定

ディスク使用率のMIBデータはデフォルトの snmpd.conf の設定では / しか設定されていない。他のパーティションのデータを取得するならば、snmpd.conf に設定が必要である。MRTGでは2系統表示が必須なので、同じ物を設定した。
### Disk Used ###
#
Target[disk]: .1.3.6.1.4.1.2021.9.1.9.1&.1.3.6.1.4.1.2021.9.1.9.1:private@localhost
MaxBytes[disk]: 100 #データの最大値(100%)
Unscaled[disk]: dwmy #データに合わせて拡大縮小しない(100%まで縦軸を表示)
Options[disk]: gauge, absolute, growright, nopercent, noinfo
#gauge:データの値の差をとらない(取得情報は既に平均値)
#absolute:gauge同様データの値の差をとらず、計測時間間隔で割った値
#growright:グラフの横軸(時間)を左が過去になるよう指定
#noinfo:HTMLの先頭にデバイス名等を表示しない
#nopercent:パーセント表示しない(取得情報は既に%値)
YLegend[disk]: Disk Used(%) #Y軸の軸の名前(ラベル)を指定
ShortLegend[disk]: (%) #Y軸の軸の単位(ラベル)を指定
LegendI[disk]: / ディスク使用率 #OID1(受信側)のラベルを指定
LegendO[disk]: / ディスク使用率 #OID2(送信側)のラベルを指定
Legend1[disk]: / ディスク使用率 #OID1(受信側)のグラフ名(ラベル)を指定
Legend2[disk]: / ディスク使用率 #OID2(送信側)のグラフ名(ラベル)を指定
Title[disk]: Disk Used #HTMLのタイトル
PageTop[disk]: <H1>Disk Used</H1> #HTMLのページ上部に表示される内容

 

◆NAPT セッション数の測定

おやじが使用しているルータ( MN8300W ) には snmp は実装されていないので、 NAPT セッション数を測定する perl スクリプトを作成し、 mrtg からの要求に対してルータからデータを読み取り返送するようにした。このルータはこれぐらいしか採るデータがないが、他に採れるならスクリプトを改造すればかなりのことはできるはずである。
おやじが作成したスクリプトはこちらのようなものである。Disk と同様にデータがひとつしかないが、MRTG では2系統表示が必須なので同じ物を設定した。なお。こちらのスクリプトはEUC_JPでないと動作しないので注意が必要である。
#### NAPT Sessions ###
#  --- Target に 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(送信側)のラベルを指定 Legend1[napt]: NAPT Sessions #OID1(受信側)のグラフ名(ラベル)を指定
Legend2[napt]: NAPT Sessions #OID2(送信側)のグラフ名(ラベル)を指定
Title[napt]: NAPT Sessions #HTMLのタイトル PageTop[napt]: <H1>MN8300 NAPT Sessions</H1> #HTMLのページ上部に表示される内容

 

■MRTGの起動

以上で設定できたので、正常に動作するか確認します。以下のようにコマンドを入力して mrtg を起動すると、html ファイルができあがり、 logファイルにデータが収集されているはずです。正常に動作していても下記のような Warning がでますが、これは、前回データが無いためのもので、3回目からでなくなりますので、少し時間をおきながら、3回実行してみます。logファイルにデータが収集されない、あるいは0または1等が収集される場合は、うまく設定ができていません。Warning メッセージを確認し、設定内容を見直しましょう。

# /usr/bin/mrtg /usr/local/mrtg/data/mrtg.cfg
Rateup WARNING: /usr/bin/rateup could not read the primary log file for localhost_2
Rateup WARNING: /usr/bin/rateup The backup log file for localhost_2 was invalid as well
Rateup WARNING: /usr/bin/rateup Can't remove localhost_2.old updating log file
Rateup WARNING: /usr/bin/rateup Can't rename localhost_2.log to localhost_2.old updating log file
# /usr/bin/mrtg /usr/local/mrtg/data/mrtg.cfg
Rateup WARNING: /usr/bin/rateup Can't remove localhost_2.old updating log file
# /usr/bin/mrtg /usr/local/mrtg/data/mrtg.cfg
#


問題なく動作することが確認できたら、cronで MRTG を周期的(5分毎)に起動します。cron は、デフォルトで起動していますので、/etc/crontab に以下のように追加すれば5分毎にグラフが更新されます。

0-59/5 * * * * root /usr/bin/mrtg /usr/local/mrtg/data/mrtg.cfg

Top Pageへ