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


cronolog のインストール

$ sudo yum -y install cronolog --enablerepo=epel
$ which cronolog
/usr/sbin/cronolog

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  ← これを追記
  :
  :
}

アクセスログ

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