ログは、使用状況を追跡したり、アプリケーションのトラブルシューティングを行ったりする場合に役立ちます。ただし、ログに記録される情報が増えると、ログファイルはより多くのディスク容量を使用します。時間の経過とともに、ログファイルは扱いにくいサイズに成長する可能性があります。ログファイルが大きいためにディスク領域が不足するのは問題ですが、ログファイルが大きいと、仮想サーバーのサイズ変更またはバックアップのプロセスが遅くなる可能性もあります。さらに、100万のログエントリをざっと見ていくと、特定のイベントを探すのが難しくなります。したがって、ログファイルを管理可能なサイズに抑え、古くなりすぎて役に立たなくなった場合は整理することをお勧めします。
幸い、logrotateユーティリティを使用するとログローテーションが簡単になります。 「ログローテーション」とは、アプリケーションの現在のログをアーカイブし、新しいログを開始し、古いログを削除することを指します。システムは通常、logrotateを1日1回実行し、実行すると、ディレクトリごとまたはログごとにカスタマイズできるルールをチェックします。
システムは、通常は毎日、スケジュールに従ってlogrotateを実行します。ほとんどのディストリビューションでは、logrotateを毎日実行するスクリプトは /etc/cron.daily/logrotate
にあります。 。
一部のディストリビューションはバリエーションを使用します。たとえば、Gentooでは、logrotateスクリプトは /etc/cron.daily/logrotate.cron
にあります。 。
logrotateをより頻繁に実行する場合(たとえば、1時間ごとのログローテーションなど)、cronを使用して /etc/cron.hourly
のスクリプトを介してlogrotateを実行する必要があります。 。
logrotateを実行すると、構成ファイルを読み取って、ローテーションする必要のあるログファイルの場所、ファイルをローテーションする頻度、保持するアーカイブログの数を決定します。
logrotate.conf
メインのlogrotate構成ファイルは、 /etc/logrotate.conf
にあります。 。
このファイルには、logrotateがlogsを回転させるときに使用するデフォルトのパラメーターが含まれています。ファイルにはコメントが付けられているので、ファイルをざっと見て、構成がどのように設定されているかを確認できます。そのファイル内の特定のコマンドのいくつかについては、この記事の後半で説明します。
ファイルの1行は次のようになっていることに注意してください。
include /etc/logrotate.d
そのディレクトリには、ほとんどのアプリケーション固有の構成ファイルが含まれています。
logrotate.d
次のコマンドを使用して、アプリケーション固有のログ設定を格納するディレクトリの内容を一覧表示します。
ls /etc/logrotate.d
サーバーにインストールされている量に応じて、このディレクトリにはファイルが含まれていないか、複数含まれている場合があります。一般に、パッケージマネージャーを介してインストールされるアプリケーションは、 /etc/logrotate.d
にも構成ファイルを作成します。 。
通常、ディレクトリには、syslogサービスの構成ファイルが含まれています。logrotateは、システムログをローテーションするときにこのファイルを読み取ります。このファイルには、さまざまなシステムログのエントリと、 logrotate.conf
に含まれているものと同様のコマンドが含まれています。 。
注: Karmic Koala(9.10)より前のバージョンのUbuntuオペレーティングシステムでは、syslogサービスのエントリはありません。そのリリース以前は、システムログは savelog
によってローテーションされていました /etc/cron.daily/sysklogd
からコマンドを実行します スクリプト。
例として、ApacheをFedoraシステムにインストールするときに配置される可能性のあるlogrotate構成ファイルの内容を考えてみます。
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
logrotateを実行すると、 / var / log / httpd
内のファイルをチェックします。 log
で終わります 空でない場合は回転させます。 httpdディレクトリをチェックし、ログファイルが見つからない場合、エラーは生成されません。次に、 postrotate / endscript
でコマンドを実行します ブロック(この場合、Apacheに再起動するように指示するコマンド)。ただし、指定されたすべてのログを処理した後でのみ。
このサンプルファイルには、 logrotate.conf
に含まれているいくつかの設定が含まれていません ファイル。 logrotate.conf
のコマンド ログローテーションのデフォルトとして機能します。デフォルトを上書きする場合は、任意のアプリケーションに異なる設定を指定できます。たとえば、忙しいWebサーバーを使用している場合は、 daily
を含めることができます。 コマンドinApacheの構成ブロックを使用して、Apacheのログがデフォルトの毎週のローテーションではなく毎日ローテーションされるようにします。
次のセクションでは、logrotate構成ファイルで実際に実行される、より一般的に使用されるコマンドのいくつかについて説明します。
マニュアルページを確認すると、logrotate構成ファイルで使用されるコマンドの完全なリストを取得できます。
man logrotate
このセクションでは、より一般的に使用されるコマンドについて説明します。
/etc/logrotate.d
にあるアプリケーションの構成ファイルを覚えておいてください。 メインの/etc/logrotate.conf
からデフォルトを継承します ファイル。
ログファイルとそのローテーション動作は、ログファイル(または複数のファイル)の後に中括弧で囲まれた一連のコマンドをリストすることによって定義されます。ほとんどのアプリケーション構成ファイルには、これらのブロックの1つだけが含まれますが、ファイルに複数のブロックを入れたり、メインの logrotate.conf
にログファイルブロックを追加したりすることができます。 ファイル。
名前にワイルドカードを使用するか、リスト内のログファイルをスペースで区切ることにより、ブロックの複数のログファイルを一覧表示できます。たとえば、ディレクトリ/ var / foo内で、 .log
で終わるすべてのファイルを指定します。 、およびファイル /var/bar/log.txt
、次のようにブロックを設定します:
/var/foo/*.log /var/bar/log.txt {
rotate 14
daily
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl graceful > /dev/null
Endscript
}
回転 コマンドは、logrotateが古いログの削除を開始する前に返されるアーカイブログの数を決定します。例:
rotate 4
このコマンドは、一度に4つのアーカイブログを保持するようにlogrotateに指示します。ログを再度ローテーションしたときにアーカイブされたログが4つ存在する場合は、古いストーンが削除され、新しいアーカイブ用のスペースが確保されます。
回転間隔
特定のログをローテーションする頻度をlogrotateに指示するコマンドを指定できます。可能なコマンドは次のとおりです。
daily
weekly
monthly
yearly
ローテーション間隔が指定されていない場合、logrotateが実行されるたびにログがローテーションされます( size
などの別の条件がない限り) 設定されています。
定義された時間間隔以外の時間間隔を使用する場合は、cronを使用して別の構成ファイルを作成する必要があります。たとえば、特定のログファイルを1時間ごとにローテーションする場合は、 /etc/cron.hourly
にファイルを作成できます。 (そのディレクトリも作成する必要があるかもしれません)次のような行が含まれます:
/usr/sbin/logrotate /etc/logrotate.hourly.conf
次に、logrotateを1時間ごとに実行するための構成(ログファイルの場所、古いファイルを圧縮するかどうかなど)を/etc/logrotate.hourly.conf
に配置します。 。
サイズ
size
を使用できます ローテーションを実行するかどうかを決定するときにチェックするlogrotateのファイルサイズを指定するコマンド。コマンドの形式は、サイズを指定するために使用している単位をlogrotateに指示します:
size 100k
size 100M
size 100G
最初の例では、ログが100キロバイトを超える場合はローテーションし、2番目の例は100メガバイトを超える場合、3番目の例は100ギガバイトを超える場合にローテーションします。 100Gの制限を使用することはお勧めしません。この例では、少し手に負えなくなっています。
sizeコマンドが優先され、両方が設定されている場合は回転間隔が置き換えられます。
圧縮
アーカイブされたログファイルを(gzip形式で)圧縮する場合は、通常は /etc/logrotate.conf
に次のコマンドを含めることができます。 :
compress
ログファイルは通常すべてテキストであり、テキストは適切に圧縮されるため、通常は圧縮をお勧めします。ただし、圧縮したくないアーカイブログがあり、それでもデフォルトで圧縮をオンにしたい場合は、アプリケーション固有の構成に次のコマンドを含めることができます。
nocompress
圧縮に関するもう1つの注意点は、次のとおりです。
delaycompress
このコマンドは、アーカイブされたログを圧縮したいが、圧縮を遅らせたい場合に役立ちます。 delaycompress
の場合 がアクティブな場合、次にログがローテーションされるときに、archivedlogが圧縮されます。これは、新しいファイルがローテーションされた後もしばらくの間、古いログファイルに書き込む可能性のあるプログラムがある場合に重要になる可能性があります。 delaycompress
に注意してください。 compress
がある場合にのみ機能します 構成内。
delaycompress
を使用する良い機会の例 logrotateisが「graceful」または「reload」ディレクティブを使用してApacheを再起動するように指示された場合です。古いApacheプロセスは接続が終了するまで終了しないため、再起動後しばらくの間、古いファイルにさらに多くのアイテムを記録しようとする可能性があります。圧縮を遅らせることで、ログがローテーションされたときに余分なログエントリが失われることがなくなります。
後回転
Logrotateはpostrotate
を実行します 構成ブロックで指定されたログをローテーションするたびにスクリプトを作成します。通常、このスクリプトを使用して、ログローテーション後にアプリケーションを再起動し、アプリが新しいログに切り替えられるようにします。
postrotate
/usr/sbin/apachectl restart > /dev/null
endscript
> / dev / null
logrotateにコマンドの出力をどこにもパイプしないように指示します。この場合、アプリケーションが正しく再起動されていれば、出力を表示する必要はありません。
postrotate
コマンドはlogrotateに、スクリプトを実行し、次の行から開始し、 endscript
を実行するように指示します。 コマンドは、スクリプトが完了したことを示しています。
共有スクリプト
通常、logrotateは postrotate
を実行します ログをローテーションするたびにスクリプトを実行します。これは、同じ構成ブロックを使用する複数のログにも当てはまります。たとえば、アクセスログとエラーログの両方を参照するWebサーバー構成ブロックは、両方をローテーションする場合、 postrotate
を実行します。 スクリプトを2回(ローテーションされたファイルごとに1回)。両方のファイルがローテーションされると、Webサーバーは2回再起動されます。
logrotateがすべてのログに対してそのスクリプトを実行しないようにするには、次のコマンドを含めることができます。
sharedscripts
このコマンドは、 postrotate
を実行する前に、その構成ブロックのすべてのログをチェックするようにlogrotateに指示します。 脚本。ログの一方または両方がローテーションされる場合、 postrotate
スクリプトは1回だけ実行されます。ログがローテーションされていない場合は、 postrotate
スクリプトが実行されません。
次に進む場所
この記事では、logrotateの機能と、使用可能な構成オプションの種類の概要を説明します。これで、既存の構成を調べて、ニーズに適合させることができるはずです。構成例を作成する方法(カスタム仮想ホストのログをローテーションする方法)については、logrotate構成のサンプルとトラブルシューティングを参照してください。