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内で、「一週間より前のログを切り捨てる」というログローテートを設定
config.logger = Logger.new("log/production.log", 'weekly')
上記の場合ですと、「一週間より前のログを切り捨てる」というログローテートを設定していますが、weeklyの部分は、
「daily(一日で切り捨て)」
「monthly(一ヶ月で切り捨て)」
に変更することもできます。
参考にした記事
以下、参考にさせていただきました。
ありがとうございました。
以上です。
もしご指摘などありましたら、教えていただけますと幸いです。
ここまで読んでくださりありがとうございました🙇♂️