ページ更新: 2005-04-29 (金) (6605日前)

(2001.06.30 作成)

postfixの動作をグラフにする

postfixの動作状況(メール送受信数)をグラフにします。
環境は Debian GNU/Linux woody + Postfix。

目次

[編集]

情報源 #

Postfixの頑張り具合をMRTGで表示できるよーに (うにまじ)

MRTG for postfix (My Postfix stuff)

Mailgraph Homepage (David Schweikert's Home Page)

Mailgraphのインストール (もぐらくんドットコム::blog) (2005-04-29)

[編集]

MRTG hacks の場合 (MRTG) #

これは、sendmail でメール送受信数をグラフにする方法をアレンジしたものです。
sendmail では、付属の mailstats と MRTG の Contrib の mrtg-mail を使えばできます。
Postfix では、mailstatsに当たるコマンド(そして流量を記録する sendmail.st ファイル)がありません。
よって、MRTG hacks では次の方法を使っています。

  1. sendmail.st に変わるファイルを作る仕組みを用意する。
  2. MRTGから実行するスクリプトを用意する。

MRTGをインストールします。

# apt-cache search mrtg
checkservice - Checks the status of services on (remote) hosts
mrtg - Multi Router Traffic Grapher
mrtg-contrib - Multi Router Traffic Grapher (contributed files)
mrtgutils - Utilities to generate statistics for mrtg

# apt-get install mrtg

インストールしたら、/etc/mrtg.cfg の中のHTMLを置くディレクトリの設定 WorkDir を確認・修正します。
また、/etc/cron.d/mrtg を見て、mrtgの実行タイミングも確認します。

perl の File::Tail モジュールを入手します。今回は debian のパッケージを使いました。

# apt-cache search tail | grep perl | grep file   パッケージを探す
libfile-tail-perl - File::Tail perl module

# apt-get install libfile-tail-perl                 インストールする

MRTG for postfix より、update-mailstats.pl mailstats.pl mrtg-mailstats の3つを入手します。
これを今回は /usr/local/sbin/ に置き、実行属性を付けました。

mrtg-mailstats 書き換え

$mailstats = "/usr/local/sbin/mailstats.pl" ;

update-mailstats.pl 書き換え

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

/etc/init.d/mailstats 作成

#! /bin/sh
#
# mailstats   postfix mail statics (for MRTG)
#

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

test -f $DAEMON || exit 0

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        $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
[編集]

Mailgraph の場合 #

Mailgraph は、Postfix が syslog を調べて、グラフにするものです。

Mailgraph から mailgraph-0.13.tar.gz を入手します。

$ tar -zxvf mailgraph-0.13.tar.gz
$ cd mailgraph-0.13

README を読むと、「rrdtool and it's perl module (RRDs)」と「File::Tail」が必要とのこと。
File::Tail パッケージは libfile-tail-perlで、インストール済み。
rrdtoolパッケージを探して、インストールします。

$ apt-cache search rrd       rrdtool, RRDsのパッケージを探す…見つかった!
cricket - Program for collection and display of time-series data
librrd0 - Time-series data storage and display system (runtime)
librrd0-dev - Time-series data storage and display system (development)
librrdp-perl - Time-series data storage and display system (perl-piped)
librrds-perl - Time-series data storage and display system (perl-shared)
mrtg - Multi Router Traffic Grapher
rrdtool - Time-series data storage and display system (programs)
rrdtool-tcl - Time-series data storage and display system (tcl)
spong-www - A systems and network monitoring system -- web interface

# apt-get install rrdtool librrds-perl

ファイルの配置は次のようにしました。

  • /usr/local/sbin/ mailgraph.pl を置く
  • /usr/lib/cgi-bin/mailgraph/ mailgraph.cgi と、mailgraph.pl が作る mailgraph.rrd を置く。
  • /var/www/mailgraph/ mailgraph.cgi が作る png を置く
  • /etc/init.d/ mailgraph.pl を起動/終了させるスクリプト mailgraph を作成し、置く

mailgraph.pl の修正個所 (mailgraph.rrd の出力ディレクトリを変更)

my $rrd = "/usr/lib/cgi-bin/mailgraph/mailgraph.rrd";

mailgraph.cgi の修正個所 (URLと実際のディレクトリを分離)

# diff mailgraph.cgi.org mailgraph.cgi
15c15,16
< my $imgs = 'imgs';
---
> my $imgs = '/var/www/mailgraph';
> my $imgsurl = '/mailgraph';
29a31
>       my $imgurl = "$imgsurl/${file}.png";
60c62
<       return RRDs::error || "<IMG BORDER=\"0\" WIDTH=\"$xs\" HEIGHT=\"$ys\" SR
C=\"$img\" ALT=\"mailgraph\">";
---
>       return RRDs::error || "<IMG BORDER=\"0\" WIDTH=\"$xs\" HEIGHT=\"$ys\" SR
C=\"$imgurl\" ALT=\"mailgraph\">";
70a73
>       my $imgurl = "$imgsurl/${file}_err.png";
101c104
<       return RRDs::error || "<IMG BORDER=\"0\" WIDTH=\"$xs\" HEIGHT=\"$ys\" SR
C=\"$img\" ALT=\"mailgraph\">";
---
>       return RRDs::error || "<IMG BORDER=\"0\" WIDTH=\"$xs\" HEIGHT=\"$ys\" SR
C=\"$imgurl\" ALT=\"mailgraph\">";

/etc/init.d/mailgraph の内容 (/etc/init.d/skeleton をコピーし、修正)

#! /bin/sh
#
# mailgraph   postfix mail statics
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/mailgraph.pl
NAME=mailgraph
DESC="mailgraph"

test -f $DAEMON || exit 0

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        $DAEMON 2>&1 > /dev/null &
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        killall mailgraph.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 mailgraph.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

起動スクリプト /etc/init.d/mailgraph を /etc/rc?.d/ に登録。
Postfix と同じ優先順位 (20) で起動するようにしました。

# update-rc.d mailgraph defaults 20
 Adding system startup for /etc/init.d/mailgraph ...
   /etc/rc0.d/K20mailgraph -> ../init.d/mailgraph
   /etc/rc1.d/K20mailgraph -> ../init.d/mailgraph
   /etc/rc6.d/K20mailgraph -> ../init.d/mailgraph
   /etc/rc2.d/S20mailgraph -> ../init.d/mailgraph
   /etc/rc3.d/S20mailgraph -> ../init.d/mailgraph
   /etc/rc4.d/S20mailgraph -> ../init.d/mailgraph
   /etc/rc5.d/S20mailgraph -> ../init.d/mailgraph

/etc/init.d/mailgraph を起動します。

# /etc/init.d/mailgraph start

ブラウザから mailgraph.cgi を実行。これでグラフが表示されれば完成です。