そろそろログ・ローテーションを使おうよ

ほとんどのログファイルは、/var/log ディレクトリに入ってる。というか暗黙の了解のようなもので、多くのプログラムはこのディレクトリにログファイルを出力するようにしているようだ。実際、同じディレクトリにログファイルを溜め込んだ方が後でログを探す手間が省ける。

例えば、下記のようなオプションをつけてntpdを稼動させると、 /var/log/ntpd.log というログファイルが記録される。

/usr/sbin/ntpd -l /var/log/ntpd.log (他のオプションは表記省略)

このようなログファイルは、放置すればするほどファイルサイズが増えていくばかりだ。 ntpd.log は1年放置してもせいぜい1MB程度かもしれないが、 他にログ取得しているプログラムもあるはずで、 それらが溜まりに溜まって、いずれハードディスクを圧迫する時がくるかもしれない。

ログ・ローテーションは、一定期間ごとに、その時点のログファイルを数字付きのファイル名にリネームする作業だ。 そして指定しておいた世代数まで保管して、それよりも古いログファイルは削除する。

それでは、/var/log ディレクトリの中身を見てみることにする。

# cd /var/log
# ls -al | more

するとログファイルのリストがだらだら~っと表示される。

-rw-------   1 root  wheel        13880 Feb 14 15:33 cron
-rw-------   1 root  wheel         5561 Feb 14 07:00 cron.0.bz2
-rw-------   1 root  wheel         5305 Feb 11 18:00 cron.1.bz2
-rw-------   1 root  wheel         5711 Feb  9 05:00 cron.2.bz2
-rw-------   1 root  wheel         5341 Feb  6 16:00 cron.3.bz2
-rw-r--r--   1 root  wheel        28056 Feb 14 15:02 lastlog
-rw-r--r--   1 root  wheel       362379 Feb 12 14:02 ntpd.log

あら? ローテーションの設定をしたつもりが無いのに、 ファイル名の後ろに「数字.bz2」という拡張子がついたファイルがあるよ? つーことは、もう、ローテーションされてるんだぁ! あれ、でも、ローテーションされてないファイルもあるべ???

newsyslogを追っかけてみる

実は、FreeBSD をインストールして時点でnewsyslogというプログラムがインストールされていて、 /var/log/cron や /var/log/maillog がローテーションされるようになっている。

ここで脱線して、newsyslog を探ってみよう。

1. FreeBSD 起動時にソレが実行されてるかな?と推測したら、/etc/default/rc.conf を見てみよう。

# more /etc/default/rc.conf

起動時にnewsyslogが動いているようだ。

newsyslog_enable="YES"  # Run newsyslog at startup.
newsyslog_flags="-CN"   # Newsyslog flags to create marked files

2. 一定時間ごとにソレが実行されてるかな?と推測したら、/etc/crontab を見てみよう。

# more /etc/crontab

newsyslog が毎時0分に動いているようだ。

#
#minute hour    mday    month   wday    who     command
#
# Rotate log files every hour, if necessary.
0       *       *       *       *       root    newsyslog

3. 設定ファイルはどれかな?と思ったら、ファイル検索だ。

# find / -name "newsyslog*" -print

なんか、newsyslog.conf ってのがあるなぁ。

/etc/rc.d/newsyslog
/etc/newsyslog.conf
/usr/sbin/newsyslog

4. じゃ、中みてみっか。

# more /etc/newsyslog.conf

あー、ここに定義されているファイルがローテーションしてるんだ~。

 logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/all.log                        600  7     *    @T00  J
/var/log/amd.log                        644  7     100  *     J
/var/log/auth.log                       600  7     100  *     JC
/var/log/console.log                    600  5     100  *     J
/var/log/cron                           600  3     100  *     JC
/var/log/daily.log                      640  7     *    @T00  JN
/var/log/debug.log                      600  7     100  *     JC
/var/log/kerberos.log                   600  7     100  *     J
/var/log/lpd-errs                       644  7     100  *     JC
/var/log/maillog                        640  7     *    @T00  JC
/var/log/messages                       644  5     100  *     JC
/var/log/monthly.log                    640  12    *    $M1D0 JN
/var/log/pflog                          600  3     100  *     JB    /var/run/pflogd.pid
/var/log/ppp.log        root:network    640  3     100  *     JC
/var/log/security                       600  10    100  *     JC
/var/log/sendmail.st                    640  10    *    168   B
/var/log/slip.log       root:network    640  3     100  *     JC
/var/log/weekly.log                     640  5     1    $W6D0 JN
/var/log/wtmp                           644  3     *    @01T05 B
/var/log/xferlog                        600  7     100  *     JC

つまり、newsyslog.confにローテーションさせたいログ・ファイルを追加すればよいのだ。

newsyslogでログ・ローテーションする設定

ここでは、ntpd.logをローテーションする設定をしてみる。

まず、ntpd.log の現状を確認。

%su
Password:
# ls -al /var/log | grep ntpd
-rw-r--r--   1 root  wheel       362379 Feb 12 14:02 ntpd.log

続いて、/etc/newsyslog.conf の末尾に追記するため、viで編集する。

# vi /etc/newsyslog.conf

追記する内容は /var/log/cron の設定を見習って次のようにしてみる。

 logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/ntpd.log                      644  7     100  *     JC

この設定は、/var/log/ntpd.log を、パーミッション644で、 0~7世代まで、100KB以上の場合に、時間に関係なく、bzip2圧縮(J)をして、新しくntpd.log を作る(C)するというもの。その他の説明は、# man newsyslog.conf を参照すること。

そして、newsyslogを実行して、ファイルのリストを確認してみる。

# newsyslog
# ls -al /var/log | grep ntpd
-rw-r--r--   1 root  wheel           77 Feb 14 17:00 ntpd.log
-rw-r--r--   1 root  wheel        23627 Feb 14 17:00 ntpd.log.0.bz2

お・・・なんか出来てる。

freebsd7.1r/newsyslog.txt · 最終更新: 2009/02/19 20:17 by vdobv
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0