Nginxのログを圧縮してローテートさせる
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