連載
» 2003年05月17日 00時00分 公開

Linux管理者への道(最終回):MRTGによるサーバ監視システムの構築 (2/3)

[アイティーブースト]

MRTGの設定ファイル

 ここまででMRTGが動作するようになったはずですが、よりMRTGを使いこなすために、ここで設定ファイルの主要な項目を紹介します。

主なグローバル設定項目

 多くの設定項目が「設定項目名[識別子]」のように表記され、「識別子」で表される情報ごとにMRTGの設定項目を定義する必要があります。この識別子は、MRTGによって作成される一連のファイル群(識別子「.html」「.log」など)のファイル名に利用されます。前述したように、cfgmakerを利用した場合は「監視対象ホスト_I/F番号」が識別子として利用されています。

 以下の4つの項目はMRTGの設定ファイルに必須の項目なので、必ず記述してください。

Target[識別子]:監視対象となるイーサネットポートの「ポート番号:コミュニティ名@アドレス」
MaxBytes[識別子]:そのポートの転送許容量(byte表示)
Title[識別子]:MRTGで出力されるページにおいて?の間に入る文字列
PageTop[識別子]:MRTGで出力されるHTMLページにおいて、グラフの前に表示される文字列

 設定ファイルに複数の識別子を設定することで、複数の異なるデータを扱うことが可能です。また、識別子には特殊文字を指定できます。例えば、「_」を指定すると、各設定値に対するデフォルト値を設定することになります。そのため、以下のように記述すれば、すっきりとした設定ファイルを作成可能です。

MaxBytes[_]: 12500000
Title[_]: MRTG
PageTop[_]: <H1>Traffic Analysis</H1><HR>
Options[_]: growright,bits

Target[router1]: 2:public@192.168.0.1
Target[router2]: 2:public@192.168.1.2
Target[router3]: 2:public@192.168.2.2

 また、「^」という特殊文字も利用可能です。前述の「_」を指定した場合、以下のように同じキーワードを使うと設定が完全に上書きされます。

Options[_]: growright
(略)
Options[xxx]: bits

 一方、「^」を指定した場合は、同じキーワードを利用しても設定を追記することになります。

Options[^]: growright
(略)
Options[xxx]: bits

グラフ描画の制御

  • YLegend/ShortLegend/LegendI/LegendO

 MRTGを利用するとトラフィック以外のさまざまな情報もグラフ化できますが、トラフィック以外の統計情報を記録する場合は取得するデータに応じて、グラフに付随する凡例やデータの単位などを書き換えたいことがあります。その際に設定ファイル中に指定できるキーワードを示しておきます。

キーワード 説明
YLegend[識別子] Y軸のラベルを定義する
ShortLegend[識別子] 最大値、平均値、現在値の単位表示に利用する
LegendI 第1パラメータの凡例を示す文字列
LegendO 第2パラメータの凡例を示す文字列
1.YLegend
2.LegendI
3.ShortLegend
4.LegendO
  • Options

 Options行にさまざまな指定をすることで、MRTGの挙動を変えることができます。MRTGが出力するグラフはデフォルトでは時間軸の進み方が右から左になっていて、最新の情報がグラフの左端に現れます。

 これを変更するオプションがgrowrightです。以下のように指定すれば、時間軸を左から右へ進めることができます。

Options[識別子]: growright

 トラフィックの単位を「byte」ではなく「bit」で扱いたい場合は、Optionsに「bits」を指定します。Optionsには複数の値を「,」区切りで並べることができるので、上記2つを併せて指定し、以下のように設定することも可能です。

Options[識別子]: growright,bits

 Optionsに指定できるものはさまざまですが、トラフィック情報以外を対象にしてデータをグラフ化する場合に押さえるべき項目として、以下のようなものがあります。

設定値 説明
gauge 取得したデータと前回取得したデータとの差分を取らない。MRTGで取得したデータをそのまま利用したい場合に指定する
absolute 取得したデータと前回取得したデータとの差分を取らない。MRTGでデータ取得した時点で、すでに「現在のトラフィック」となるような値に対して利用する。gaugeとは異なり、データを計測時間間隔で割ったものを使用したい場合に指定する
注:MRTGのデフォルトは「前回の値?今回の値/計測時間間隔」を統計値として利用します。

取得データの設定

  • 標準の機能

 cfgmakerで作成した設定ファイルでは、Target行は以下のようになっています。

Target[192.168.0.2 _2]: 2:public@192.168.0.2:

 この場合、iso(1).org(3).dod(6).internet(1).mgmt(2).mib2(1).intreface(2).ifTable(2).ifEntry(1) ifInOctets(10).I/Fポート(2)およびiso(1).org(3).dod(6).internet(1).mgmt(2).mib2(1).intreface(2).ifTable(2).ifEntry(1) ifOutOctets(16).I/Fポート(2)に対するSNMP要求を出し、情報を収集します。つまり、以下のようにコマンドを実行して取得できるデータを利用しています。

# snmpget -v 1 -c public 192.168.0.2 1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 466565873
# snmpget -v 1 -c public 192.168.0.2 1.3.6.1.2.1.2.2.1.16.2
IF-MIB::ifOutOctets.2 = Counter32: 3456394306

 この値は、該当のネットワークI/Fに対するトータルの受信/送信データ量です。MRTGは前回取得したデータと今回取得したデータの差分を取り、さらに時間当たりのデータ転送量に直したうえで、HTMLファイルを作成しています。

  • SNMPのOID指定

 MRTGの基本機能としては、前述のようにSNMPを利用して入出力トラフィック量(byte)を採取しますが、以下のようにSNMPのOIDを指定するような書式を利用することで、任意のSNMPデータをグラフ化できます。

Target[識別子]OID1&OID2:コミュニティ名@IPアドレス

 例えば、次の例では「インターフェイス番号1」における入力と出力のエラーカウントの統計を取ります。

Target[識別子]: 1.3.6.1.2.1.2.2.1.14.1&1.3.6.1.2.1.2.2.1.20.1:コミュニティ名@IPアドレス

  • 外部監視スクリプトの利用

 MRTGは、SNMPで提供されないデータを監視することも可能です。

Target[識別子]: `データを取得するためのプログラム`

 上記で指定する「データを取得するためのプログラム」は、以下の4行の出力を返すように作成します。

  • 入力byte数
  • 出力byte数
  • 監視対象の稼働時間
  • 監視対象のホスト名

 「監視対象の稼働時間」と「監視対象のホスト名」は作成されるHTMLファイルの一部に利用されますが、この表示が必要ない場合は空行を返すようなプログラムでも問題ありません。

1.プログラムの4行目の出力が利用される部分
2.プログラムの3行目の出力が利用される部分

統計値の設定時の注意点

  • データの性質に応じたグラフの作成

 前述したように、MRTGのデフォルトではシステム起動後の総受信データ量および総送信データ量のようなカウンタ値を扱うため、以下のような処理をしてからグラフを作成します。

グラフにプロットする値=前回取得した値−今回取得した値/データ取得間隔時間

 そのため、SNMPのOIDを指定する場合も外部スクリプトを使用する場合も、取得するデータによってはOptionsキーワードにgaugeまたはabsoluteを指定することを忘れないでください。

  • データは必ず2つ指定

 MRTGは必ず2つの値を1つのグラフ内に表示します。1つしかデータが必要ない場合であっても、もう1つデータを用意しなければなりません。また、3つ以上のデータをグラフ化したい場合は、別のグラフを作成する必要があります。

 MRTGのグラフ化機能に不満があるなら、MRTGの後継とされるRRDtoolを利用してみましょう。このツールを利用すると、3つ以上のデータを重ねて1つのグラフに載せることもできます。rrdデータベースという独自のデータ保存形式を利用することで、パフォーマンスの向上も図られています。

閾値のチェック

 ネットワーク機器を監視するといっても、常時データやグラフとにらめっこしているわけにはいきません。監視しているデータがある閾値を超えた際に、何らかの警告を発するようにすることが求められます。MRTGでは、監視対象のデータが閾値を超えた場合に、外部プログラムを呼び出して管理者に通知することが可能です。

 以下に閾値チェックのための設定項目を示します。

  • ThreshDir(グローバル)

 ThreshDirには、MRTGの実行ユーザーが書き込み可能なディレクトリを指定します。後述するキーワード群で設定した閾値を超えた場合は、このディレクトリにmrtg.cfg.識別子.maxIのようなファイルが作成されます。

ThreshDir: /usr/local/apache/htdocs/mrtg/threshdir

  • ThreshMaxI/O、ThreshMinI/O

 ThreshMaxIとThreshMaxOには、それぞれ第1パラメータ/第2パラメータの値として認められる最大値を指定します。パラメータがこの値を上回ったときは、それぞれThreshProgI/ThreshProgOで指定したプログラムが実行されます。

 同様にThreshMinIとThreshMinOには、それぞれ第1パラメータ/第2パラメータの値として認められる最小値を指定します。パラメータがこの値を下回ると、それぞれThreshProgI/ThreshProgOで指定したプログラムが実行されます。

 これらのキーワードには[識別子]を付加して記述します。

ThreshMaxI[識別子]: 10

 数値だけでなく、以下のように「%」を最後に付加した場合、MaxBytesで指定した値に対する百分率を閾値として指定できます。

MaxBytes[識別子]: 1000
ThreshMaxI[識別子]: 10%
注:この場合、値としては「100」が閾値となります。

  • ThreshProgI/O、ThreshProgOKI/OKO

 ThreshProgIにはThreshMinI/ThreshMaxIが破られたとき、ThreshProgOにはThreshMinO/ThreshMaxOが破られたときに実行されるプログラムを指定します。そのプログラムが実行される際は、「識別子」「閾値」「現在のパラメータ値」の3つが引数として渡されます。

 取得した値が正常値に戻った場合は、ThreshDir内のファイルが削除されてThreshProgOKI/ThreshProgOKOで指定したプログラムが実行されます。上述したThreshProgI/ThreshProgOと同様、ここで指定したプログラムにも「識別子」「閾値」「現在のパラメータ値」の3つが引数として渡されます。

 「識別子」「閾値」「現在のパラメータ値」の3つは、外部プログラムをシェルで作成する場合はスクリプト内で「$1」「$2」「$3」という位置パラメータで、Perlでは「$ARGV[0]」「$ARGV[1]」「$ARGV[2]」で利用可能です。

 それ以外の要素をスクリプト内で利用したければ、SetEnvに環境変数を設定し、シェルでは「$変数名」、Perlの場合は「$ENV{'変数名'}」で参照できます。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。