Postfixのログのサマリーを作成して,メイルでrootに送る.
前提とする環境: Postfixのログはnewsyslog(8)で毎日0時にローテーションし,最新のもの以外はbzip2で圧縮している.
ログの集計にはpflogsummを用いるのでports collectionのpflogsummをインストールする.
Postfixにメイルを差し戻す(after-queue)コンテンツ・フィルタやウィルス・スキャナを使っているとpflogsummの集計が正しく行われない1ので,pflogsummでPostfixのlogを処理する前にprepflogで前処理をする.このため,prepflogもインストールする.
出力を確認する.
% bzcat /var/log/maillog.0.bz2 | prepflog -d yesterday | pflogsumm -d yesterday --smtpd_stats --rej_add_from
この出力をそのままパイプで/usr/bin/mailに渡すとbody_checksなどのルールに引っかかってしまうことがある.そこで,"Preventing daily mail status reports from being blocked“に書かれているように,出力をbase64でエンコードしメイルに添付することにする.
MIMEメッセージの作成・送信を行うperlスクリプトでMIME::Liteモジュールを使うので,p5-MIME-Liteをインストールする.
“Preventing daily mail status reports from being blocked“を参考にして,以下のようなperlスクリプト2を作成し,適当な名前3を付け,適当な場所4に置き,実行許可を付けておく.
#!/usr/bin/perl use MIME::Lite; ## Create a new message: $msg = MIME::Lite->new( From => 'root@example.jp', To => 'root@example.jp', Subject => 'Mail Summary for mail.example.jp', Date => `date`, Type => 'text/plain', Encoding => 'base64', Path => '/tmp/mail_summ', ); $msg->send;
rootのcrontabに以下を追加して,適当な時間5にレポートを送信する…
20 0 * * * bzcat /var/log/maillog.0.bz2 | prepflog -d yesterday | pflogsumm -d yesterday --smtpd_stats --rej_add_from > /tmp/mail_summ 25 0 * * * /root/bin/mail-summary > /dev/null 2>&1