1
1

More than 3 years have passed since last update.

AWSでproduction.logが肥大化した時の対処方法 & ログローテート方法

Last updated at Posted at 2021-01-23

AWS初学者です。

Railsで個人的にアプリを作っておりまして、AWSにデプロイしています。
昨日も新しい機能を追加したため、変更内容をAWSにデプロイしようとしたところエラーが発生しました。

EC2にSSH接続し、「df -h」で容量を確認したところ、 
「/dev/xvda1」の使用率が100%に…

「どこの容量が多いのか」をさらに深掘りして調べてみたところ、

「/var/www/アプリのディレクトリ名/shared/log/production.log」

というログファイルがかなり多いことがわかりました。その容量はなんと3G!?
今まで放っておいた自分を反省しました😅

そして、何とかproduction.logを軽量化し、正常にデプロイさせることができたので、その方法をアウトプットしていきたいと思います。

(ちなみに、「どこの容量が多いか」を調べる方法については、こちらの記事で説明しています:容量がいっぱいでAWSにデプロイできなかった時の対処方法

production.logの軽量化

まずは、この肥大化したproduction.logを軽量化していきます。

「/var/www/アプリのディレクトリ名/shared/log」
まで移動したら次のコマンドを実行します。

ターミナル
[log]$ echo '' > ./production.log

「echo 文字列 > ファイル名」とすることで、指定したファイルに文字列を出力(上書き)できるようです。
上記のコマンドを実行すれば、production.log内は''という空の文字で上書きされます。つまり、production.logの中身を一度空にすることができるわけです。

これを実行した後したところ、無事容量を約3Gまるまる減らすことに成功しました!

ターミナル

①まず容量を確認
[log]$ sudo du -sm ./* | sort -rn | head -3
3162    ./production.log
73      ./unicorn.stderr.log
0       ./unicorn.stdout.log

②空の文字で上書き
[log]$ echo ' ' > ./production.log

③prodction.logの容量を減らすことに成功!
[log]$ sudo du -sm ./* | sort -rn | head -3
73  ./unicorn.stderr.log
1   ./production.log
0   ./unicorn.stdout.log

この後、無事デプロイすることができました!

ログローテートの設定

しかし、安心するのはまだ早いです。
まだ、ログローテートの設定が残っています。

ログローテートとは、ログを定期的に削除することで、ログが肥大化することを防ぐことを言います。

僕が使用しているRails6の場合は、
「config/environments/production.rb」
に以下の設定を追加することで、ログローテートの設定をすることができました。

production.rb
# production.rb内で、「一週間より前のログを切り捨てる」というログローテートを設定
  config.logger = Logger.new("log/production.log", 'weekly')

上記の場合ですと、「一週間より前のログを切り捨てる」というログローテートを設定していますが、weeklyの部分は、

「daily(一日で切り捨て)」
「monthly(一ヶ月で切り捨て)」

に変更することもできます。

参考にした記事

以下、参考にさせていただきました。
ありがとうございました。

Railsでログの設定+ローテートを行う

以上です。
もしご指摘などありましたら、教えていただけますと幸いです。

ここまで読んでくださりありがとうございました🙇‍♂️

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1