名称

MRTG_lib.pm - MRTGとスクリプト支援用ライブラリ


概要

 use MRTG_lib;
 my ($configfile, @target_names, %globalcfg, %targetcfg);
 readcfg($configfile, \@target_names, \%globalcfg, \%targetcfg);
 my (@parsed_targets);
 cfgcheck(\@target_names, \%globalcfg, \%targetcfg, \@parsed_targets);


機能説明

MRTG_libはMRTGの一部ですが、他のプログラムが同じ設定ファイルを簡単に読むことができるよう、 MRTGからは切り離されています。MRTG_libの主要部分は設定ファイルのパーサですが、 他にもいくつかの関数があります。

$MRTG_lib::OS
OSの種別: WIN, UNIX, VMS

$MRTG_lib::SL
現在のOSでのディレクトリ分離子

$MRTG_lib::PS
PATH環境変数におけるパス分離子。

readcfg
readcfg($file, \@targets, \%globalcfg, \%targetcfg [, $prefix, \%extrules])

設定ファイルを読み込んでパースし、いくつかの配列やハッシュを埋めます。 必要な引数は以下の通りです。設定ファイルの名前、 ターゲット名のリストで埋められた配列へのリファレンス、 グローバル設定用のハッシュへのリファレンス、 ターゲット設定用のハッシュへのリファレンス。

設定ファイルの書き方は以下の通りです。

 globaloption: value
 targetoption[targetname]: value
 aprefix*extglobal: value
 aprefix*exttarget[target2]: value

例えば、

 workdir: /var/stat/mrtg
 target[router1]: 2:public@router1.local.net
 14all*columns: 2

のようになります。

グローバル設定用のハッシュの構造は

 $globalcfg{configoption} = 'value'

となります。

一方、ターゲット設定用のハッシュの構造は

 $targetcfg{configoption}{targetname} = 'value'

という形になります。

MRTGの設定ファイルの書き方についてのさらに詳しい情報は referenceをご覧ください。

readcfgはさらに2つの引数を取ることができ、 設定ファイルの文法を拡張することができます。 これにより、プログラムは自身の設定をMRTGの設定ファイルに 含めることができるのです。5番目の引数は拡張用の接頭辞(prefix)、 6番目の引数はこの拡張設定用のチェックルールを含むハッシュです。 例えば、接頭辞が「14all」の場合、readcfgは「14all*」で始まる行、つまり、

 14all*columns: 2
 14all*graphsize[target3]: 500 200

のような行の全てが%extrulesに記述されたルールによってチェックされるのです。 このハッシュのフォーマットは

 $extrules{option} = [sub{$_[0] =~ m/^\d+$/}, sub{"Error message for $_[0]"}]

    つまり、

 $extrules{option}[0] -> テスト用の式
 $extrules{option}[1] -> テストに失敗した時のエラーメッセージ

という形になります。

この配列の最初の部分はオプションの値をテストするためのperlの式になります。 テスト式中では「$arg」という変数によってその値にアクセスすることができます。 配列の2つめの部分はテストに失敗した時に表示するためのエラーメッセージです。 失敗した時の値は「$arg」という変数を使って取り込むことができます。

readcfgに与えたものとは異なる接頭辞を持つ設定は、 チェックはされませんが%globalcfg%targetcfgには格納されます。 接頭辞のついた設定は設定ハッシュの中でもその接頭辞が保存されています。

 $targetcfg{'14all*graphsize'}{'target3'} = '500 200'

といった具合です。

cfgcheck
cfgcheck(\@target_names, \%globalcfg, \%targetcfg, \@parsed_targets)

readcfgで読み込まれた設定をチェックします。 コンフィギュレーション中での値の文法的そしてまた意味的なエラーをチェックします。 いくつかのオプションについてはデフォルト値を設定します。 「target[...]」オプションをパースし、MRTGの関数が使えるように@parsed_targetsに格納します。

最初の3つの引数はreadcfgと同じです。4番目の引数はパースされた ターゲットのデフォルト値が格納された配列のリファレンスです。

cfgcheckoptionsのターゲット設定の値を変換します。例えば、

 options[router1]: bits, growright

を次のハッシュへと変換します。

 $targetcfg{'option'}{'bits'}{'router1'} = 1
 $targetcfg{'option'}{'growright'}{'router1'} = 1

これはreadcfgによって行なわれるわけではありませんので、 もしcfgcheckを使用しないなら、$targetcfg{'option'}{'router1'} というスカラ変数をチェックする必要があります。 readcfgはこの変換を行ないません(MRTGではオプションをスペースもしくは ,で区切ることができます)。

ensureSL
ensureSL(\$pathname)

この関数はパス名にディレクトリ分離子が重なって入っていないか、そして最後がディレクトリ分離子で 終わっているかをチェックします。$MRTG_lib::SLをディレクトリ分離子として利用しますが、 この値はOSに依って/もしくは\になります。

log2rrd
log2rrd ($router,\%globalcfg,\%targetcfg)

ログファイルをrrdフォーマットに変換します。RRDtoolが必要です。

datestr
datestr(time)

与えられた時刻を綺麗に整形された日付け文字列として返します。 引数の時刻はUNIXの時刻フォーマット(1970年1月1日からの秒数)です。

timestamp
timestamp()

現在時刻を文字列表記で返します。

setup_loghandlers
setup_loghandlers(filename)

__DIE__や__WARN__用のシグナルハンドラを組み込みます。 これらのエラーは指定した先へ出力されます。filenameが「eventlog」の場合、 MRTGはWindowsのイベントロガーへ出力します。

expistr
expistr(time)

引数で与えられた時刻をHTTPのExpiresヘッダで使えるような形で返します。

demonize_me
demonize_me()

プログラムをバックグラウンドで走らせ、端末から切り離します。

populatecache
populatecache(\%confcache, $host, $reread, $snmpoptshash)

ifDescripAdEntIfIndexifPhysAddressifNameといったSNMP変数をhostから読み、 次のように%confcacheへその値を格納します。

 $confcache{$host}{'Descr'}{ifDescr}{oid} = (ifDescr or 'Dup')
 $confcache{$host}{'IP'}{ipAdEntIfIndex}{oid} = (ipAdEntIfIndex or 'Dup')
 $confcache{$host}{'Eth'}{ifPhysAddress}{oid} = (ifPhysAddress or 'Dup')
 $confcache{$host}{'Name'}{ifName}{oid} = (ifName or 'Dup')
 $confcache{$host}{'Type'}{ifType}{oid} = (ifType or 'Dup')

もし値が複数回取り出された場合、値(=の右側)は「Dup」になり、 そうでない場合には取り出した値になります。

readconfcache
my $confcache = readconfcache($file)

confcacheをファイルから事前にロードします。

writeconfcache
writeconfcache($confcache,$file)

現在のconfcacheをファイルへ出力します。

debug
debug($type, $message)

タイプtype用にデバッギングが有効化されていればSTDERRにmessageを出力します。 デバッグのタイプはtypeが@main::DEBUGに含まれている場合に有効化されます。


著者

Tobias Oetiker <tobi@oetiker.ch>, Dave Rand <dlr@bungi.com> そしてCHANGESに書かれている他の貢献者たち

Rainer Bawidamann <Rainer.Bawidamann@rz.uni-ulm.de >によってドキュメント化されました。


日本語訳

花井 浩之 <e2j@mrtg.jp>