Linuxディストリビューションのほとんどには、logrotate
というツールがRPMパッケージで用意されており、システムログ(/var/log/message)やブートログ(/var/log/boot.log)、メールログ(/var/log/maillog)など様々なログファイルがローテートされている。
/var/log内を見てみると、ログファイルのファイル名に連番が振られたファイル
がいくつか存在する。それがローテートされたログファイルである。
Apacheをパッケージでインストールしていれば、Apacheのログファイルもlogrotateツールによって自動的にローテートされるが、ソースからインストールした場合は自分でローテートしてやらなければならない。そこで、Apacheのrotatelogを使ってログをローテートさせる方法を紹介したが、ここではlogrotateを使ったApacheのログローテートを紹介する。
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 directoryinclude /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が指定されているということになる。
例えば、ログファイルを毎日ローテートさせるには、次のような設定ファイルを用意する。
# vi /etc/logrotate.d/apache/usr/local/apache2/logs/access_log {rotate 365dailypostrotate /usr/bin/kill -HUP `/bin/cat /usr/local/apache2/logs/httpd.pid` endscript } /usr/local/apache2/logs/error_log {rotate 365dailypostrotate /usr/bin/kill -HUP `/bin/cat /usr/local/apache2/logs/httpd.pid` endscript }
- access_logとerror_logを、毎日(daily)ローテートする
- 365世代のバックアップを保存する(1年分)
なお、
毎日(daily)のほか、毎週(weekly)、毎月(monthly)などが設定できる。