web-dev-qa-db-ja.com

Webサーバーのログファイルが大きくなりすぎないようにするにはどうすればよいですか?

注:私はApache2(Linux上)を使用していますが、これを一般的に達成するための「最良の」方法も知りたいので、一般的な意味で(Linuxのみ)質問しました(私はNginxまたはCherokeeに大規模なサイトをデプロイしようとしています。

私のログファイルはほんの数週間で巨大になりつつあります。一時的に保管しておく必要がありますが、2週間程度前のエントリは削除したいのですが。これは可能ですか、どうすればよいですか?

3
orokusaki

Logrotateを使用できます。特定のサービスの構成ファイルに従ってログをローテーションします。通常、cronによって毎日実行されます。

/etc/logrotate.d/Apache2にあるApacheの設定ファイルの例

/var/log/Apache2/*_log {
 daily
 rotate 31
 missingok
 compress
 delaycompress
 sharedscripts
 postrotate
  if [ -f "`. /etc/Apache2/envvars ; echo ${Apache_PID_FILE:-/var/run/Apache2.pid}`" ]; then
     /etc/init.d/Apache2 reload > /dev/null
  fi
 endscript
 }

これは:

  • ログを毎日ローテーションする
  • 31個のローテーションされたログファイルを保持する
  • ローテーションされたログを圧縮しますが、最新のローテーションされたログは非圧縮のままにします(delaycompress)
  • プロセスをリロードします

プロセスを再読み込みしたくない場合は、copytruncateを使用する必要があります。これにより、現在のコンテンツが新しいファイルにコピーされ、圧縮されてから、現在のログファイルが切り捨てられます。この場合、sharedscriptspostrotate、およびendscriptは必要ありません。

8
Torian

ログを処理するための標準的なツールはlogrotateです。