2016年3月14日月曜日

【Rails Unicorn】Unicorn logrotate

記事概要

Unicornのログローテーションの設定方法をまとめた記事です

環境

  • centos6.5
  • rails4.2.5
  • ruby2.3.0
  • rbenv
  • unicorn

はじめに

railsのWEBアプリでunicornを利用している人は多いと思います。
nginxとunicornは相性がよく、デフォルト設定でも優れたパフォーマンスを発揮します。
しかし、デフォルトだとunicornのログローテートが実行されません。
このままにしておくと、ログの容量が一気に増えてしまいます。

なので、unicornのログローテートの設定は必須です。

unicornログローテーション

unicornのログローテーションは、logrotateで設定します。
logrotateファイルに記述してもよいのですが、logrotate.d配下にunicorn用のログローテートファイルを置くのが良いでしょう。

terminal

cd /etc/logrotate.d

[root@vagrant-centos65 logrotate.d]# ls -l
total 32
-rw-r--r--. 1 root root 103 Nov 29  2013 dracut
-rw-r--r--  1 root root 185 Aug 15  2014 httpd
-rw-r--r--. 1 root root 172 Nov 23  2013 iscsiuiolog
-rw-r--r--  1 root root 844 Sep 11  2014 mysql
-rw-r--r--  1 root root 302 Sep 16  2014 nginx
-rw-r--r--  1 root root 207 Jun 10  2015 php-fpm
-rw-r--r--. 1 root root 210 Aug 15  2013 syslog
-rw-r--r--. 1 root root 100 Dec 17  2013 yum

unicornのログローテートを設定するファイルを作成します

terminal

touch unicorn

作成したunicornファイルに設定を記載します

/etc/logrotate.d/unicorn

/var/www/rails/app/current/log/*.log {
  daily
  missingok
  rotate 7
  dateext

  compress
  delaycompress

  lastaction
    pid=/tmp/unicorn.pid
    test -s $pid && kill -USR1 "$(cat $pid)"
  endscript
}

上記で設定している詳細内容は以下の通りです。

Assertion Purpose
daily ログローテーションを毎日行う
missingok 指定のログファイルがなくてもエラーを出さずに処理を続行する
rotate ログローテートの世代管理は7
dateext ログローテートを日付形式にする

スクリプト

unicornには、USR1シグナル(プロセスの動作を中断させたり、再開、変更といった合図を送るための指定)を送ると、ログファイルを開き直してくれる機能があります。

この機能を利用して、lastactionとendscriptで囲んだシェルスクリプトを実行するように設定します。

/etc/logrotate.d/unicorn

  lastaction
    pid=/tmp/unicorn.pid
    test -s $pid && kill -USR1 "$(cat $pid)"
  endscript

上記の設定の意味は、test -s $pid「ファイルが存在すれば」kill -USR1 "$(cat $pid)"「pidをUSR1でkillする」ということになります

テスト実行

設定が終了したらテストで実行します。

terminal

cd /etc/logrotate.d

logrotate -df /etc/logrotate.d/unicorn

dがデバッグモードで、fは強制となります。

terminal

[root@vagrant-centos65 log]# logrotate -f /etc/logrotate.d/unicorn

[root@vagrant-centos65 log]# ls -l
total 652
-rw-rw-r-- 1 vagrant vagrant 553843 Sep 20 12:19 development.log-20160213
-rw-rw-r-- 1 vagrant vagrant  99141 Sep 20 12:19 unicorn.stderr.log-20160213
-rw-rw-r-- 1 vagrant vagrant      0 Dec 21  2014 unicorn.stdout.log-20160213

logrotateはcronから起動されるので、以上で設定完了です。再起動は不要です。

まとめ

ログは放置しておくとあっという間にサーバーの容量を圧迫してしまいます。
ログローテーションを利用して、サーバーの容量には注意を払うようにしましょう。

以上。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


この記事がお役にたちましたらシェアをお願いします

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

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...