ログ解析ツール (AWStats) のインストール

AWstats のインストールを行い Web サーバ (Apache) のログを解析します。


[1] httpd.conf の修正

httpd.conf の CustomLog ディレクティブのフォーマット指定が combined と なっていない場合は修正を行います。

CustomLog /var/log/apache/access_log combined

[2] AWStats の入手

AWStats official web site から ファイルを入手します (2007/07/03 現在の stable version 最新は 6.7 です)。
ダウンロードしたファイルは適当なディレクトリにて解凍します。

$ tar -zxf awstats-6-7.tar.gz
$ cd awstats-6.7/

[3] ファイルの展開

Apache の cgi-bin ディレクトリに AWStats 用のディレクトリを作成し、 wwwroot/cgi-bin ディレクトリ以下のファイルをコピーします。
(Apache の cgi-bin ディレクトリを /home/web/cgi-bin とします)

$ mkdir /home/web/cgi-bin/awstats
$ cp -r wwwroot/cgi-bin/* /home/web/cgi-bin/awstats/

Apache がアクセス出来る場所に wwwroot/icon ディレクトリを コピーします。 今回の例では DocumentRoot 直下にコピーします。
(Apache の DocumentRoot を /home/web/htdocs とします)

$ cp -r wwwroot/icon /home/web/htdocs/

データ保存用のディレクトリを作成します。 今回の例では /home/web/awstats_data とします。

$ mkdir /home/web/awstats_data

[4] awstats.conf の編集

AWStats の設定ファイルは awstats.model.conf という雛型が用意されて いますので、awstats.conf とリネームし使用環境に合わせて編集します。

$ cd /home/web/cgi-bin/awstats
$ cp awstats.model.conf awstats.conf

主な編集項目は以下の通りとなります。

LogFile
Apache のログファイルの位置を指定します。 今回の例では logrotate にてローテートされたログファイルを解析対象とします ので (access_log ではなく) access_log.1 を指定します。

LogFile="/var/log/apache/access_log.1"

SiteDomain
Web サイト名を指定します。

SiteDomain="www.example.com"

DNSLookup
DNS の逆引き (ホスト名を表示) を完全に行う設定とします。

DNSLookup=1

DirData
データ保存用ディレクトリの位置を指定します。

DirData="/home/web/awstats_data"

DirCgi
AWStats のディレクトリを相対 URL で指定します。

DirCgi="/cgi-bin/awstats"

[5] 検索文字列の文字化け対策

検索文字に日本語が使用された場合は、文字コードの違いから文字化けを起こし 正しく表示されないことがありますので、 Jcode.pm のインストールと awstats.pl の修正を行い、検索文字を正しく 表示出来るようにします。

なお、Perl 5.8.0 以上の環境では Jcode の全機能が Encode に標準装備となった ため (機能面では) Jcode.pm のインストールは不要なのですが、awstats.pl に 対する変更が簡単ですので Jcode.pm を利用することにします。

最初に Jcode.pm のインストールを行います。

$ tar -zxf Jcode-2.06.tar.gz
$ cd Jcode-2.06/
$ perl Makefile.PL
$ make
$ make test
# make install 2>&1 | tee install.log

次に awstats.pl の修正を行います。
先頭 (17 行目) の use Socket; に続けて use Jcode; の記述を追加します。

use Socket;
use Jcode;


#-------------------------------------------------------------------------------
# Defines
#-------------------------------------------------------------------------------
use vars qw/ $REVISION $VERSION /;

DecodeEncodeString サブルーチン (4380 行目付近) に Jcode::convert で 変換を行う処理を追加します。

sub DecodeEncodedString {
    my $stringtodecode=shift;
    $stringtodecode =~ tr/\+/ /s;
    $stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg;
    Jcode::convert(\$stringtodecode, "utf8");
    return $stringtodecode;
}

[6] AWStats の起動

AWStats をコマンドラインから実行し結果を確認します。

$ cd /home/web/cgi-bin/awstats/
$ ./awstats.pl -config=awstats.conf -update

コマンド実行後、以下のようなメッセージが出力されます。

Create/Update database for config "./awstats.conf" by AWStats version 6.7 (build 1.892)
From data in log file "/home/tohyama/access_log.1"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 414
 Found 0 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 414 new qualified records.

ブラウザで http://www.example.com/cgi-bin/awstats/awstats.pl にアクセスし、 解析結果画面が正しく表示されれば OK です。


[7] 解析内容の更新

今回の例では Apache のログが logrotate にて daily でローテートされて いることを仮定しています。
ですので、1 日 1 回、ログのローテート後に AWStats の解析内容の 更新を cron で行います。

$ crontab -e

cron の設定内容は以下の通りとなります。 logrotate (cron.daily) の実行は 4:02 となっていますのでその後少し 時間をずらして awstats.pl を実行しています。

# AWStats
10 4 * * * /home/web/cgi-bin/awstats/awstats.pl -config=awstats.conf -update

戻ります