スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PostfixをMRTGで。 

Postfixの流量をMRTGでグラフにしたい。

ググったらこんなの出ました。うにまじdiscypus.jp(古いなぁー)、Johnie Ingramさんとこで、そんなに困らずにできそうなので試すことにする。

監視される側のマシンでhttp://taz.net.au/postfix/mrtg/ から update-mailstats.pl、mailstats.pl、mrtg-mailstats.pl をダウンロードして /usr/local/bin/に保存。rootで

chown root:other update-mailstats.pl mailstats.pl mrtg-mailstats.pl
chmod 700 update-mailstats.pl mailstats.pl mrtg-mailstats.pl

と実行してアクセス権を設定。
update-mailstats.plの、ログファイルパスが異なっていたのでこれを修正。

$mail_log = '/var/log/mail.log' ;

$mail_log = '/var/log/maillog' ;

FedoraCore4はなんでデフォルトがmaillogなんだろう? mail.logの方が自然だよね?
PerlモジュールFile::Tailをインストール。rootで、

perl -MCPAN -e shell
install File::Tail
quit

としてインストール。

起動/終了スクリプト /etc/init.d/mailstats 作成(ここはdiscypus.jpさんのものを。一部修正の上転載してます)

#! /bin/sh
#
# mailstats postfix mail statics (for MRTG)
#
# Linux chkconfig stuff:
#
# chkconfig: 2345 91 35
# description: mailstats daemon for Postfix

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/update-mailstats.pl
NAME=mailstats
DESC="mailstats"

test -f $DAEMON || exit 0

set -e

case "$1" in
start)
echo -n "Starting $DESC: "
env LANG=C $DAEMON 2>&1 > /dev/null &
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
killall mailstats.pl 2>&1 > /dev/null
echo "$NAME."
;;
#;;
restart|force-reload)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: "
killall mailstats.pl 2>&1 > /dev/null
sleep 1
$DAEMON 2>&1 > /dev/null &
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

exit 0

起動/終了スクリプトにアクセス権を付けて、runlevelごとの起動設定を行う。

chmod 700 /etc/init.d/mailstats
chkconfig --add mailstats
chkconfig --list mailstats
chkconfig --level 35 mailstats on
chkconfig --level 01246 mailstats off
/etc/init.d/mailstats start

すると/tmp/stats.dbというファイルが作成される。(このファイルの場所はどうなの? こういうもの? 変えた方が良いのかしらん? せめて/var/tmp/?) ファイルのアクセス権が気になる人は/tmp/stats.dbのアクセス権をいじっておこう。

こうして用意したmailstatsは、次のようにして利用できる。

/usr/local/bin/mailstats.pl

または

/usr/local/bin/mrtg-mailstats.pl

実はこれだけだと、MRTGを実行するマシンと監視対象のマシンが同じでなければうまく動作しない。次にこいつをリモートのMRTGから利用できるよう、SNMP設定を行う。
/usr/local/bin/snmp-mailstats.pl(mrtg-mailstats.plを改造して作りました)として次のファイルを作成する。

#!/usr/bin/perl
if(($ARGV[0] eq "RECEIVED") || ($ARGV[0] eq "SENT"))
{ $action = $ARGV[0];
}else
{ exit;
}
$datafile = "/tmp/mailstat.$action";

open(OLD,"<$datafile") ;
while(<OLD>) {
chomp ;
($key,$val) = split /=/ ;
$old{$key} = $val ;
} ;
close(OLD) ;

$mailstats = "/usr/local/bin/mailstats.pl" ;
open(STAT,"$mailstats|") || die "couldn't open pipe to $mailstats: $!" ;
while(<STAT>) {
chomp ;
($type,$count) = split ;
($what,undef) = split(/:/, $type) ;
$new{$what} += $count ;
} ;
close(STAT) ;

print $new{$action}-$old{$action};

# save old stats
open(OLD,">$datafile") ;
close(OLD) ;


SNMP問合せの際に上記スクリプトを実行して流量をSNMP経由で渡せるように設定をsnmpd.confに追加する。NetSNMPを使っている場合には所定の場所にあるsnmpd.confに次のように記述する。(ちなみにFedoraCore4の場合には/etc/snmp/snmpd.conf) ええと、Solarisの標準のsnmpdを使っている場合にはOSのsnmpdパッケージをアンインストールしてNetSNMPをインストールすることをおすすめしますが。

exec mailstats /usr/local/bin/snmp-mailstats.pl RECEIVED
exec mailstats /usr/local/bin/snmp-mailstats.pl SENT

で、snmpdの再起動。

/etc/init.d/snmpd reload

動作確認のためにsnmpwalkで表示してみる。

snmpwalk -v 2c -c COMMUNITY TARGETHOST 1.3.6.1.4.1.2021.8.1

これでそれっぽい値が出力されれば大丈夫。ここまでで監視される側の設定は終わり。次にリモートから監視する側(MRTGを実行するマシン)で作業する。

mrtg2だと標準のディレクトリは/usr/local/mrtg-2/cfg辺りに設定ファイルを置くことになっているはず。その設定ファイルの書き方は次の通り。

Target[target_1]: 1.3.6.1.4.1.2021.8.1.101.1&1.3.6.1.4.1.2021.8.1.101.2:COMMUNITY@host.domain:::::2
MaxBytes[target_1]: 9999
Title[target_1]: target: mailstats
LegendI[target_1]: Received
LegendO[target_1]: Send
SetEnv[target_1]: DESCRIPTION="mailstats"
ThreshMaxI[target_1]: 9999
ThreshMinI[target_1]: 0
ThreshMaxO[target_1]: 9999
ThreshMinO[target_1]: 0
ThreshProgI[target_1]: /usr/local/mrtg-2/bin/proc.cfg.pl
ThreshProgOKI[target_1]: /usr/local/mrtg-2/bin/proc.cfg.ok.pl
ThreshProgO[target_1]: /usr/local/mrtg-2/bin/proc.cfg.pl
ThreshProgOKO[target_1]: /usr/local/mrtg-2/bin/proc.cfg.ok.pl
PageTop[target_1]: target: mailstats

あとはmkindexしてMRTGを眺めれば吉。

(2008/01/19)tyobiさんの指摘により/usr/local/bin/snmp-mailstats.plのwhile(<FH>)がwhile(FH)になってしまっていたのを修正。tyobiさんありがとうございます。

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://haginov.blog35.fc2.com/tb.php/29-b5bc9378

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。