GNU/Linux >> Linux の 問題 >  >> Linux

ログローテーションユーティリティを理解する

ログは、使用状況を追跡したり、アプリケーションのトラブルシューティングを行ったりする場合に役立ちます。ただし、ログに記録される情報が増えると、ログファイルはより多くのディスク容量を使用します。時間の経過とともに、ログファイルは扱いにくいサイズに成長する可能性があります。ログファイルが大きいためにディスク領域が不足するのは問題ですが、ログファイルが大きいと、仮想サーバーのサイズ変更またはバックアップのプロセスが遅くなる可能性もあります。さらに、100万のログエントリをざっと見ていくと、特定のイベントを探すのが難しくなります。したがって、ログファイルを管理可能なサイズに抑え、古くなりすぎて役に立たなくなった場合は整理することをお勧めします。

幸い、logrotateユーティリティを使用するとログローテーションが簡単になります。 「ログローテーション」とは、アプリケーションの現在のログをアーカイブし、新しいログを開始し、古いログを削除することを指します。システムは通常、logrotateを1日1回実行し、実行すると、ディレクトリごとまたはログごとにカスタマイズできるルールをチェックします。

logrotateの仕組み

システムは、通常は毎日、スケジュールに従って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構成のサンプルとトラブルシューティングを参照してください。


Linux
  1. Linux – Unixのアクセス許可とファイルタイプを理解していますか?

  2. Logrotateを使用してログファイルを管理する方法

  3. UNIX のアクセス許可とファイルの種類について

  1. /etc/login.defs ファイルについて

  2. Mac ファイルのタイムスタンプについて

  3. Linux の /etc/profile 構成ファイルについて

  1. ファイル アクセスを追加のみに制限する

  2. cp -L 対 cp -H

  3. Logrotate が成功しました。元のファイルは元のサイズに戻ります