Yak shaving logs


My life is just yak shaving.

[Rails] Unicornのログローテーションを設定する

2017/08/16 #rails #ubuntu #nginx #centos

By Yusuke Takita


こんにちは。Kajitz inc.の瀧田です。

./log/production.log はRailsがログローテーションしてくれますが、Unicornは自分で設定する必要があります。Unicornのログローテーションを設定する方法について書きました。

設定ファイルを作成

/etc/logrotate.d/ 以下に設定ファイルを作成します。

/etc/logrotate.d/unicorn

/var/www/app_name/shared/log/unicorn.*.log {
  daily                     # ログローテーションを毎日に行う
  missingok                 # ログファイルが存在しなくてもエラーを出さずに処理を続行
  rotate 3                  # 3世代ログを残す
  notifempty                # ログファイルが空ならローテーションしない
  create 0640 hanako hanako # パーミッション user group

  # unicorn masterプロセスに、USR1シグナルを送る
  lastaction
    pid=/var/www/app_name/shared/tmp/pids/unicorn.pid
    test -s $pid && kill -USR1 "$(cat $pid)"
  endscript
}

lastaction ~ endscriptmk-mode BLOGで紹介されていた方法を利用させていただきました。

' /etc/logrotate.d/ ' を反映 & 確認

$ logrotate -d /etc/logrotate.conf
$ cat /var/lib/logrotate/status | grep unicorn # ubuntuの場合は /status
$ cat /var/lib/logrotate.status | grep unicorn # centosの場合は .status
"/var/www/app_name/shared/unicorn.*.log" 2017-8-16-15:0:0

/var/www/app_name/shared/unicorn.*.log" 2017-8-16-15:0:0 で設定が反映されています。

トラブルシューティング

/var/lib/logrotate.statusファイルにunicornが存在しない場合は、 logrotate -d /etc/logrotate.conf で処理がskipされている可能性があります。(僕はされてました)

skipping ... insecure permissions が表示される

considering log /var/www/app_name/shared/unicorn.*.log
  log /var/www/app_name/shared/unicorn.*.log does not exist -- skipping

普通にログファイルがない、というエラーです。
上記の場合はpathが間違っており、/var/www/app_name/shared/log/unicorn.*.log にするとOKです。

skipping ... because parent directory has insecure permissions が表示される

error: skipping "/var/www/app_name/shared/unicorn.*.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

ログにあるように権限を変更するか /etc/logrotate.d/unicornsu user group を追加すればOKです。

/var/www/app_name/shared/log/unicorn.*.log {
  daily
  missingok
  rotate 3
  notifempty
  copytruncate
  create 0640 hanako hanako
  su hanako hanako

最後に

copytruncate オプションを使用すれば、 USR1 をunicornに送らなくても良いのでは?と思った。(試してはない)

参考

https://www.mk-mode.com/octopress/2014/02/02/unicorn-logrotation/

このエントリーをはてなブックマークに追加

categories


最新記事


tags