Apacheログ · 1 min read · Jan 28, 2026

vloggerを使ったApacheログの分割

vloggerを使ったApacheログの分割

Version 1.0
Author: Falko Timme

Vloggerは、仮想ホストと日ごとに分割されたApacheログを書き込むための小さなツールです。vloggerを使用することで、グローバルApache設定に1つのCustomLogディレクティブを追加するだけで、各仮想ホストと日ごとのアクセスログが書き込まれます。したがって、Apacheの全体のアクセスログを毎日各仮想ホストのアクセスログに分割する必要はなく、仮想ホストごとに1つのアクセスログを書くようにApacheを設定する必要もありません(これにより、ファイルディスクリプタが非常に早く不足する可能性があります)。

このチュートリアルの最後では、Apacheアクセスログから統計を作成するためにwebalizerを使用する方法を示します。

私はこれがあなたにとって機能するという保証はしません!

1 前提条件

私は、Apache2がすでにインストールされて動作しているDebian Etchシステムでvloggerをテストしました。

2 vloggerのインストールと設定

vloggerをインストールするには、単に次のコマンドを実行します。

apt-get install vlogger

その後、/etc/apache2/apache2.confのLogFormat行(複数のLogFormat行があります - 少なくともcombinedと名付けられたものを変更してください)を変更する必要があります。最初に文字列%vを追加しなければなりません:

vi /etc/apache2/apache2.conf

| [...] #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined [...] |

次に、同じファイルに次のCustomLog行を追加します(LogFormat行の直後に配置できます):

vi /etc/apache2/apache2.conf

| [...] CustomLog "| /usr/sbin/vlogger -s access.log /var/log/apache2" combined [...] |

これが私たちの全Apache設定で必要な唯一のCustomLogディレクティブです。他のすべてのCustomLogディレクティブは無効にしてください、特に仮想ホストの設定では!

1つのアクセスログを書く利点は、特にサーバー上に高トラフィックのサイトがある場合、サーバーの負荷を大幅に軽減することです。

さて、Apacheを再起動します:

/etc/init.d/apache2 restart

vloggerは、/var/log/apache2ディレクトリに仮想ホストごとのサブディレクトリを作成し、ファイル名に現在の日付を含むアクセスログを作成します。また、現在のログファイルを指すaccess.logというシンボリックリンクも作成します。

www.example.comとwww.test.tldという2つの仮想ホストがあると仮定しましょう。次のように/var/log/apache2ディレクトリが見えるでしょう:

/var/log/apache2/
www.example.com/
06042007-access.log
06052007-access.log
06062007-access.log
access.log -> 06062007-access.log
www.test.tld/
06042007-access.log
06052007-access.log
06062007-access.log
access.log -> 06062007-access.log

CustomLog行に追加できる他のvloggerコマンドラインディレクティブについては、次を参照してください。

man vlogger

3 webalizerを使った統計の作成

この章では、分割されたログファイルからwebalizerを使用して統計を作成する方法を示します。再度、www.example.comとwww.test.tldという2つの仮想ホストがあり、これらの仮想ホストのドキュメントルートが/var/www/www.example.com/webと/var/www/www.test.tld/webであると仮定します(サーバー名がドキュメントルートパスに含まれていることが重要です。そうでないと、次の手順は機能しません)。統計を/var/www/www.example.com/web/statsと/var/www/www.test.tld/web/statsのディレクトリに入れたいので、これらはすでに存在している必要があります。

まず、webalizerをインストールしましょう:

apt-get install webalizer

次を参照して、webalizerの使い方を確認してください。

man webalizer

基本的に、昨日のアクセスログからwww.example.comの統計を作成するには、次のコマンドを使用できます:

/usr/bin/webalizer -c /etc/webalizer/webalizer.conf -n www.example.com \
-s www.example.com -r www.example.com -q -T -o /var/www/www.example.com/web/stats \
/var/log/apache2/www.example.com//bin/date -d "1 day ago" +%m%d%Y-access.log

( /etc/webalizer/webalizer.confはDebianのデフォルトのwebalizer.confの場所です。/bin/date -d “1 day ago” +%m%d%Yは、昨日の日付を必要な形式で正確に出力し、昨日のaccess.logをwebalizerに渡すことができます。)

もちろん、各仮想ホストに対して手動でこのコマンドを実行したくないので、/var/log/apache2ディレクトリを読み取り、ログがそのディレクトリにある各仮想ホストの統計を作成する小さなシェルスクリプトを書きます。スクリプトをwebstatsと名付け、/usr/local/sbinディレクトリに配置します:

vi /usr/local/sbin/webstats

| #!/bin/sh logdir=/var/log/apache2 webalizerconf=/etc/webalizer/webalizer.conf yesterdaysdate=`/bin/date -d "1 day ago" +%m%d%Y` cd ${logdir} for directory in * do if [ -d ${directory} ]; then /usr/bin/webalizer -c ${webalizerconf} -n ${directory} \ -s ${directory} -r ${directory} -q -T -o /var/www/${directory}/web/stats \ ${logdir}/${directory}/${yesterdaysdate}-access.log fi done exit 0 |

そのスクリプトを実行可能にする必要があります:

chmod 755 /usr/local/sbin/webstats

最後に、毎晩04:00に/usr/local/sbin/webstatsスクリプトを呼び出すcronジョブを作成します:

crontab -e

| 0 4 * * * /usr/local/sbin/webstats &> /dev/null |

cronジョブが最初に実行された後、www.example.com/statsとwww.test.tld/statsにアクセスして、ブラウザで統計を確認できます。統計ディレクトリを.htaccess/.htpasswdでパスワード保護することをお勧めします。

4 リンク

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。