はじめに
ログを解析するにあたり、Apacheのログ形式をより詳細なものへ出力するように変更が必要となります。
デフォルトでは、common形式 になっていますので combined形式 へ変更をします。
CustomLog /usr/local/apache/logs/access_log common
↓変更
CustomLog /usr/local/apache/logs/access_log combined
この変更をすることでaccess_logにREFERER,エージェントなどの値もとることが出来るようになります。もちろん、Apacheの再起動を忘れずに。。。
詳しいログ形式はhttpd.confのログの定義にありますので httpd.conf解説 を参照ください。
ソースの入手
以下のURLから最新のソースを入手してください。
http://www.mrunix.net/webalizer/
今回はwebalizer-2.01-10-src.tgzをダウンロードしました。
ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.01-10-src.tgz
インストール
ここではwebalizer-2.01-10-src.tgzをダウンロードしたものとして説明します。
インストールするにあたりGDのソース一式が必要になります。
私の環境では、GDライブラリはRPMで入っていましたのですんなりインストールできました。入っていなければ別途インストールしてください。
$ tar xvfz webalizer-2.01-10-src.tgz
$ cd webalizer-2.01-10
$ ./configure --prefix=/usr/local/webalizer \
--with-language=japanese \
--enable-dns \
--with-db=/usr/include/db1
$ make
$ su
# make install
コンパイルオプションは以下の通りです。
--with-language 日本語表示
--enable-dns はIPアドレスをホスト名に変換するためのオプション
--with-db=/usr/include/db1 上記機能を利用するためにDNS機能を使うためにはバークレイDBライブラリを指定します。
これで/usr/local/webalizer/bin/webalizerがインストールされます。
設定ファイルの準備
展開したディレクトリ内の設定ファイル(sample.conf)をコピーして編集しましょう。
ここでは、/usr/local/webalizer/conf 以下に設定ファイルをコピーしましたが必要に応じて場所を変更してください。
# mkdir /usr/local/webalizer/conf
# cp sample.conf /usr/local/webalizer/conf/webalizer.conf
また、webalizerの出力先のディレクトリも用意します。
ここでは、/home/hoge/public_html/webalizer を作成しますが、環境に応じて作成してください。
# mkdir /home/hoge/public_html/webalizer
設定ファイル(webalizer.conf)の編集
設定ファイルwebalizer.confを編集します。
修正箇所は以下の通りです。
●ログの場所の定義
apacheのログの場所を定義します。
LogFile /usr/local/apache/log/access_log
●webalizerの出力先の定義
出力をするディレクトリの指定をします。
OutputDir /home/hoge/public_html/webalizer
●差分の集計方法を有効にする
apacheのログを毎回全て出力対象とすると時間もかかります。前回、検索した続きのみを出力対象とする為に定義をします。
Incremental yes
●ドメイン名の定義
動作しているサーバのURL(ドメイン名)を指定します。
HostName www.example.jp
●結果として出力するタイプの定義
基本的にhtmlファイルなどのページをカウントするようにします。全てのファイルを対象とする場合は*で指定してもよいでしょう。
PageType htm*
PageType cgi
PageType shtml
PageType php
●DNSキャッシュファイルの出力の定義
apacheのログで出力されているIPアドレスをHOSTネームに変換する為にDNSキャッシュファイルを出力する設定となります。
DNSCache dns_cache.db
●DNSキャッシュプロセス数
DNSキャッシュのプロセス数を指定します。1~100まで設定が出来るようですが5~10程度で十分だそうです。
DNSChildren 10
●出力ファイルのヘッダ情報の定義
検索文字列を表示するためにUTF-8として出力することも可能ですが私はeucとして表示するスクリプトを利用しますのでeucとして表示を定義します。
HTMLPre <meta http-equiv="content-type" content="text/html; charset=euc-jp">
HTMLHead <meta http-equiv="content-type" content="text/html; charset=euc-jp">
●除外リファラーの定義 (2004/5/24追加)
実際にログを集計してみるとリファラーの結果のほとんどが自サイトからのアクセスが記録されてしまいます。自サイトからのアクセスは除外する設定をしておきましょう。
HideReferrer www.example.com
●除外ファイルタイプの定義 (2004/5/24追加)
アクセスのカウントとして除外したファイルなどあれば定義します。例えばcssファイルなどがそれにあたります。
HideURL *.css
●検索エンジンの定義
HPの訪問者がどのような文字列で検索したかをリファラーから集計する為に、デフォルトで定義されている検索エンジンと日本で有名な検索エンジンも追加します。
SearchEngine yahoo.com p=
SearchEngine altavista.com q=
SearchEngine google.com q=
SearchEngine eureka.com q=
SearchEngine lycos.com query=
SearchEngine hotbot.com MT=
SearchEngine msn.com MT=
SearchEngine infoseek.com qt=
SearchEngine webcrawler searchText=
SearchEngine excite search=
SearchEngine netscape.com search=
SearchEngine mamma.com query=
SearchEngine alltheweb.com query=
SearchEngine northernlight.com qr=
SearchEngine infoseek.co.jp qt=
SearchEngine excite.co.jp search=
SearchEngine yahoo.co.jp p=
SearchEngine yahoo.co.jp q=
SearchEngine google.co.jp q=
SearchEngine goo.ne.jp MT=
SearchEngine biglobe.ne.jp q=
SearchEngine msn.co.jp q=
以上が修正内容となります。
解析結果を出力
webalizerを実行するには以下のコマンドを実行することで出力できます。
【書式】
# /usr/local/webalizer/bin/webalizer -c 設定ファイル
# /usr/local/webalizer/bin/webalizer -c \
/usr/local/webalizer/conf/webalizer.conf
定期的に集計するためにcrontabで1時間に一回程度、上記コマンドを実行しましょう。
しかし、出力結果で、検索文字列が文字化けしてしまう症状になってしまいませんか?
解消方法は事項で詳しく解説します。
検索文字列の文字化け対策(1)
ほとんどの検索エンジンでの検索文字列はUTF-8になっているため、文字化けが発生してしまいます。ここでは、出力されたファイルをUTF-8からeucに変更するスクリプトを作成します。
まず、/usr/local/webalizer/bin以下にdecode.plを以下のように作成します。
# Jcode.pmが必要となります。入っていなければCPANからダウンロードして導入してください。
#!/usr/local/bin/perl
use Jcode;
open (IN ,$ARGV[0]);
while (<IN>){
$_ =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Jcode::convert(\$_,euc);
print $_;
}
close (IN);
exit;
作成したスクリプトに実行権限を与え、以下のように実行します。
# /usr/local/webalizer/bin/decode.pl 変更するhtmlファイル > 出力先のファイル
とすればeucへ変更されます。
私は、いちいち面倒なので以下のようなスクリプトを作成しました。
よかったら利用してみてください。/usr/local/bin/webalizer/bin以下にwebalizer.plとして保存しました。
#!/usr/local/bin/perl
# 設定ファイル場所
$conf = '/usr/local/webalizer/conf/webalizer.conf';
# decode.plの設置場所
$decode = '/usr/local/webalizer/bin/decode.pl';
# 解析結果の出力先
$outdir = '/home/hoge/public_html/webalizer';
`/usr/local/webalizer/bin/webalizer -c $conf`;
@htmls = <$outdir/*.html>;
foreach (@htmls) {
$filename=$_;
`$decode $filename > $filename.euc`;
`mv $filename.euc $filename`;
}
exit;
このスクリプトをcronで定期的に実行することで文字化け問題も解消し、eucで出力されるようになります。
検索文字列の文字化け対策(2) (2005/1/26追加)
文字化け対策をWebalizerだけで完結するようにパッチを公開されている方もみえます。
webalizerの検索語の日本語対応の話
http://tyche.pu-toyama.ac.jp/~a-urasim/webalizer/
試しに適用したところ問題なく文字化け対策はできました。
こっちの方がスマートで、おすすめです。
当サイトの2004年4月の出力結果はこちら
# Basic認証がかかっていますが、ユーザ/パスワード共にguestでログインできます。
これでwebalizerのインストールは完了です。