Zabbix で postfix の統計情報を監視する

Zabbix で postfix の統計情報を監視するには、サンプルがあるのでこれに従えばよさそうです→ Postfix Statistics with Zabbix

pflogsumm と logtail が必要とのことですのでまずはこのインストールから。ソースからビルドするのが早いんですが引き継ぎが面倒とかその他もろもろのアレでパッケージによる導入が楽ちん。

まずは pflogsumm ですが、ディストリビューションごとに違うのですが RHEL6 の場合は rhel-x86_64-server-optional-6 チャンネルを有効にしてから、CentOS6 の場合は特に細工の必要はなくそのまま yum で取得できます。

# yum install postfix-perl-scripts

logtail は epel にある logcheck パッケージに入っていますので、epel のリポジトリを有効にした状態で yum です。

# yum --enablerepo=epel install logcheck

これで前提条件がそろいました。logcheck については cron に登録され定期的に動作するようになっています。上記パッケージで入れると初期状態では /var/log/message と /var/log/security を監視するようになっていますがいきなり権限が足りなくてわりとエラーが出るので特に用がなければ止めてしまいましょう。

/etc/cron.d/logcheck のなかに記述されてるのでコメントアウトするなり /etc/cron.d/logcheck 自体を削除するなりして止めてしまいましょう。今回の目的は logcheck ではありません。

あとはリンク先にある手順の通りで行けます。

こちらの環境では zabbix_sender を使わず、pflogsumm の結果をテキストファイルに書き出し、それを zabbix-agentd 経由で取得するようにしました。通信の方向があっちこっち向くと Firewall の設定が面倒とかいうだけの理由です。

こんなシェルスクリプトを書き、crontab で 30 分毎に呼び出します。

#!/bin/bash
MAILLOG=/var/log/maillog
DAT1=/tmp/zabbix-postfix-offset.dat
DAT2=/tmp/zabbix-postfix-stat.dat
PFLOGSUMM=/usr/sbin/pflogsumm
/usr/sbin/logtail -f$MAILLOG -o$DAT1 | $PFLOGSUMM -h 0 -u 0 --no_bounce_detail --no_deferral_detail --no_reject_detail --no_no_msg_size --no_smtpd_warnings > $DAT2

30分ごとの統計情報が /tmp/zabbix-postfix-stat.dat に記録されます。30分経つごとに直近30分の統計情報に書き換わります。ここから必要なデータを取ればよいです。zabbix_agentd.conf に追記するのは例えばこんな感じです。

UserParameter=postfix.delivered,grep -m 1 delivered /tmp/zabbix-postfix-stat.dat|cut -f1 -d"d"
UserParameter=postfix.rejected,grep -m 1 rejected /tmp/zabbix-postfix-stat.dat|cut -f1 -d"r"
UserParameter=postfix.bytesreceived,grep -m 1 "bytes received" /tmp/zabbix-postfix-stat.dat|cut -f1 -d"b"
UserParameter=postfix.bytesdelivered,grep -m 1 "bytes delivered" /tmp/zabbix-postfix-stat.dat|cut -f1 -d"b"

これら作成したキーを30分ごと(1800秒ごと)に取得するよう Zabbix 側で設定します。できあがりです。