Apacheのログファイルを日付入りにする

Apache,Ubuntu

Apacheポケットリファレンス (POCKET REFERENCE)

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さんがとても親切なコトに感心しました。良く出来てんな~。