images header
Index >> Plamo Linux Fan >> Apacheメモ >> Webalizerメモ
                Webalizerメモ
2002/08/11
1.目的

 Apache や Squid を運用していると、その膨大なログをどうやってチェックしたものか悩んでしまいます。どうやら誰でもそう思うようで、やっぱりそれを処理するアプリが世の中にはあるもんです。Apache の方で代表的なのは Analog というツールですが、Squid のログを処理できるという点で Webalizer というのを選んでみました。これでログ解析をしてみましょう。

2.入手先

Webalizerプライマリサイト
http://www.webalizer.org/

3.導入方法

 Webalizer を動かすには、GD が必要です。Plamo-2.x にはもちろん Contrib に用意されているのですが、ここではWebalizerにシェアードライブラリとしてではなくスタティックに組み込んでしまいましょう。そのためには、GDのソース一式が必要なので、プライマリサイトでもミラーでもいいので、どこかからソースアーカイブを持ってきてください。また、この GD を作成するために、libpng などが必要ですが、こちらも Plamo には用意されています。ですが、Plamo-2.1 では用意されているものではうまくコンパイルできません。setjmp.h が含まれていないというのがその理由です。解決方法がわからないのですが、どうも Plamo-2.1 に含まれている libpng は 2.0.1.3 というバージョンで、これがいけないのかと思い、libpng-1.0.14 を持ってきてこれをスタティックに利用することにしました。
 なお、ここで欲しいのは、Apache に PHP などをスタティックにリンクするときと同じように .a ファイルだけですので、make install はしないこととします。元々 Plamo には用意されているのですしね(^-^)b なお、Makefile は一部修正しました。赤字の部分が修正部分です。

$ tar xvfz libpng-1.0.14.tar.gz
$ cd libpng-1.0.14
$ cp scripts/makefile.std Makefile
$ make
$ cd ..
$ tar xvfz gd-1.8.4.tar.gz
$ cd gd-1.8.4
$ vi Makefile
$ cat Makefile | grep LIBDIRS=
LIBDIRS=-L. -L../libpng-1.0.14 -L/lib -L/usr/lib -L/(以下省略)
$ cat Makefile | grep INCLUDEDIRS=
INCLUDEDIRS=-I. -I../libpng-1.0.14 -I/usr/include -I/(以下省略)
$ make
$ cd ..

 これで準備完了です。では、本命の webalizer を導入しましょう。

$ tar xvfI webalizer-2.01-10.tar.bz2
$ cd webalizer-2.01-10
$ ./configure --enable-dns --with-gd=../gd-1.8.4 --with-png=../libpng-1.0.14 --with-language=japanese
$ make
$ su
Password:
# make install

 これで、/usr/local/bin/webalizer が出来あがります。
4.動作確認

 Webalizer は、通常以下のように使います。

/usr/local/bin/webalizer [ログファイル名]

 これで、カレントディレクトリに解析結果が作成されます。こんな感じです。

# /usr/local/bin/webalizer /usr/local/apache/logs/access_log

 これを、お手元のブラウザで眺めてみましょう。かっこいい解析結果ページが表示されればOKです。configure時に--with-japaneseを指定したので、グラフ以外の各部の表現が日本語になっているのがお分かりになると思います。

 もし、すでにローテートされたログファイル(access_log.x.gz等)が大量にある場合は、日付の古い順に処理しないと、処理されないようです。気をつけましょう。

# gunzip /usr/local/apache/logs/access_log.*.gz
# /usr/local/bin/webalizer /usr/local/apache/logs/access_log.4
# /usr/local/bin/webalizer /usr/local/apache/logs/access_log.3
# /usr/local/bin/webalizer /usr/local/apache/logs/access_log.2
# /usr/local/bin/webalizer /usr/local/apache/logs/access_log.1
# /usr/local/bin/webalizer /usr/local/apache/logs/access_log

 なお、Webalizer では HTTP_REFERER の処理が含まれていますが、Apache のログはデフォルトではこの値を含んでいません。そこで、Apache の方の設定で REFERER を残すように修正します。httpd.conf 内の以下の部分です。

CustomLog /usr/local/apache/logs/access_log combined
#CustomLog /usr/local/apache/logs/access_log common

 くれぐれも、元の行(上記の末尾 common の行)のコメントアウトを忘れないで下さい。

 さて、これでは、毎日自分で実行しなくてはならないので、cron を使って自動更新される様にしましょう。その場合は、conf ファイルに諸々設定します。サンプルの conf ファイルは、/etc にあるので、これをリネームして利用しましょう。

# mv /etc/webalizer.conf.sample /etc/webalizer.conf
# vi /etc/webalizer.conf

 以下、修正が必要なディレクティブをあげて見ます。他にもあったら適宜修正してください。
LogFile
デフォルトでは RedHat 系を睨んだディレクトリを設定してありますが、ソースから Apache を構築していれば /usr/local/apache/logs/access.log になるはずなので、修正が必要です。
OutputDir
同様に出力先のディレクトリも設定します。デフォルトなら、/usr/local/apache/htdocs/usage 等でいいでしょう。もちろんこのディレクトリは存在しなくてはなりませんから、Webalizer を実行したいユーザ権限で作成しておきます。例えば、webalizer というユーザを作って、このユーザに更新作業を行わせるなら、
# mkdir /usr/local/apache/htdocs/usage
# chown webalizer:users /usr/local/apache/htdocs/usage
# chmod 755 /usr/local/apache/htdocs/usage
などとしておきます。
Incremental
"yes" としておきます。単一のログファイルを解析するだけなら、デフォルトの"no"でいいのですが、運用中のWebサーバなら通常、ログファイルの肥大化による影響を避けるために logrotate などでログを定期的にパージしているはずですから、yes でないと統計的処理が出来なくなります。そのほうがいい方だけ、デフォルトのままにしてください。
HostName
出来あがるレポートのタイトルに埋め込まれるホスト名を指定したい場合は、記述してください。例えば、VirtualHost の Apache のログを解析する、とか、別ホストのログを解析するような場合は、設定する必要があるでしょう。ローカルホストのログを解析するなら、どちらでもいいかもしれません。
PageType
PHPを使っているサイトであれば、php3 とか php を追加しましょう。他にもページとして見て欲しいものがあれば追加しましょう。
UseHTTPS
同様に、https:を使っているサイトでは、これを"yes"にしましょう。

 修正した conf ファイルを保存します。そして、出力ディレクトリを持っているユーザの crontab で、Webalizer を定期的に実行するようにします。例えば、webalizer というユーザである場合、

# su webalizer
# crontab -e
0 0 * * * /usr/local/bin/webalizer

 これで毎日0:00になるとページが更新されます。Apache のログを logrotate でまわしている場合は、ログの更新時刻との関係に気をつけましょう。Webalizer の処理はすぐ終わるので、直前などでいいのではないかとおもいます。

5.複数ログの自動解析

 webalizer.conf を適切に設定すると、複数のログ(VirtualHostのApacheログやApacheログとSquidログなど)を別々に解析できます。 そのためには、まず、個別にwebalizer.confを用意してやる必要があります。その場合、もっとたくさんのディレクティブを修正しなくてはなりません。
 以下では、例としてApacheのログ解析とSquidのログ解析を行うケースを示します。

/etc/webalizer.apache.conf
LogFile /usr/local/apache/logs/access_log
OutputDir /usr/local/apache/htdocs/usage/apache
HistoryName /usr/local/apache/htdocs/usage/apache/webalizer.apache.hist
Incremental yes
IncrementalName /usr/local/apache/htdocs/usage/apache/webalizer.apache.current

/etc/webalizer.squid.conf
LogFile /usr/local/squid/logs/access.log OutputDir
/usr/local/apache/htdocs/usage/squid
HistoryName /usr/local/apache/htdocs/usage/squid/webalizer.squid.hist
Incremental yes
IncrementalName /usr/local/apache/htdocs/usage/squid/webalizer.squid.current

こんな感じにします。HistoryName IncrementalName は絶対パスでないとダメらしいので気をつけてください。
 そして、webalizerの呼び出し方も変えます。-c オプションを使って、これらの異なるコンフィグレーションファイルを呼び出しましょう。

0 0 * * * /usr/local/bin/webalizer -c /etc/webalizer.apache.conf
1 0 * * * /usr/local/bin/webalizer -c /etc/webalizer.squid.conf

 これで、それぞれのログを解析した結果は、それぞれのディレクトリに作成されるはずです。ブラウザで眺めてみましょう。

付録1.参考文献

WebalizerでApcheのログを解析してみる
Tomo's page 内のコンテンツです。
Webalizer の日本語化を試作する
fkimura's ほーむぺーじ内のコンテンツです。


Index >> Plamo Linux Fan >> Apacheメモ >> Webalizerメモ
images footer