apacheのログをローテーションする【logrotate】の設定

apacheのログ「access_log」「error_log」はほっておくとどんどん容量が増えて無駄にディスクを消費する上にapacheのパフォーマンスが落ちます。
ログをローテーションするには「logrotate」を使用します。

・まず共通の設定を行います。

vi /etc/logrotate.conf
weekly
rotate 4
errors root
create
include /etc/logrotate.d

● logrotateのオプション

weekly:週単位でローテーション(daily:日単位 monthly:月単位)
rotate 4:最大4つ前までのファイルを残す
errors root:エラーがあれば rootまでメールする
create [パーミッション] [グループ名] [ユーザ名]:ローテーション後すぐに同名のログファイルを作成する。
compress:.gz ファイルに圧縮する
notifempty : ログがカラならローテーションしない
missingok : ファイルが存在しない場合でもエラーとしない
include /etc/logrotate.d:/etc/logrotate.d ディレクトリ以下の設定ファイルを読み込む
dateext : ローテーションしたファイルに日付をつける
dateformat _%Y-%m : ローテーションしたファイルに指定したフォーマットの日付をつける

● logrotateの個別のapache設定( /etc/logrotate.d/httpd )を設定する

vi /etc/logrotate.d/httpd

でファイルを開くと

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
    endscript
}

となっている。

notifempty があると ログファイルがから場合ローテーションを実行しないので、
テストの段階ではこれを削除しておくほうが挙動がわかりやすくなります。

使用しているログファイルが「access_log」「error_log」ならこのままでOK。
ログファイルが「access_log.sitename.com」「error_log.sitename.com」等に変更してある場合は

/var/log/httpd/*log {
↓
/var/log/httpd/*log.sitename.com {

に変更する。

また複数のファイルはスペースで区切って指定する

/var/log/httpd/*log.siteA.com  /var/log/httpd/*log.siteB.com {

● ローテーション設定の確認( -d )( dryrun )

ローテーション設定の確認をするには -d オプションをつけて実行します

logrotate -d /etc/logrotate.d/httpd

● ローテーションの強制実行( -f )( force )

ローテーション設定の確認をするには -f オプションをつけて実行します
動作を確認するには -v オプションもつけて実行するとより良いです。

logrotate -f -v /etc/logrotate.d/httpd

● ローテーションがうまく動かない時の調査方法

crontabの設定にで logrotate が組み込まれているかどうかを調べる

ls /etc/cron*

表示されるリストに

/etc/cron.daily:
logrotate  man-db.cron

logrotate があればanacronで起動する設定になっています。

実際に起動されたかどうかを見るには

cat  /var/log/cron | grep 'cron.daily'

で確認します。

● logrotate の定期実行時間を変更する

logrotate は設定ファイル /etc/cron.daily/logrotate に記述がされてあり、
このファイルは anacron から実行されます。

anacronはcronと違って以下のような特徴があります

  • サーバー負荷を下げるためある範囲内のランダムな時刻に実行する機能
  • 実行時にマシンがシャットダウンしていた場合、その後マシン立ち上げた時に実行されなかった処理を実行しに行こうとする

なので決まった時刻に正確に事故した場合はクーロンから起動するとよいでしょう。 例

・ 1. anacronの設定を削除(移動)

mv  /etc/cron.daily/logrotate   /root/

・ 2. crontabで実行

crontab -e

(毎日4時半に実行するには以下のように記述する)

30 4 * * *  /root/logrotate

関連エントリー

No.312
04/05 14:55

edit

Apache