Apacheのログファイルを日付入りにする
Apacheのログファイルを日付入りにしたいと思ったので、設定などを調べてみたよ。
結論として、Ubuntuなら設定ファイルを1つ編集するだけでした。
ログファイルを分割するのは"logrotate"
ほとんどのディストリビューションには、ログファイルを分割するために “logrotate" と言うツールが用意されているようです。
うちのUbuntuにも、いつの間にか"logrotate"が入ってました。もし入って無かったら “apt-get install logrotate" でインストールしましょう。
logrotateの設定を変更する
logrotateは、グローバルな設定を “/etc/logrotate.conf" で定義するようです。
また個々のモジュールについては、"/etc/logrotate.d/" に個別に定義ファイルを追加・作成するようです。
うちのUbuntuでは、いつの間にか “/etc/logrotate.d/apache2" が追加されていました。
“/etc/logrotate.d/apache2″を編集する
元々の"/etc/logrotate.d/apache2″の内容は以下のようになっていました。
/var/log/apache2/*.log { weekly missingok rotate 52 compress delaycompress notifempty create 640 root adm 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 }
オプション詳細は他を当たってもらうとして、要は毎週rotateで1年分(52週)のログファイルを溜め込むってコトみたいです。
これを編集して以下のようにしました。
/var/log/apache2/*.log { daily dateext missingok rotate 31 compress delaycompress notifempty create 640 root adm 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 }
変更点は3個所で、"weekly"を"daily"に変更し、"dateext"を追加、"rotate 52″を"rotate 31″しました。
これで日ごとにログファイルが分割され、1ヶ月分のログを保持し、且つ古いログファイルには日付が付与されるようです。
logrotateを試してみる
設定ファイルを編集後、実際にlogrotateを実行し動作を確認しました。
$ sudo /usr/sbin/logrotate /etc/logrotate.conf
設定に問題がなければ、Apacheのログファイルが日ごとに分割されているはずです。
Apacheのログディレクトリの内容を確認します。
$ ls /var/log/apache2/ access.log deflate.log error.log other_vhosts_access.log access.log-20101028 deflate.log-20101028 error.log-20101028
無事に分割されているようです。
cronの設定を確認する
上記設定を済ませたあと、logrotateが毎日実行されるようにする必要があります
が、うちのUbuntuでは既に設定済みでした。
$ cat /etc/cron.daily/logrotate #!/bin/sh test -x /usr/sbin/logrotate || exit 0 /usr/sbin/logrotate /etc/logrotate.conf
色々と設定を確認してみて、Ubuntuさんがとても親切なコトに感心しました。良く出来てんな~。
ディスカッション
コメント一覧
まだ、コメントがありません