Linuxログローリングカットとlogrotate
ログローリングの紹介
ログはオンラインサービスの非常に重要な部分です。さまざまなサービスは、nginxアクセスログ、ビジネスシステムフローログ、さまざまなエラーログなど、実行中に自分自身の操作ログを常に記録しています。これらのログは通常、異なるログファイルに保存され、ログファイルのサイズは実行時間が増えるにつれて増加します。
しかし、オンラインサーバーのディスクスペースは限られており、ログファイルのサイズが増え続けると、最終的にディスクスペースが不足することになります。この問題を解決するには、ログに対してローリングカットを実行する必要があります。
具体的には、ローリングカットは次のことを行います。
- 特定のスクロールルールを設定する(時間またはボリュームなど)
- ルールが満たされたときに現在のログを履歴ログに変更し、新しいログファイルを現在のログファイルとして生成する
- 履歴ログファイルが多すぎる場合は、古いログファイルを自動的にクリーンアップする
これにより、元の大きなログファイルは一定期間ごとにカットされ、小さなログファイルの束になり、総ログ履歴は基本的に安定して変化しないため、ログが増え続けてディスクスペースを占有することを心配する必要はありません。
logrotateの使用方法
ほとんどのLinuxディストリビューションには、logrotateツールが組み込まれており、logrotateルールを設定し、古いログファイルを自動的にクリーンアップすることが簡単になっています。
logrotateの設定ファイルは次のとおりです。
/etc/logrotate.confメインの設定ファイル/etc/logrotate.dディレクトリには、多くの特定のlogrotate設定ファイルを保持できます
ログローリングカットルールを設定する必要がある場合は、/etc/logrotate.dの下に新しい設定ファイルを作成できます。たとえば、/etc/logrotate.d/nginxの場合、このファイルの内容は次のようになります。
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root root
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 \`cat /var/run/nginx.pid`
endscript
}この設定ファイルの意味は次のとおりです。
daily1日ごとにロールオーバーするmissingokファイルが存在しない場合はロールバックしないrotate 7最後の7つのログファイルを保持するcompressログファイルを圧縮するdelaycompress圧縮を遅延させるnotifemptyファイルが空の場合はロールバックしないcreate 640 root root新しいログファイルの所有者とアクセス許可を指定する。特に、nginxがrootユーザーによって実行されていない場合sharedscriptsスクリプトを共有し、ログのスクロールが完了した後にスクリプトを実行します。そうでない場合、各ログファイルのスクロールごとにスクリプトを実行する必要があります。postrotateログのスクロールが完了した後に実行されるスクリプト。一部のビジネスログには、このスクリプトが必要ない場合があります。
ログローリングカットルールの設定が完了したら、logrotate -dを使用してルールを確認できます。たとえば、
logrotate -d /etc/logrotate.d/nginx次のようなものが返されます。
reading config file /etc/logrotate.d/nginx
Allocating hash table for state file, size: 15360 B
Handling 1 logs
rotating pattern: /var/log/nginx/*.log after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/*.log /access.log
log does not need rotating (log has been already rotated)
considering log /var/log/nginx/*.log /error.log
log does not need rotating (log has been already rotated)
running postrotate script
......エラーがない場合は、設定ファイルが正しいことを意味します。
すぐに結果を確認したい場合は、logrotate -fを使用してスクロールカットを強制できます。たとえば、
logrotate -f /etc/logrotate.d/nginxその他のパラメータ
compressローリング後に履歴ログを圧縮するnocompressローリング後に履歴ログを圧縮しないcopytruncate現在のログファイルをバックアップして切り捨てるために使用されます。コピーしてから空にする方法であり、コピーと空にする間に時間的なギャップがあり、一部のログデータが失われる可能性があります。nocopytruncateログファイルをバックアップしますが、切り捨てませんcreate mode owner group新しいファイルを作成するときの所有者とアクセス許可を指定しますnocreate新しいログファイルを作成しないdelaycompressとcompressを一緒に使用すると、次のロールオーバーまで履歴ログファイルを圧縮しますnodelaycompressはdelaycompressオプションを上書きし、ローリングベースで圧縮しますmissingokログがない場合、エラーを報告せずに次のログにスクロールしますerrors addressスクロール時にエラーメッセージを指定されたメールアドレスに送信しますifemptyログファイルが空でもスクロールしますnotifemptyログファイルが空の場合はスクロールしないmail addressスクロールされたログファイルを指定されたメールアドレスに送信しますnomailスクロール時にログファイルを送信しないolddir directoryスクロールされたログファイルを指定されたディレクトリに配置します。現在のログファイルと同じファイルシステムにある必要がありますnoolddirスクロールされたログファイルは、現在のログファイルと同じディレクトリに配置されますsharedscriptsスクリプトを共有し、ログのスクロールが完了した後にスクリプトを実行します。そうでない場合、各ログファイルのスクロールごとにスクリプトを実行する必要があります。prerotateスクロール前に実行されるコマンド(ファイルのプロパティを変更するなど);別の行でなければなりませんpostrotateロールオーバー後に実行されるコマンド(サービスを再起動するためのkill -HUPなど);別の行でなければなりませんdailyローリング期間が1日であることを指定しますweeklyローリング期間が1週間であることを指定しますmonthlyローリングサイクルが1か月であることを指定しますrotate countログファイルが削除される前にロールオーバーされる回数を指定します。0はバックアップが保持されないことを意味し、5は5つのバックアップが保持されることを意味しますdateext現在の日付を名前の形式として使用しますdateformat . %sは、dateextと一緒に使用され、次の行の直後に表示され、ファイル名を定義します。dateextと一緒に使用する必要があり、%Y/%m/%d/%sの 4 つのパラメーターのみをサポートしています。size log-size(またはminsize log-size)は、指定されたサイズに到達したときにログファイルをスクロールします。以下は正しいフォーマットです。size = 5またはsize 5(5 バイト以上の場合にスクロール)size = 100kまたはsize 100ksize = 100Mまたはsize 100M
