備忘録

Apache ローテーションの設定

2010年9月2日

apacheのログが3か月で600Mを超えてしまった……

このままだとログが肥大するだけなのである一定期間が過ぎると新しいログに置き換えるローテーションの設定を行おうと思います。

/etc/logrotate.d/apache2 を編集します。

/var/log/apache2/*log {
monthly ←年単位ならyearth ?月単位ならmonthに変更
rotate 120 ←何回分のログまで保持するか(120回(10年)分までログを保持)
missingok ←対象のファイルがなくても処理を行う
notifempty ←中身が空の場合ローテーションを行わない
sharedscripts ←この行以降に記述された処理をワイルドカードの指定に関わらず、1度だけ実行する
postrotate ←endscriptまでの処理を行う
/bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2> /dev/null || true
endscript
}

バーチャルホスト等でログがドメイン毎に異なる場合は
0行目のパス設定を「/var/log/apache2//log」など変更すればOKです。

/var/log/apache2/*/*log {
monthly
rotate 60
missingok
notifempty
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2> /dev/null || true
endscript
}

保存したあとに

/usr/sbin/logrotate /etc/logrotate.conf

を実行すればローテーションが適応されます。

ローテーションの情報は

cat /var/lib/logrotate.status

を行うことで確認できますし、ローテーションがきとんと行われているかどうか確認したい場合は

記載されている日付にローテーションで指定した日付以上前に設定すればよいです。

例えば

/var/lib/logrotate.statusで確認すると
"/var/log/apache2/*log" 2010-7-11

になっていた場合、(本日の日付が2011年7月12日の場合)

/var/log/apache2/*log? の設定はmonthlyだったので

"/var/log/apache2/*log" 2010-6-10

に変更しapatheを動かすとローテーションが作動します。

これで/var/log/apache2/ のlogが日付access_log-20100712となってればOKです。

-備忘録
-, ,