2013年 02月 09日
openSUSE 12.2 で mrtg を使う
-openSUSE 12.2 の導入-
ここでは XEN の仮想環境に 8G のディスク、512Mb のメモリで作成した仮想アプライアンスとして検討します。XEN 上でopenSUSE を GUI インストールするためにぎりぎり 512Mb のメモリを与えて開始しましたが、最終的に仮想アプライアンスとして運用する場合は 256Mb - 386Mb 程度のメモリでも十分に利用できます。 vm を作ったら、一旦 Delete して再度 Virt-Manager から "I have a image ... " で実装するのがよいでしょう。
openSUSE のインストールは
- 推奨設定のチェックとは全て逆に
- time zone は asia/japan UTC は使わない
- ユーザを作成し、root とは別なパスワード
- home パーティションは作らない
- run level は 5 に
- ソフトウェア
- まず使いませんがデスクトップに好みで gnome を選択
- LibreOffice, gimp, ゲームなどのデスクトップソフトウェアはディスク節約のため全てインストールしない 後で「これは不要だろう」というものは Yast から削除しても良いでしょう。
- WEB/LAMP を選択
- 開発環境 C/C++ を選択(一応追加しておきました)
- 1 Click インストールができるよう FireFox は入れておきます。
- FireWall などは Disable に SSH のポートは開けておく、とりあえずです。
- 固定 IP を設定
- NTP の設定
- ソフトウェアリポジトリの修正(ISOファイルは外しておく)
最後に Yast からオンラインアップデートを行います。
mrtg が最終的に動作する状態になったら、Yast > Software Management と Yast > System > runlevel から不要なサービス、ソフトウェアは削除しても構いません。これでぎりぎり 256Mb のメモリでも十分動作しました。
-HTTPサービスの起動-
まず、HTTP サービスを起動するよう Yast > Network Services > HTTP server からウィザード形式で Dualing Boot のチェックを入れます。
忘れた場合は Yast > System > System Service(Runlevel) > Expert オプションから apache2 を起動するよう set し、サービスを起動(Start)させておきます。
インストールが終わったら X端末より FireFox を起動して opensuse.org を開き download > Search > "mrtg" > 1 Click Install でインストールします。ソースから導入するよりも、依存関係のあるパッケージもインストールされるため、SUSE ではこの方法が一番問題ないと思います。
http://software.opensuse.org/package/mrtg
/usr/bin/mrtg
/usr/bin/cfgmaker
/usr/bin/indexmaker
などがインストールされます。確認してください。
-ディレクトリの作成-
mrtg の作業用ディレクトリを作成します。別に /srv/www/htdocs をそのまま使ってもかまわないでしょう。
mrtg:~ # mkdir /srv/www/htdocs/mrtg
mrtg:~ # mkdir /srv/www/htdocs/mrtg/icons
1 Click インストールすると /srv/www/icons の mrtg*.png ファイルが作成されます。これらを /srv/www/htdocs/mrtg/icons にコピーしておきます。
-監査対象側-
本来はルータなどの通信装置のトラフィック管理に使うものですが、ここでは監視対象として SLES11sp2 を使いました。net-snmp は通常インストールされないため、 yast > Softwate Managementから導入します。
SUSE(SLES) の net-snmp のデフォルトの snmpd.conf では正しく動作しないようです。ここが一番の勘所なので
http://www.opensource.apple.com/source/net_snmp/net_snmp-112.1/snmpd.conf
をコピーして、使いました。(なぜか Apple ...?)
あるいは snmpd のソースを解凍して、snmpd.conf のオリジナルをそのまま使ってもいいでしょう。
snmpd をリスタートします。
# /etc/init.d/snmpd restart
target-host1:~ # /etc/init.d/snmpd restart
Shutting down snmpd: done
Starting snmpd done
target-host1:~ # tail /var/log/net-snmpd.log
Received TERM or STOP signal... shutting down...
could not open /proc/net/if_inet6
cannot open /proc/net/snmp6 ...
NET-SNMP version 5.4.2.1
Received TERM or STOP signal... shutting down...
could not open /proc/net/if_inet6
cannot open /proc/net/snmp6 ...
NET-SNMP version 5.4.2.1
target-host1:~ #
-openSUSE への mrtg の設定まとめ-
さて、mrtg もインストールできたし、net-snmp も入ったデバイスがネットワークにあります。ここから mrtg の設定を大まかにまとめてみます。
1) # cfgmaker community@device-ip で mrtg.cfg を作る
2) mrtg.cfg の内容を確認して、 WordDir, IconDir の記述を web サーバーの作りに合わせて書き直す。
3) # indexmaker mrtg.cfg > index.html で web サーバーのドキュメントルートを作る。
4) # mrtg mrtg.cfg のコマンドを定期実行する
5) ブラウザで index.html を開く
という手順です。
- cfgmaker を走らせる -
mrtg:~ # cfgmaker public@target-host1
mrtg:~ # cfgmaker public@target-host1
出力先を指定していないのでまずはコンソールに表示されます。
Subroutine SNMP_Session::pack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 149.
Subroutine SNMP_Session::unpack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 149.
Subroutine SNMPv1_Session::pack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 604.
Subroutine SNMPv1_Session::unpack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 604.
--base: Get Device Info on public@192.168.1.240:
--base: Vendor Id: Unknown Vendor - 1.3.6.1.4.1.8072.3.2.10
--base: Populating confcache
--base: Get Interface Info
--base: Walking ifIndex
--snpd: public@192.168.1.240: -> 1 -> ifIndex = 1
--snpd: public@192.168.1.240: -> 2 -> ifIndex = 2
--snpd: public@192.168.1.240: -> 3 -> ifIndex = 3
--snpd: public@192.168.1.240: -> 4 -> ifIndex = 4
:- 略-
# 正しく設定できた場合 table タグが表示されます。
# System: や Description: が空欄の場合は失敗です。大抵の場合、監視ターゲット側の snmp の設定が間違っています。
######################################################################
# System: target-host1
# Description: Linux target-host1 3.0.13-0.27-xen #1 SMP Wed Feb 15 13:33:49 UTC 2012 (d73692b) x86_64
# Contact: Administrator
# Location: Right here, right now.
######################################################################
### Interface 1 >> Descr: 'lo' | Name: 'lo' | Ip: '127.0.0.2' | Eth: 'No Ethernet Id' ###
### The following interface is commented out because:
### * it is a Software Loopback interface
#
# Target[192.168.1.240_1]: 1:public@192.168.1.240: <--- ここから
# SetEnv[192.168.1.240_1]: MRTG_INT_IP="127.0.0.2" MRTG_INT_DESCR="lo"
# MaxBytes[192.168.1.240_1]: 1250000 <--- 0 から変更
# Title[192.168.1.240_1]: Traffic Analysis for 1 -- target-host1
# PageTop[192.168.1.240_1]: <h1>Traffic Analysis for 1 -- target-host1
# <div id="sysdetails">
# <table>
# <tr>
: この間コメントアウトされている場合があります。
# <div> <--- ここまで
: 以下略
上手くいったら
mrtg:~ # cfgmaker --output=/usr/bin/mrtg.cfg public@target-host1
(出力先=mrtg.cfg)を指定しましたが、cfg ファイルのパス、ファイル名は任意です。
※ mrtg.cfg の html 部分がコメントアウトされている場合、Target 行から <div> 部分のコメントアウトを外すと良いようです。MaxBytes のパラメータが 0 だと indexmaker でエラーになるので、 125000000 がデフォルトのようなので 0 から変更します。
-複数の監視対象がある場合-
mrtg:~ # cfgmaker public@target-host1 public@target-host2 public@target-host3 ....
スペースを開けて "community@host-address" を記述します。問題がなさそうであれば --output オプションを指定して mrtg.cfg ファイルを作成します。
※ 新しいデバイスを監視対象にするには # cfgmaker --output=new-device.cfg public@new-device
を実行して作成された new-device.cfg から不要な記述を削除した後 mrtg.cfg の最後の行に追加するのも方法です。 vi で mrtg.cfg を開いて、最後の行で :r new-device.cfg を実行して保存するのがよいでしょう。
- mrtg.cfg の修正 -
/usr/bin/mrtg.cfg のデフォルトの記述を書き換えます。監視対象が変わる都度 cfg ファイルを作り直す必要があるようなので、すでに稼働している場合 cfgmaker を使う前に mrtg.cfg のバックアップを取っておくと良さそうです。
WorkDir: IconDir: の二か所は最低書き換える必要があります。また、グラフを Right to Left にするには Options[_]: growright, bits の行のコメントアウトを解除します。
※ Language: はデフォルトでは英語です。SUSE で日本語を指定する場合は eucjp ではなく UTF-8 をつかいます(未確認)
# cat /usr/bin/mrtg.cfg
# cat /usr/bin/mrtg.cfg
# Created by
# /usr/bin/cfgmaker --output=/usr/bin/mrtg.cfg public@target-host1 public@target-host2
### Global Config Options
# for UNIX
#
WorkDir: /srv/www/htdocs/mrtg # <--- SUSE の環境に合わせて修正
IconDir: /mrtg/icons # <-- mrtg の Icon ファイル ドキュメントルートからの相対アドレスを指定します。
# or for NT
# WorkDir: c:\mrtgdata
### Global Defaults
# to get bits instead of bytes and graphs growing to the right
Options[_]: growright, bits # <--- コメントを外します。Right to Left にグラフを表示します。
EnableIPv6: no
: 以下略
-indexmaker-
indexmaker を使って、index.html を作成します。出力先をパイプ(>)で指定して index.html を作成します。
mrtg:/srv/www/htdocs/mrtg # indexmaker /usr/bin/mrtg.cfg > /srv/www/htdocs/mrtg/index.html
mrtg:/srv/www/htdocs/mrtg # indexmaker /usr/bin/mrtg.cfg > /srv/www/htdocs/mrtg/index.html
Subroutine SNMP_Session::pack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 149.
Subroutine SNMP_Session::unpack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 149.
Subroutine SNMPv1_Session::pack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 604.
Subroutine SNMPv1_Session::unpack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 604.
mrtg:/srv/www/htdocs/mrtg # ls
icons index.html <--- index.html が作られる
mrtg:/srv/www/htdocs/mrtg #
-mrtg を起動(3回)-
mrtg を最低3回ほど動かしてみます。初回はデータがないためエラーとなりますが、気にせずとりあえず3度やってみましょう。 始動は # mrtg [path-to]mrtg.cfgです。
mrtg:/srv/www/htdocs # mrtg /usr/bin/mrtg.cfg
mrtg:/srv/www/htdocs # mrtg /usr/bin/mrtg.cfg
Subroutine SNMP_Session::pack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 149.
Subroutine SNMP_Session::unpack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 149.
Subroutine SNMPv1_Session::pack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 604.
Subroutine SNMPv1_Session::unpack_sockaddr_in6 redefined at /usr/lib/perl5/5.16.0/Exporter.pm line 66.
at /usr/bin/../lib64/mrtg2/SNMP_Session.pm line 604.
- crontab に設定 -
ここでは5分おきに mrtg がデータを収集できるよう cron に登録します。
*/5 * * * * /usr/bin/mrtg /usr/bin/mrtg.cfg
# crontab -e
*/5 * * * * /usr/bin/mrtg /usr/bin/mrtg.cfg
実際に収集を始めるとこのようなファイルが WorkDir の中に作成されます。
mrtg:/srv/www/htdocs/mrtg # ls -al
mrtg:/srv/www/htdocs/mrtg # ls -al
total 260
drwxr-xr-x 4 root root 4096 Feb 9 16:24 .
drwxr-xr-x 6 root root 4096 Feb 9 14:18 ..
-rw-r--r-- 1 root root 1756 Feb 9 16:24 target2_2-day.png
-rw-r--r-- 1 root root 1348 Feb 9 15:46 target2_2-month.png
-rw-r--r-- 1 root root 1540 Feb 9 16:17 target2_2-week.png
-rw-r--r-- 1 root root 1674 Feb 9 15:46 target2_2-year.png
-rw-r--r-- 1 root root 6671 Feb 9 16:24 target2_2.html
-rw-r--r-- 1 root root 48323 Feb 9 16:24 target2_2.log
-rw-r--r-- 1 root root 48323 Feb 9 16:23 target2_2.old
-rw-r--r-- 1 root root 1749 Feb 9 16:24 target1_2-day.png
-rw-r--r-- 1 root root 1348 Feb 9 15:46 target1_2-month.png
-rw-r--r-- 1 root root 1582 Feb 9 16:17 target1_2-week.png
-rw-r--r-- 1 root root 1674 Feb 9 15:46 target1_2-year.png
-rw-r--r-- 1 root root 6720 Feb 9 16:24 target1_2.html
-rw-r--r-- 1 root root 48397 Feb 9 16:24 target1_2.log
-rw-r--r-- 1 root root 48397 Feb 9 16:23 target1_2.old
drwxr-xr-x 2 root root 4096 Feb 9 14:46 icons
drwxr-xr-x 2 root root 4096 Feb 9 14:33 images
-rw-r--r-- 1 root root 2692 Feb 9 15:45 index.html
mrtg:/srv/www/htdocs/mrtg #
-ブラウザで確認-
ブラウザから http://mymrtg.myintra/mrtg を開きます。
-さて-
実際には snmpd の設定が一番面倒なところでした。他にも snmpd が吐き出すデータによってはトラフィックだけではなく、様々な情報を収集して表示できるようです。
MRTG 自体は インストール > cfgmaker > mrtg.cfg の書き換え > indexmaker で inxex の作成という非常に簡単な手順ですが、監視するターゲット側の snmp の設定の方が面倒でした。ここは習うより慣れよということです。
最近は BYOD の普及により、無線LAN ルータのトラフィックが上がったなどの報告があります。無線LAN機器に snmp 機能があれば、トラフィックの量を MRTG で監視することも検討できます。
-関連リンク-
第2章 システム監視ユーティリティ openSUSE の man ページ
http://www.mrtg.jp/doc/
SNMPD.CONF の man ページ
-Keyword-
SUSE 11sp2 openSUSE 12.2 MRTG BYOD 無線 ネットワーク監視
islandcenter.jp