PostfixをMRTGで。
- 未分類
- | トラックバック(0)
- | コメント(3)
Postfixの流量をMRTGでグラフにしたい。 chown root:other update-mailstats.pl mailstats.pl mrtg-mailstats.pl $mail_log = '/var/log/mail.log' ; perl -MCPAN -e shell
ググったらこんなの出ました。うにまじ、discypus.jp(古いなぁー)、Johnie Ingramさんとこで、そんなに困らずにできそうなので試すことにする。
監視される側のマシンでhttp://taz.net.au/postfix/mrtg/ から update-mailstats.pl、mailstats.pl、mrtg-mailstats.pl をダウンロードして /usr/local/bin/に保存。rootで
と実行してアクセス権を設定。
chmod 700 update-mailstats.pl mailstats.pl mrtg-mailstats.pl
update-mailstats.plの、ログファイルパスが異なっていたのでこれを修正。
FedoraCore4はなんでデフォルトがmaillogなんだろう? mail.logの方が自然だよね?
↓
$mail_log = '/var/log/maillog' ;
PerlモジュールFile::Tailをインストール。rootで、
としてインストール。
install File::Tail
quit
起動/終了スクリプト /etc/init.d/mailstats 作成(ここはdiscypus.jpさんのものを。一部修正の上転載してます)
起動/終了スクリプトにアクセス権を付けて、runlevelごとの起動設定を行う。#! /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
すると/tmp/stats.dbというファイルが作成される。(このファイルの場所はどうなの? こういうもの? 変えた方が良いのかしらん? せめて/var/tmp/?) ファイルのアクセス権が気になる人は/tmp/stats.dbのアクセス権をいじっておこう。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
こうして用意したmailstatsは、次のようにして利用できる。
または/usr/local/bin/mailstats.pl
実はこれだけだと、MRTGを実行するマシンと監視対象のマシンが同じでなければうまく動作しない。次にこいつをリモートのMRTGから利用できるよう、SNMP設定を行う。/usr/local/bin/mrtg-mailstats.pl
/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をインストールすることをおすすめしますが。
で、snmpdの再起動。exec mailstats /usr/local/bin/snmp-mailstats.pl RECEIVED
exec mailstats /usr/local/bin/snmp-mailstats.pl SENT
動作確認のためにsnmpwalkで表示してみる。/etc/init.d/snmpd reload
これでそれっぽい値が出力されれば大丈夫。ここまでで監視される側の設定は終わり。次にリモートから監視する側(MRTGを実行するマシン)で作業する。snmpwalk -v 2c -c COMMUNITY TARGETHOST 1.3.6.1.4.1.2021.8.1
mrtg2だと標準のディレクトリは/usr/local/mrtg-2/cfg辺りに設定ファイルを置くことになっているはず。その設定ファイルの書き方は次の通り。
あとはmkindexしてMRTGを眺めれば吉。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
(2008/01/19)tyobiさんの指摘により/usr/local/bin/snmp-mailstats.plのwhile(<FH>)がwhile(FH)になってしまっていたのを修正。tyobiさんありがとうございます。
- [2006/01/28 15:57]
- 未分類 |
- トラックバック(0) |
- コメント(3)
- この記事のURL |
- TOP ▲
トラックバック
この記事のトラックバックURL
http://haginov.blog35.fc2.com/tb.php/29-b5bc9378
- | HOME |


コメントの投稿