ログ解析ツール (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