gosoly

ゆっくりと趣味に浸る。

Nginxのログを圧縮してローテートさせる

DSCF0316.jpg

Nginxのaccess.logとerror.logのローテートを行った際の設定メモ

やりたかったこ

  • 任意のディレクトリにlogを保存
  • 圧縮して保存
  • ファイル名にはローテート時の日時を入れる

cronあたりで組んでおかないとできないかと思ったのですが、logrotateにシェルスクリプトを書くことでどうにかなるようでしたので、そちらで実装

設定

設定の変更

vi /etc/logrotate.d/nginx

変更内容

/var/log/nginx/*.log {
        weekly
        missingok
        rotate 1
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
            DIR="/log" # 保存ディレクトリ
            EXT=`date +%Y%m%d%H%M`
            for f in $1
            do
                ls $f.1 >/dev/null 2>&1
                if [ $? -eq 0 ] ; then
                    mv $f.1 $f.$EXT
                    gzip $f.$EXT
                    mv $f.$EXT.gz $DIR
                fi
            done
            /etc/init.d/nginx rotate >/dev/null 2>&1
        endscript
}

gzipを使っているので、環境次第で別途インストールまたはtarなどで代用

動作テスト

ローテートの設定の強制実行

logrotate -f /etc/logrotate.d/nginx