たとえば、アクセスが多いサーバだとnginxのアクセスログなどが膨らんで、1日1回のローテートと圧縮では、ディスク容量が足りなくなったりすることが、よくあると思います。また、ログの行数が多いと、生ログを調査するときにgrepするのが辛くなってきたりします。そこで、1時間毎にログをローテートして小分けにする方法として、logrotateの最新版でサポートされている hourly オプションを使ってローテートしてみました。
以下、セットアップ方法です。
環境は、CentOS 6.7です。
現在のlogrotateバージョンを確認。
$ logrotate logrotate 3.7.8 - Copyright (C) 1995-2001 Red Hat, Inc.現在の各種ライブラリをインストール。rpmbuildで最新版logrotateのrpmファイルを作ります。
$ sudo yum groupinstall "Development Tools" $ sudo yum install popt-devel rpmdevtools $ rpmdev-setuptree $ wget https://fedorahosted.org/releases/l/o/logrotate/logrotate-3.9.1.tar.gz $ cp logrotate-3.9.1.tar.gz rpmbuild/SOURCES/ $ tar -zxvf logrotate-3.9.1.tar.gz $ cp logrotate-3.9.1/logrotate.spec rpmbuild/SPECS $ rpmbuild -bb rpmbuild/SPECS/logrotate.speclogrotate最新版をインストール。
$ cd rpmbuild/RPMS/x86_64/ $ sudo rpm -Uvh logrotate-3.9.1-1.x86_64.rpm # logrotate --version logrotate 3.9.1nginxの設定ファイルを編集。
# emacs /etc/logrotate.d/nginx /var/log/nginx/*.log { hourly missingok rotate 240 compress delaycompress create 644 nginx adm dateext dateformat -%Y%m%d%H sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript }logrotateのcronの設定を、dailyからhourlyに移動。
# mv /etc/cron.daily/logrotate /etc/cron.hourly/しばらく待って、ログを見てみましょう。
# ls -al /var/log/nginx | grep access.log -rw-r--r-- 1 nginx adm 302091 Apr 22 14:12 access.log -rw-r--r-- 1 nginx adm 114085 Apr 22 12:01 access.log-2016042212.gz -rw-r--r-- 1 nginx adm 149606 Apr 22 13:01 access.log-2016042213.gz -rw-r--r-- 1 nginx adm 1240079 Apr 22 14:01 access.log-2016042214ちゃんとローテートされていますね。
Top pic from Ralph Arvesen Star trails while watching Perseid meteor shower