本日は自作のログファイルをうまくローテーションさせる方法について。
自作でログを作っておりますと、日がたつにずれどんどんと容量が膨らんでいきます。
放置するととんでもない量になっていることが多いですね。
クラウドが一般的になっている現在ではそもそもサーバーの中にログをはかないという方もいるようですが・・・
一般的にLinuxの場合はログのローテーション(一定期間のログを分割して保存し、ある程度の期間がたったら削除する機能)が働いております。
/var/logの下をみますと messages-20170205のように日付がはいったログが見られるかと思います。
任意のログファイルをこのように処理する場合の手続きについて書きます。自前のスクリプトを書くという方法ももちろんありますが・・・
設定
例えば /var/log/sample/sample.log というログがはかれているとします。このログをローテーションさせたいとします。1日ごとにログを作り、sample.log-20170223のような日付形式で保存したいとします。
ログのローテションをする際にはまず/etc/logrotate.d/に設定ファイルを作ります。
仮にsample_logという設定ファイルを作るとします。
1 2 3 4 5 6 7 |
/var/log/sample/*log { create rotate 7 daily missingok dateext } |
設定情報は下記を参考に。
Linuxサーバー(CentOS)のApacheのログをローテーションする方法logrotate.d
注意点
ありがたいことにlogrotateにはデバッグ機能があるため、テストをしたり、定期実行を待つのではなくすぐに実行して試すことができます。
設定情報が正しいかどうか
1 |
logrotate -d /etc/logrotate.d/sample_log |
このコマンドでerrorなどのメッセージが出た場合、設定が間違っています。
強制実行
通常は1日が終わるまで待たなければいけなかったりするのですが、下記コマンドで強制的に実行できます。こういうテスト機能があるのはすごくありがたいですね・・・
1 |
logrotate -f /etc/logrotate.d/sample_log |
ちなみに一度実行すると実行記録が /var/lib/logrotate.status に残ります。
ここで本日分がすでに実行されていますと動きません。一度実行したら前日に書き換えてあげましょう。
logrotateでログファイルがローテーションされない事への対処
ログが消える・・
rotate n を設定しないといきなりログファイルが消えます。注意しましょう。
ログローテーションの実行時間については下記リンクで説明されています。