logrotateによるログの管理

 Linuxディストリビューションのほとんどには、logrotateというツールがRPMパッケージで用意されており、システムログ(/var/log/message)やブートログ(/var/log/boot.log)、メールログ(/var/log/maillog)など様々なログファイルがローテートされている。
 /var/log内を見てみると、ログファイルのファイル名に連番が振られたファイルがいくつか存在する。それがローテートされたログファイルである。

 Apacheをパッケージでインストールしていれば、Apacheのログファイルもlogrotateツールによって自動的にローテートされるが、ソースからインストールした場合は自分でローテートしてやらなければならない。そこで、Apacheのrotatelogを使ってログをローテートさせる方法を紹介したが、ここではlogrotateを使ったApacheのログローテートを紹介する。

logrotateについて

 logrotate自身の実行スケジュールは、cronによって管理されている。cronデーモンは、daylyで/usr/sbin/logrotateを実行しており、logrotateは/etc/logrotate.conf設定ファイルに沿って実行される。私の環境では、/etc/logrotate.confは次のようになっている。

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

 赤く強調した部分を見てわかるとおり、/etc/logrotate.dディレクトリを読み込んでいる。このディレクトリにはログファイルごとの設定が記述されたファイルが用意されている。つまり、Apacheのログファイルの設定を記述したファイルをこのディレクトリに用意すれば、その設定どおりにログがローテートされることになる。

LogFormat "%h %l %u %t \"%r\" %>s %b" common

 httpd.confでは、共通ログ形式のcommon、拡張ログ形式(ECLF)のcombinedなど、いくつかのログ形式と形式名が定義されており、デフォルトではcommonが指定されているということになる。

Apacheのログファイルをlogrotateでローテートする

 例えば、ログファイルを毎日ローテートさせるには、次のような設定ファイルを用意する。

# vi /etc/logrotate.d/apache
/usr/local/apache2/logs/access_log {
rotate 365
daily
postrotate
/usr/bin/kill -HUP `/bin/cat /usr/local/apache2/logs/httpd.pid`
endscript
}
/usr/local/apache2/logs/error_log {
rotate 365
daily
postrotate
/usr/bin/kill -HUP `/bin/cat /usr/local/apache2/logs/httpd.pid`
endscript
}

 なお、毎日(daily)のほか、毎週(weekly)毎月(monthly)などが設定できる。

参考文献・サイト


[ TOP ]