■Apache‎ > ‎

ログローテート

logファイルは、ほっとけばいつのまにか肥大して あわわってなる事があります。
ちなみに、logファイルが規定容量が超えたら動作が不安定になったり
落ちたりします。仕事でも何度かなったことあります・・・

ローテート対象は、access.logだけでなくerror.logもしておいた方がいいです。
SSLやその他、ファイル容量が大きくなるものはできるだけすべてね。

■Apacheでログローテート
httpd.confを修正して機能させます。

CustomLog "|/usr/local/apache2/bin/rotatelogs
/usr/local/apache2/logs/%Y%m%d.log 86400 540" combined

※実際は一行で書きます。

これだと、ログディレクトリ内に1日毎に年月日.logって形式で吐いてくれます。
86400は秒単位の1日って事で1週間なら604800になります。
その後ろの、540は日本時間用のオフセット値

■logrotateを利用
/etc/logrotate.dのディレクトリ内にhttpdを作成します。
ファイル内にはこんな感じで記入します。

apache log Path{
 daily
 rotate 30
 compress
 missingok
 sharedscripts
 postrotate
 /usr/local/apache2/bin/apachectl graceful
 endscript
}


これだと、 毎日ローテートして30日分残してくれます。

/etc/logrotate.dディレクトリ内の個々のログファイルの設定ファイルの
フォーマットは

 ログファイル名{
 設定値
 ・・・
 }

になります。ログファイル指定は一度に4個ぐらいまでならOKかと。

設定値の一覧

compress ローテーションされたログをgzipで圧縮する。
nocompress ローテーションされたログを圧縮しない。
daily

毎日実行

weekly 毎週実行
monthly 毎月実行
ifempty ログファイルが空でもローテーションする。
notifempty ログファイルが空ならローテーションしない。
missingok ログファイルが存在しなくてもエラーを出さない。
nomissingok ログファイルが存在しない場合エラーを出す。
nocreate 新たな空のログファイルを作成しない。
rotate 回数 指定した回数だけローテーションする。
sharedscripts 複数指定したログファイルに対してpostrotateまたはprerotateで
記述されたコマンドを実行する。
size ファイルサイズ ログファイルが指定したファイルサイズ以上であればローテーションする。

作成した後は、動作確認をする意味でも下記のコマンドを実行
#logrotate -f /etc/logrotate/file name