Sinatraアプリのログをローテーションする
去年の7月から Sinatra + Unicorn で動かしている Web アプリがあるんだけど、そのログファイルが巨大になっていた。↓の unicorn.log がそれ。75MBにもなっている。
そこで、logrotate を使ってみることにした。
takatoh@nightschool $ ls -lh
合計 75M
-rw-rw-r-- 1 sombrero sombrero 752 7月 26 2014 CHANGES
-rw-rw-r-- 1 sombrero sombrero 122 7月 26 2014 Gemfile
-rw-rw-r-- 1 sombrero sombrero 468 7月 26 2014 Gemfile.lock
-rw-rw-r-- 1 sombrero sombrero 7.5K 1月 4 10:39 app.rb
-rw-rw-r-- 1 sombrero sombrero 64 7月 26 2014 app.ru
drwxrwxr-x 2 sombrero sombrero 4.0K 7月 26 2014 bin
-rw-rw-r-- 1 sombrero sombrero 327 7月 26 2014 boot.rb
-rw-rw-r-- 1 sombrero sombrero 126 7月 26 2014 config.yaml
-rw-rw-r-- 1 sombrero sombrero 104 7月 26 2014 config.yaml.sample
drwxrwxr-x 3 sombrero sombrero 4.0K 4月 8 04:59 db
drwxrwxr-x 3 sombrero sombrero 4.0K 7月 26 2014 lib
drwxrwxr-x 3 sombrero sombrero 4.0K 7月 26 2014 public
-rw-rw-r-- 1 sombrero sombrero 705 7月 26 2014 rakefile
-rw-rw-r-- 1 sombrero sombrero 14 7月 26 2014 start.cmd
drwxrwxr-x 2 sombrero sombrero 4.0K 4月 8 05:00 tmp
-rw-rw-rw- 1 sombrero sombrero 109 7月 26 2014 unicorn.conf
-rw-rw-r-- 1 sombrero sombrero 75M 4月 8 16:50 unicorn.log
-rw-r--r-- 1 root root 5 3月 24 20:43 unicorn.pid
-rw-rw-r-- 1 sombrero sombrero 32 7月 26 2014 version.rb
drwxrwxr-x 2 sombrero sombrero 4.0K 7月 26 2014 views
参考になったのは次のページ。
cf. Rails + Unicorn の logrotateAdd Star - yoshioblog
cf. ログローテーション(logrotate)を使ってみる ( httpd(apache)の設定例 )
特に上のページを参考にして設定ファイルを書いてみた。設定ファイルは /etc/logrotate.d ディレクトリの下に、サービス名でファイルを作ればいいようだ。
書いた設定がこれ。
/home/sombrero/sombrero/unicorn.log {
daily
missingok
rotate 60
dateext
compress
delaycompress
postrotate
pid=/home/sombrero/sombrero/unicorn.pid
test -s $pid && kill -USR1 "$(cat $pid)"
endscript
}
設定の意味は次の通り。
daily毎日ローテーションするmissingokログファイルがなくてもエラーを出さないrotate 6060回ローテーションするdateextローテーションされたログファイルのサフィックスを日付形式にするcompressローテーションされたログファイルを圧縮するdelaycompress圧縮するのを次のローテーションの時にする
postrorate と endscript の間の記述は、ローテーションが終わったあとに実行される。
Unicorn は USR1 シグナルを受け取ると、ログファイルを開きなおしてくれるそうなので、そうしている。
logrotate -d で確認する。
takatoh@nightschool $ logrotate -d sombrero
reading config file sombrero
Handling 1 logs
rotating pattern: /home/sombrero/sombrero/unicorn.log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
considering log /home/sombrero/sombrero/unicorn.log
log does not need rotating
エラーらしきものは出てないから大丈夫のようだ。
あとは1日待って確認しよう。
