2006年11月1日水曜日

(FreeBSD) cyrus-imapdのログが/var/log/messagesにたくさん出すぎ ~ /etc/syslog.confで調節

auxpropfunc error invalid parameter supplied
というエラーメッセージがたくさん出る問題は、先日解決したものの、



(cyrus-imapd) auxpropfunc error invalid parameter supplied というエラーメッセージ



まだまだ、cyrus-imapdが出すログメッセージが多すぎて、ちょっと気になります。
どうも、クライアントがimapd/pop3dに接続するだけで



Oct 25 10:39:43 SERV pop3[9079]: login: CLNT1 [XX.XX.XX.26] user1 plaintext User logged in
Oct 25 10:39:47 SERV pop3[8978]: login: CLNT2 [XX.XX.XX.37] user2 plaintext User logged in
Oct 25 10:39:48 SERV pop3[9079]: login: CLNT1 [XX.XX.XX.26] user1 plaintext User logged in



といったログメッセージが必ず/var/log/messagesに出てきます。



接続の記録をログに残すのはいいのですが、/var/log/messagesには、imap/pop以外にも、いろんなログが出力されるので、混在していて見づらくなるし、大切なログを見落としてしまう可能性もあります。



cyrus-imapdだけ、別のログファイルに残せればいいのにな~~~と思い、ちょっとsyslogの勉強をしてみました。



syslogは、/etc/syslog.confにログ出力のルールを書いておくと、それにしたがって、ログを出したり出さなかったり、出すならどこに出すか、など挙動をコントロールできる仕組みです。基本的に、ルールとしては、facilityとlevelという2つの条件を指定することで、ログの出力先を振り分けます。



・・・ま、それくらいのことは知ってたのですが、あんまり詳しい使い方は、実は、ぜんぜんわかってませんでした。



☆ ☆ ☆ 



cyrus-imapdのドキュメントを読むと、cyrus-imapdは、syslog経由でログを出すときに、LOCAL6というfacilityで出力する、ということでした。だから、/etc/syslog.confに



local6.*          /var/log/cyrus-imapd.log



と書けばよい・・・と思ったのですが、それでもまだ/var/log/messagesに、たくさんログがでてきます。



なんでかな?と思って、cyrus-imapdのソースコードを眺めてみました(←基本ですね)。
とりあえず、「grep -R syslog .」とかやってみると、こんな行を発見。



./imap/pop3d.c: syslog(LOG_NOTICE, "login: %s %s%s plaintext%s %s", popd_clienthost,



これって、levelがnoticeで出力する、ってことです。そして、FreeBSDのデフォルトの/etc/syslog.confを見ると



*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err  /var/log/messages



とあるので、「*.notice」のところでひっかかって、/var/log/messagesにログ出力されてたのですね。facilityの部分が「*」なので、LOCAL6も含まれます。だから、cyrus-imapdのログも、/var/log/messagesに出てくる、と。



というわけで、*.noticeをやめて、「local6以外のnotice」ってのを指定できればいいんだろうな、と思ったのですが、どう書くの???



どうやら、これでよさそうです。



*.notice;local6.none;authpriv.none;kern.debug;lpr.info;mail.crit;news.err       /var/log/messages



「*.notice;local6.none;」のところがミソで、levelをnoneにすると、そのfacilityは無効になる、っていう仕組みなんだそうです。



/etc/syslog.confで書いた内容が正しく意図どおりなっているか、loggerというコマンドで動作確認できます。facilityがkern、levelをnoticeにして、ログを出してみるには、こんなかんじ。



# logger -p "kern.notice" -t "kernel" Hello World



すると、ちゃんと/var/log/messagesに記録されています。



Oct 25 10:46:19 SERV kernel: Hello World



☆ ☆ ☆ 



「man syslog.conf」をじっくり読んでいくと、level指定のときに、不等号で大小比較もできることがわかりました。



local6.>=debug           /var/log/cyrus-imapd.log



と書けば、levelがdebug以上のとき、という意味になります。



なんだか、1つ、賢くなったぞ。



いや、こんなの、知っててあたりまえだったりする?





0 件のコメント:

コメントを投稿