dovecotでIMAPの挙動を細かくログに取ってみる

 dovecotが1.2系になって大分経ちますね。1.2系からは以前から実装済みだったmail_logプラグインにイベントのログを取る機能が追加されまして、これの御陰でPOP3/IMAP共にメールの受信・削除・移動等々が細かくログに残せるようになりました。これ意外に知ってる人少ないんですよね……ググっても日本語の情報源が殆ど出て来ませんでした(2010/08/06現在)。探し方が悪かったのかも知れませんが……

 まあそんなわけで、IMAPのログを細かく取る方法を以下に書き残していきます。作業は簡単、dovecotの設定ファイル(当環境では/usr/local/etc/dovecot.conf)を以下のように編集します。そうそう、言い忘れてましたが今回設定した内容によって記録されるログは、通常のdovecotのログ出力先として設定されているところに一緒に書かれます。

 まずはIMAPから。

protocol imap{

(略)

  mail_plugins = mail_log
  mail_plugin_dir = /usr/local/lib/dovecot/imap

(略)

}

(略)

plugin {
  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
}


 基本的にコメントアウトされていたもののコメントを外してmail_pluginsの項目にmail_logを追加するだけです。
 plugin{}の内部に記述したmail_log_eventsの項目についての具体的な解説はdovecot公式のドキュメントに詳しく書いてあります。っていうかここを見ればこの記事を見る意味は殆どなかったりします(苦笑) 文書が整ってるソフトは使いやすいなあ!(白目
 気を取り直して……この設定によって書かれるログは例えばこんな感じに。

hogehoge dovecot: IMAP(hogehoge): expunge: uid=xxxx, msgid=, from==Fromヘッダの内容, subject==Subjectヘッダの内容, size=メッセージのサイズ

 このログはexpunge……つまりあるフォルダからメールを完全に削除した記録ですね。IMAPの具体的な挙動についてはこの辺を読むと幸せになります。是非ご覧あれ。

 ちなみにpop3でも同様の記録が取れます。やり方はIMAPと殆ど同じで、

protocol pop3{

(略)

  mail_plugins = mail_log
  mail_plugin_dir = /usr/local/lib/dovecot/pop3

(略)

}

(略)

plugin {
  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
}

 殆ど変わりませんね。protocol imap{}の中に書いていた記述をprotocol pop3{}の中に書いただけです。plugin{}の中の記述はIMAP/POP3で同じ項目を参照しますので、IMAPで設定した場合は改めて追記する必要はありません。
 この設定によって書かれるログは例えばこんな感じに。

hogehoge dovecot: POP3(hogehoge): expunge: uid=xxxx, msgid=, from==Fromヘッダの内容, subject==Subjectヘッダの内容, size=メッセージのサイズ


 IMAPと殆ど変わりませんね。このアカウントを受信したメーラーはメールをサーバに残さない設定になっているため、受信したメールを削除した……ということでexpungeとして記録されています。


 以上です。かなり簡単ですが、異様に便利なので細かく記録する必要がある場合には是非活用してください。それと一つ重要なことがありまして、ログの特性上容量が膨大になりがちですIMAPを使ってガリガリサーバを運営していきたい場合はログのローテーション等々に注意してください。