MRTGは設定が簡単な統合監視ツールで、トラフィック監視かつ小規模環境に向いております。他のツールに比べて機能が貧弱なので監視用途としてはお勧めできませんが、手っ取り早くトラフィックを計測したい時に便利なツールです。
今日では滅多に使われなくなりましたが、性能検証などの用途で、トラフィックを急ぎで計測したい時に使用する人を稀に見ます。MTRGはMulti Router Traffic Grapherの略称で、名前の通りネットワーク機器のトラフィック監視目的に作られたツールです。サーバ機器を監視する事もできますが、サーバの監視にはあまり向いていません。
MRTG インストール
MRTGは公開リポジトリにも存在しますので、yumコマンドやdnfコマンドでインストールが可能です。
dnf install mrtg
MRTGによるネットワーク機器の監視
cfgmaker – 設定ファイルの雛形
MRTGはcfgmakerというツールを用いて設定ファイルの雛形を作成します。cfgmakerは以下のような書式を用いて、監視対象のルータのコミュニティ名とホスト名を指定します。なお、名前解決ができない環境ならば、<hostname>の部分はIPアドレスを指定しても差し支えありません。
cfgmaker <community>@<hostname>
cfgmakerというツールは設定ファイルを標準出力しますので、以下のように適当なファイルに設定をリダイレクトさせます。
cfgmaker public@192.168.1.1 > /tmp/mrtg.cfg
設定ファイルの雛形のうち、以下のハイライトされた部分以外を削除します。
# vi /tmp/mrtg.cfg <omitted> ### Interface 1 >> Descr: 'GigaEthernet0' | Name: 'GigaEthernet0' | Ip: 'No Ip' | Eth: '00-60-b9-e1-03-70' ### Target[192.168.1.1_1]: 1:public@192.168.1.1: SetEnv[192.168.1.1_1]: MRTG_INT_IP="No Ip" MRTG_INT_DESCR="GigaEthernet0" MaxBytes[192.168.1.1_1]: 12500000 Title[192.168.1.1_1]: Traffic Analysis for 1 -- nec-ix01 PageTop[192.168.1.1_1]: <h1>Traffic Analysis for 1 -- nec-ix01</h1> <div id="sysdetails"> <table> <omitted> ### Interface 2 >> Descr: 'GigaEthernet1' | Name: 'GigaEthernet1' | Ip: 'No Ip' | Eth: '00-60-b9-e1-03-f0' ### Target[192.168.1.1_2]: 2:public@192.168.1.1: SetEnv[192.168.1.1_2]: MRTG_INT_IP="No Ip" MRTG_INT_DESCR="GigaEthernet1" MaxBytes[192.168.1.1_2]: 125000000 Title[192.168.1.1_2]: Traffic Analysis for 2 -- nec-ix01 PageTop[192.168.1.1_2]: <h1>Traffic Analysis for 2 -- nec-ix01</h1> <div id="sysdetails"> <table> <omitted>
もし正規表現を用いて機械的に編集するならば、以下のような操作になります。
mv /tmp/mrtg.cfg /tmp/mrtg.cfg.old cat /tmp/mrtg.cfg.old | grep -E "^Target|^SetEnv|^MaxBytes|^Title|^PageTop" > /tmp/mrtg.cfg
/etc/mrtg/mrtg.cfg – 設定ファイルの作成
MRTGの設定ファイルは、/etc/mrtg/mrtg.cfgに記載します。cfgmakerで作成されたファイルのハイライトされた部分を、mrtg.cfgの末尾に加筆します。
cat /tmp/mrtg.cfg >> /etc/mrtg/mrtg.cfg
/etc/cron.d/mrtg – 監視開始
MRTGの監視は、mrtgコマンドに設定ファイル(mrtg.cfg)を引数で渡す事で実行できます。
mrtgコマンドを手作業で何回か実行し、エラーが出力されない事を確認します。なお、初回実行時のWARNINGは、前回取得した値がない事を意味するので無視して差し支えございません。
[root@centos82 ~]# env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg 2020-09-06 00:58:35, Rateup WARNING: /usr/bin/rateup could not read the primary log file for 192.168.1.1_1 2020-09-06 00:58:35, Rateup WARNING: /usr/bin/rateup The backup log file for 192.168.1.1_1 was invalid as well 2020-09-06 00:58:35, Rateup WARNING: /usr/bin/rateup Can't rename 192.168.1.1_1.log to 192.168.1.1_1.old updating log file 2020-09-06 00:58:35, Rateup WARNING: /usr/bin/rateup could not read the primary log file for 192.168.1.1_2 <omitted> 2020-09-06 00:58:35, Rateup WARNING: /usr/bin/rateup could not read the primary log file for 192.168.1.1_467 2020-09-06 00:58:35, Rateup WARNING: /usr/bin/rateup The backup log file for 192.168.1.1_467 was invalid as well 2020-09-06 00:58:35, Rateup WARNING: /usr/bin/rateup Can't rename 192.168.1.1_467.log to 192.168.1.1_467.old updating log file [root@centos82 ~]# [root@centos82 ~]# [root@centos82 ~]# env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg [root@centos82 ~]#
前述の「/usr/bin/mrtg /etc/mrtg/mrtg.cfg」コマンドを定期的に実行すれば、自動的に監視データが蓄積されます。このコマンドに対してさらに多重実行排除などの考慮を加えて定期実行する例は以下の通りです。/etc/cron.d/mrtgに以下のようなファイルを作成します。
cat << EOF > /etc/cron.d/mrtg */5 * * * * root LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok EOF
apacheによる公開
MRTGはindexmakerというツールによって、index.htmlを生成する事ができます。以下のように、引数に設定ファイルを与える事で、index.htmlが標準出力されます。
/usr/bin/indexmaker /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html
apache httpdをインストールし、起動します。
dnf install httpd systemctl enable httpd.service --now
デフォルトではローカルホスト以外からのアクセスを拒否するようになっていますので、apacheの設定を適宜変更して、ローカルホスト以外からのアクセスを許容するようにします。
# vi /etc/httpd/conf.d/mrtg.conf Alias /mrtg /var/www/mrtg <Location /mrtg> Require local Require ip 192.168.0.0/16 # Require host example.org </Location>
再起動で設定を反映させます。
systemctl restart httpd.service
以下URLにブラウザでアクセス可能な事を確認します。
http://<ip address>/mrtg/
監視直後は何もデータが溜まっていませんが、8時間ほど経過すると以下のような表示になります。
MRTGの表示改善
上記の手順に基づいた設定では以下のような不都合が生じます。
- グラフのタイトル・縦軸・横軸の説明が分かりづらい
- グラフの右側に進むつれて古いデータになる(他の監視ツールは右側が新しいデータを表す)
- 送受信速度の単位がByte per sec(他の監視ツールはbit per secで表示される)
このような不都合を解消するために、グラフ表示を整えます。
書式説明
MRTGの設定ファイルは以下のような書式で表されます。
keyword[id] value
PageTop, YLegendなどのキーワードを指定すると、タイトルや縦軸の表示を整える事ができます。各keywordの説明は以下の通りです。
keyword | 説明 | |
---|---|---|
Target | 監視対象のOID, コミュニティ名, ホスト名を指定します。 | |
Title | グラフの上部に表示されるグラフのタイトルです。 | |
PageTop | 各ページのトップに表示されるタイトルです。h1タグなどで囲み大きめの文字で表示すると良いでしょう。 | |
Options | グラフ表示に関するオプションです。gauge, absolute, growright, noinfo, bitsなどが指定できます。 | |
Timezone | 最終更新時刻を表示する際のタイムゾーンです。Timezoneの指定を省略した場合は、UTCで表示されます。 | |
MaxBytes | 表示する値の上限です。この値を上回る値を取得した場合は、何らかの異常があったものと見なし値を破棄します。 | |
ShortLegend | Max, Average, Current欄に表示される値の単位です。 | |
YLegend | 縦軸の単位です。 | |
LegendI | 1つ目(緑線)の項目の説明です。 | |
LegendO | 2つ目(青線)の項目の説明です。 | |
Legend1 | 1つ目(緑線)の項目の詳細説明です。分かりづらいですが、詳細説明は画面下の方に表示されています。 | |
Legend2 | 2つ目(青線)の項目の詳細説明です。分かりづらいですが、詳細説明は画面下の方に表示されています。 |
キーワード「Target」のみ書式がやや複雑であるため補足説明をします。2はinterface番号, publicはコミュニティ名,192.168.1.1はホスト名になります。
Target[192.168.1.1_2]: 2:public@192.168.1.1:
改善1 グラフタイトル・縦軸・横軸
Title, PageTopを変更します。さらに、Timezone, YLegend, LegendI, LegendO, Legend1, Legend2を加筆します。
# vi /etc/mrtg/mrtg.cfg Target[192.168.1.1_1]: 1:public@192.168.1.1: SetEnv[192.168.1.1_1]: MRTG_INT_IP="No Ip" MRTG_INT_DESCR="GigaEthernet0" MaxBytes[192.168.1.1_1]: 12500000 Title[192.168.1.1_1]: NEC IX2105 GigaEthernet0.0 PageTop[192.168.1.1_1]: <h1>NEC IX2105 GigaEthernet0.0</h1> Timezone[192.168.1.1_1]: Japan YLegend[192.168.1.1_1]: Byte per sec LegendI[192.168.1.1_1]: ingress packets LegendO[192.168.1.1_1]: egress packets Legend1[192.168.1.1_1]: ingress packets Legend2[192.168.1.1_1]: egress packets
新しい表示設定に基づいたindex.htmlを生成するために、indexmakerコマンドを再実行します。
詳細画面は/usr/bin/mrtgが定期実行されたタイミングで更新されます。もし待ちきれない場合は/usr/bin/mrtgを手作業で実行しても差し支えございません。
/usr/bin/indexmaker /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok
index.htmlにアクセスし、表示形式が変わった事を確認します。グラフタイトルが「NEC IX2105 GigaEthernet0.0」になっている事が分かります。
ここでグラフ部分をクリックすると詳細画面へと遷移できます。
障害画面で横軸・縦軸などの値が反映されている事を確認します。
改善2 右側に新しいデータを
Optionsにgrowrightを指定すると、右側に新しいデータが表示されるようになります。
# vi /etc/mrtg/mrtg.cfg Target[192.168.1.1_1]: 1:public@192.168.1.1: SetEnv[192.168.1.1_1]: MRTG_INT_IP="No Ip" MRTG_INT_DESCR="GigaEthernet0" MaxBytes[192.168.1.1_1]: 12500000 Title[192.168.1.1_1]: NEC IX2105 GigaEthernet0.0 PageTop[192.168.1.1_1]: <h1>NEC IX2105 GigaEthernet0.0</h1> Options[192.168.1.1_1]: growright Timezone[192.168.1.1_1]: Japan YLegend[192.168.1.1_1]: Byte per sec LegendI[192.168.1.1_1]: ingress packets LegendO[192.168.1.1_1]: egress packets Legend1[192.168.1.1_1]: ingress packets Legend2[192.168.1.1_1]: egress packets
設定を反映させます。
/usr/bin/indexmaker /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok
右側に新しいデータが表示されている事を確認します。
改善3 bps表示
Optionsにbitsを指定すると、Byteではなくbitで表示されるようになります。併せてYLegend(縦軸名)も「Byte per sec」から「bps」に変更しておきましょう。
# vi /etc/mrtg/mrtg.cfg Target[192.168.1.1_1]: 1:public@192.168.1.1: SetEnv[192.168.1.1_1]: MRTG_INT_IP="No Ip" MRTG_INT_DESCR="GigaEthernet0" MaxBytes[192.168.1.1_1]: 12500000 Title[192.168.1.1_1]: NEC IX2105 GigaEthernet0.0 PageTop[192.168.1.1_1]: <h1>NEC IX2105 GigaEthernet0.0</h1> Options[192.168.1.1_1]: growright, bits Timezone[192.168.1.1_1]: Japan YLegend[192.168.1.1_1]: bps LegendI[192.168.1.1_1]: ingress packets LegendO[192.168.1.1_1]: egress packets Legend1[192.168.1.1_1]: ingress packets Legend2[192.168.1.1_1]: egress packets
設定を反映させます。
/usr/bin/indexmaker /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok
bps表示に変わった事を確認します。変更済「NEC IX2105 GigaEthernet0.0」と変更未実施「Traffic Analysis for 2 — nec-ix01」を比較すると、ほぼ8倍の差がある事が分かります。
MRTGによるサーバ機器の監視
事前準備
MRTGはトラフィック以外の監視もできます。当然、「トラフィック監視を簡単にできるツール」が設計思想なので、トラフィック監視以外はMTRGの苦手分野であり、運用上の無理が発生するのはご理解ください。「使い捨て」用途として、MTRGでload averageなどを監視したい方向けに設定方法を述べます。
snmpdに応答するサーバを準備し、設定ファイルの雛形を作成します。
cfgmaker public@192.168.63.81 > /tmp/mrtg.cfg.old cat /tmp/mrtg.cfg.old | grep -E "^Target|^SetEnv|^MaxBytes|^Title|^PageTop" > /tmp/mrtg.cfg
target指定方法
targetは監視項目を定義するキーワードです。トラフィックを監視する場合は、interface番号, コミュニティ名, ホスト名を指定します。設定例は以下の通りです。2はinterface番号, publicはコミュニティ名, 192.168.63.81はホスト名になります。
Target[192.168.63.81_2]: 2:public@192.168.63.81:
Targetでトラフィック以外を監視する場合は、OID, コミュニティ名, ホスト名を指定します。もともとトラフィック監視用ツール(inboundとoutboundを監視するツール)として開発された名残もあって、OIDは2つ指定する仕様になっています。以下は、1分間, 5分間のロードアベレージを監視する設定例ならば、以下のようになります。
Target[192.168.63.81.load]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:public@192.168.63.81:
options指定方法
optionsはグラフ描画に関するキーワードです。主なキーワードは以下の通りです。
keyword | 説明 | |
---|---|---|
growright | 横軸について右に行くほど時間が進みます(デフォルトは左に行くほど時間が進みます) | |
noinfo | 画面上にホスト名などの情報を表示させないようにします。 | |
bits | 取得した値を8倍にして表示します。Byte単位からbit単位に変換する時に使用します。 | |
gauge | 差分ではなく絶対値で表示したい時に使用します。ロードアベレージやディスク使用率に対して使用します。 |
トラフィック以外を監視する場合は、取得する値を差分で評価すべきか、絶対値で評価すべきかを考える必要があります。トラフィックの監視はトラフィックカウンタを元に行われます。トラフィックカウンタは通信量の積算値ですので、トラフィックカウンタの増分を時間で割った値が通信速度になります。MRTGはトラフィックを監視するために作成されたツールなので、デフォルト設定が差分での評価です。もし、ロードアベレージのように絶対値で評価したい項目ならば、gaugeというオプションを指定して下さい。
ロードアベレージを監視する場合のoptionsの設定例は以下のようになります。
Options[192.168.63.81.load]: gauge, growright, noinfo
MRTG ロードアベレージ監視の設定例
以下のような設定をmrtg.cfgに追記するとロードアベレージの監視が可能になります。
# vi /etc/mrtg/mrtg.cfg Target[192.168.63.81.load]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:public@192.168.63.81: SetEnv[192.168.63.81.load]: MRTG_INT_IP="192.168.63.81" MRTG_INT_DESCR="ens33" Title[192.168.63.81.load]: load average -- centos81 PageTop[192.168.63.81.load]: <h1>load average -- centos81</h1> Options[192.168.63.81.load]: gauge, growright, noinfo MaxBytes[192.168.63.81.load]: 10000 ShortLegend[192.168.63.81.load]: pt YLegend[192.168.63.81.load]: load average ( x 100 ) LegendI[192.168.63.81.load]: 1 minute load average LegendO[192.168.63.81.load]: 5 minute load average Legend1[192.168.63.81.load]: 1 minute load average Legend2[192.168.63.81.load]: 5 minute load average
設定を反映させます。
/usr/bin/indexmaker /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok
しばらく待った後(10分以上)、ロードアベレージが監視されている事をブラウザで確認します。