Posted at

cronolog で nginx のアクセスログをローテート

More than 3 years have passed since last update.


cronolog のインストール

$ sudo yum -y install cronolog --enablerepo=epel

$ which cronolog

/usr/sbin/cronolog


cronolog の使い方

http://linux.die.net/man/1/cronolog


30秒間隔でローテート

$ cronolog --period=30seconds access.log



30分間隔でローテート

$ cronolog --period=30minutes access.log



2時間間隔でローテート

$ cronolog --period=2hours access.log



2日間間隔でローテート

$ cronolog --period=2days access.log



2週間間隔でローテート

$ cronolog --period=2weeks access.log



2ヶ月間隔でローテート

$ cronolog --period=2months access.log



cronolog で出来ないこと


120分間隔でローテート

$ cronolog --period=120minutes access.log

※60分を超える時間は指定できない。


120秒間隔でローテート

$ cronolog --period=120seconds access.log

※60秒を超える時間は指定できない


7分間隔でローテート

$ cronolog --period=7minutes access.log

※60分で割り切れない時間は扱えない


nginx の設定

/var/log/nginx/access.logmkfifo でパイプにして、実際のログは /var/log/nginx/access.log.%Y-%m-%d.%H.%M に出力するようにする。


/etc/init.d/nginx

 :

 :

cronolog="/usr/sbin/cronolog"
logdir="/var/log/nginx"

 :
 :

cronolog_start() {
if ! [ -p $logdir/access.log ]; then
rm -f $logdir/access.log
mkfifo $logdir/access.log
fi

/bin/sh -c "/bin/cat $logdir/access.log | $cronolog --period=30minutes $logdir/access.log.%Y-%m-%d.%H.%M &"
}

start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
cronolog_start || exit 7 ← これを追記
  :
  :
}



アクセスログ

アクセスログはこんな感じになります。

スクリーンショット 2015-05-11 15.01.29.png