どのログローテーションツールを使用しますか?
私の経験では、logrotateは素晴らしいです。非常に柔軟で、ほとんどのソフトウェアで問題なく動作します。
ただし、いくつかの問題があり、cronologは主にWebログローテーション機能であるため、問題があったlogrotate + Apacheの経験を書き留めておきます。
ログをローテーションするときは、logrotateがaccess.logをaccess.log.1に名前変更しても、Apacheはinodeへの書き込みと同じようにaccess.log.1への書き込みを続行するため、ログがローテーションされていることをApacheに通知する必要があります。ファイルの名前を変更しても、iノード番号には影響しません。
Debian etch(およびおそらく他の多くのディストリビューション)では、Apacheログをローテーションするためにlogrotateが使用されています。現在、Apacheには グレースフルリスタート があり、Apacheの子プロセスに既存の接続の提供が終了すると終了するように通知し、Apacheはその構成を再度読み取り、新しい子プロセスを生成し、新しいログファイルへの書き込みを開始します。 (前のものを回転させた場合)。
これは素晴らしいソリューションのように聞こえますが、グレースフルリスタートが特定の条件(高負荷など)で常に機能するとは限らないため、Debian開発者は、Apache logrotate設定でグレースフルリスタートの代わりにApacheリスタートを使用することにしました。残念ながら、これによりすべての接続が一度にドロップされます。これは、負荷の高いサイトには非常に悪いことです。さらに、Apacheの再起動により、Apacheが停止したり、起動しないなどの問題が発生する可能性もあります(特定の負荷状況でも)。詳細については、以下のバグリンクを参照してください。
つまり、logrotateは優れていますが、特定のプログラムで特定の問題が発生する可能性があります。私はcronologの経験はあまりありませんが、パイプを介してログを書き込むため、ログファイルをローテーションするときにApacheをリロードする必要がなく、基本的に上記のすべてを解決します。
関連するlogrotate/Apache debianバグ:
私はクロノログを好むが、それは本当に強い好みではない。
logrotateはcronによって開始され、回転が発生したはずのシステムが何らかの理由でダウンした場合、ログファイルは回転されません。
また、ログファイルに長期間(%Y%m.combined.access.log)の名前が含まれていることも気に入っています。ほとんどのシステムでは、デフォルトで、Apache logrotateはファイルにaccess.log、access.log.1などの名前を付けます。 logrotateを使用してログファイルの日付を使用することは可能かもしれませんが、最後に見たときにどうすればよいかわかりませんでした。
Logrotateのみを使用しました。これは、Debianがデフォルトで使用するものであり、私はこれに関して不満を感じたことはありません。
私はほぼ独占的にcronolog
をlogrotate
よりも使用しています。 logrotate
はDebianに付属しており、メールサーバーログなどのシステムサービスで引き続き機能することを許可しています。ただし、Apacheおよびlighttpd
ログファイルの場合は、すべてcronolog
です。
私がcronolog
を使用する理由の1つは、すべての構成がWebサーバー構成のログファイル行で行われることです
例えばlighttpd
構成ファイルには、次のように記述できます。
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"
また、毎週、他の設定なしで新しいログファイルを取得します。または、創造的になって次のようなことをすることができます:
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"
また、曜日ごとのトラフィックを示すログファイルを取得します。例えばすべての日曜日、すべての火曜日。
さらに良いのは、サーバーが一定時間ダウンしていても、再起動時に正しいログファイルが使用されることです。