HOME | Linux | XML | Network

Webalizerによるログ解析

ログを解析しグラフィカルなWebページを生成するソフトウェア、Webalizerを用いてApacheのアクセスログを解析する方法を紹介します。
以下の環境で動作確認しました。

ダウンロード

WebAlizerをダウンロードページからダウンロードします。
Standard Unix archive (.tar.Z)をダウンロードします。ダウンロードしたファイルは/home/rev/(自分のホームディレクトリ)以下に保存します。

保存したファイルを展開します。
$ tar xvfz webalizer-2.01-10-src.tar.Z

インストール

展開すると、/home/rev以下にwebalizer-2.01-10というディレクトリが生成されます。 configureを実行します。ここでは、prefixでインストール先を/usr/local/webalizer201とします。また、Webalizerは国際化に対応しているので--with-languageオプションでjapaneseを指定します。
RedHat Linux7.2の場合、configure前にdns_resolv.cを編集します。
$ vi webalizer-2.01-10/dns_resolv.c
変更前)
#include <db.h>
変更後)
#include <db1/db.h>
$ cd webalizer-2.01-10
$ ./configure --prefix=/usr/local/webalizer201 --with-language=japanese --enable-dns
$ make
rootになり、make installします。
$ su -
# cd /home/rev/webalizer-2.01-10
# mkdir -p /usr/local/webalizer/{bin,man/man1}
# make install

初期設定

インストール後、設定ファイル webalizer.conf.sampleが /etc に生成されます。
このwebalizer.conf.sampleをwebalizer.confにリネームし、それをログ解析を行う環境に合わせて修正します。

LogFile       --> Apacheのアクセスログファイルの場所を絶対パスで記述
OutputDir     --> 解析結果HTMLファイルの出力場所を絶対パスで記述
HostName      --> サーバのホスト名を記述(解析結果ページに表示される)

ログ解析[WebArena編]

NTTPCコミュニケーションズが提供する共有ホスティングサービス WebArenaのアクセスログ解析を行う設定をします。
WebArenaのアクセスログは /log に1日分のログを1ファイルで生成し、翌日にはgz形式で圧縮されます。圧縮ファイルは、access.log.1.gz、access.log.2.gz・・・というようにリネームされ保存*1されます。
このaccess.logファイルを毎日ダウンロードしてWebalizerで解析しても、その日1日分のみの解析結果となり過去の統計は残りません。
そこで、前日にダウンロードしたaccess.logに新たにダウンロードしたaccess.log.1.gzを解凍しcatコマンドで結合します。結合したものはそれまでの累積となります。。これを毎日繰り返せば、過去の統計を残すことができます。

*1:ログファイルを保存するか否か等の設定は管理画面にて行います。


FTPのための準備をします。リスト1をftp.shというファイル名で、/etc/webalizer/example.jp/ftp.sh に保存します。
パスワードとexample.jpは、それぞれ自分のものと置き換えます。

リスト1:ftp.sh
open ftp.example.jp
user admin パスワード
cd log
get access.log.1.gz
quit

次に、ログをダウンロードするディレクトリや、リスト1のスクリプトの場所を指定します。リスト2をstat.shというファイル名で、ftp.shと同じ/etc/webalizer/example.jp/stat.sh に保存します。
リスト2:stat.sh
#!/bin/sh

# User Data
DIR=/etc/webalizer/example.jp
FTP=$DIR/ftp.sh
. /etc/webalizer/GetAccesslog.sh

最後にFTPスクリプトの実行と、ログファイルの結合処理です。リスト2の最後にあるように、GetAccesslog.shというファイル名で/etc/webalizer/GetAccesslog.shに保存します。
リスト3:GetAccesslog.sh
#!/bin/sh

# FTP login and get access.log.
cd $DIR
ftp -n < $FTP

gunzip -d $DIR/access.log.1.gz
mv $DIR/access.log $DIR/access.log.tmp
cat $DIR/access.log.tmp $DIR/access.log.1 > $DIR/access.log
rm -f $DIR/access.log.1

GetAccesslog.sh では、まず cd コマンドで stat.sh で指定したディレクトリ /etc/webalizer/example.jp へ移動します。
次に ftp コマンドを実行します。ftp コマンドでは -n オプションをつけることで etc/webalizer/example.jp/ftp.sh の中身を実行することができます。 FTPコマンドにより、access.log.1.gz が /etc/webalizer/example.jp に保存されます。
保存したファイルは、gzフォーマットで圧縮されているため gunzip コマンドで解凍します。
次の行で、mv コマンドにより access.log というファイルを access.log.tmp にリネームしています。これは、前日に結合した access.log を今日ダウンロードしたファイルと結合するための一時ファイルとするための処理です。(前日分のファイルがない場合は、この行がエラーになりますが問題ありません)
そして、cat コマンドにより一時ファイルと解凍したファイルを結合し access.log を作成します。
最後に、不要になったファイルを削除します。

ファイルのパーミッションは、stat.shとGetAccess.shに 実行権限を与えておきます。
# chmod 700 /etc/webalizer/GetAccesslog.sh
# chmod 700 /etc/webalizer/example.jp/stat.sh
これで、/etc/webalizer/example.jp/stat.sh を実行するとログファイルのダウンロードから結合までが自動化されます。
ただし、これは FTP処理が成功することを前提にしています。エラー処理はしていません。ダウンロードに失敗したらもう一度やり直す必要があります。(^^;

ログ解析[一般的なサーバ編]

一般的なログ解析の手順は以下のようにcronで定期的にwebalizerを実行するだけです。

# vi /etc/cron.daily/webalizer
# chmod 700 /etc/cron.daily/webalizer
/etc/cron.daily/webalizerは、以下のようになります。
#!/bin/sh

/usr/local/webalizer/bin/webalizer -c /etc/webalizer.conf > /dev/null
解析結果HTMLが出力されるディレクトリが、public_html以下など外部から参照できる場所にあり公開したくない場合は.htaccessなどでアクセス制限を行うとよいでしょう。

Last Update Thu, 08/21/2003 3:34
HOME | Linux | XML | Network

Copyright © 2003 Rev System All right reserved.