LoginSignup
0
1

More than 1 year has passed since last update.

サーバーのストレージがマッハだと思ったらlogだった件

Posted at

はじめに

linuxサーバーでnodeで作ったsiteを公開していたら、pm2のlogが溜まっててストレージを食いつぶしていたのでこれをなんとかしたくなりました。

サーバースペック

OS: Ubuntu18.04
あとの情報は今回の記事には関係なさそうなので割愛

サーバーのストレージがやばい!

ある日、サーバーを監視していると、どうやらファイルの変更などができなくなっていました。
ファイルを変更しようとしたりすると、以下のようなメッセージが。

Can not change file: No space left on device

というわけで、対処していきます。

状態の確認

とりあえず、状態を確認します。

df -aTh

あたりで実行します。

原因ファイルの特定

ストレージがやばいことは分かったので、原因ファイルを探します。duコマンドをいじってみます。

du -sh * | sort -nr

とか

du -d1 -h <ディレクトリ>

あたりを確認しました。

user: $ du -d1 -h ~/
XM    /home/user/hoge
XK    /home/user/fuga
:
:
:
X0G   /home/user/.pm2
XXG   /home/user

user: $ du -d1 -h ~/.pm2
X0G   /home/user/logs
(略)

ろぐ。。。???
もう少し詳しく確認したところ、あるnodeアプリケーションの起動中のエラーログが溜まりに溜まって、何十GBにも膨れ上がっていました。

原因の撲滅

とりあえず当該ファイルを削除します。
あと、この際にdbとかが停止していることがあるので、その場合は再起動しておきましょう。

再発防止

エラーが出ないようなコーディングをすることは当然として……
pm2のログが必要以上に溜まらないようにしましょう。

そこで登場するのがpm2-logrotateです。こいつを使って、一定以上の容量を超えたログファイルを削除するようにします。

pm2-logrotateの導入

pm2-logrotateって

https://www.npmjs.com/package/pm2-logrotate

とりあえず全部止めておこう

pm2 stop all

インストールします

pm2 install pm2-logrotate

起動

rootじゃないとだめならsudoしましょう。

sudo pm2 logrotate -u user

確認

ここで起動できているはずなので確認します。

pm2 report

なんか動いていたら成功です。

設定

とりあえず以下のコマンドで確認できるはずです。

pm2 get pm2-logrotate

最大ファイルサイズ

pm2 set pm2-logrotate:max_size 1G

単位は何も書かなければBとなり、K/M/Gまで設定できます。

retain数

pm2 set pm2-logrotate:retain 50

デフォだと20になっています。ここで指定した数だけログファイルが生成されると思っておけばよいでしょう。
この数を超えると更新が古いものから順に消えていきます。
allとしておけばアプリケーションの分だけ残るはずです。

その他の設定

┌────────────────┬─────────────────────┐
│ key            │ value               │
├────────────────┼─────────────────────┤
│ max_size       │ 10M                 │
│ retain         │ all                 │
│ compress       │ false               │
│ dateFormat     │ YYYY-MM-DD_HH-mm-ss │
│ workerInterval │ 30                  │
│ rotateInterval │ 0 0 * * *           │
│ rotateModule   │ true                │
└────────────────┴─────────────────────┘

この左の部分が設定内容になります。
上のような感じで設定できます。
詳しくは公式ドキュメントを読みましょう(英語ですが)。

pm2の再起動

最初に止めたものはこの段階で再起動しましょう。
なんか消えていれば、以下を実行すれば何とかなるかもしれません。
たいてい何とかなります。

pm2 resurrect

まとめ

logファイルだと思って油断していると、思わぬほど容量を食うことがあります。
それを防ぐためには、logrotateが有効です。

0
1
1

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
0
1