2010-09-14

【WEB】アクセスログ解析システムの自作

某アクセス解析サイトが、もうホントに止まってばっかりなので自前のアクセス解析システムを持とうかと思っています。
以前GIGAZINEで見たのだけど、「Visitors」っていうWebサーバのアクセスログを解析してHTMLを生成するプログラムが紹介されてた。
参考リンク: http://gigazine.net/index.php?/news/comments/20070305_visitors/
これをとりあえず使ってみることにしてみました。

それだけだといまいち面白くなかったので、「プログラム開発を行わず」にやってみてます。
で、どうやってるのかというとUNIXのシェルスクリプトでやっとります。

■システム内容
---
○仕様
1)システム上のルートディレクトリに解析したいサイト用のサブディレクトリを置く
2)システム上のルートディレクトリにバッチ処理用シェルスクリプトを置く
3)サイト用サブディレクトリが増えても2)のシェルスクリプトを書き換えが不要なものにする
4)1)で作ったディレクトリにログダウンロードとHTML生成シェルスクリプトを置く
5)1)で作ったディレクトリにログ置場用ディレクトリと生成したHTMLファイルを置く

ディレクトリ構成は下のような感じ
/サイト名1/access_log_YYYYMM.html
/サイト名1/logs_YYYYMM/access_log_DD.log
...
/サイト名N/access_log_YYYYMM.html
/サイト名N/logs_YYYYMM/access_log_DD.log
※YYYY:年4桁 MM:月2桁 DD:日2桁

仕様上2)のシェルスクリプト
#! /bin/sh
NOW_DIR=`pwd`/
for filename in `ls -1`
do
if [ -d ${filename} ]; then
"${NOW_DIR}${filename}/ftp.sh"
fi
done

仕様上3)のシェルスクリプト
#! /bin/sh
FTP_HOST_NAME="ホスト名"
FTP_USER_NAME="アカウント"
FTP_USER_PASS="パスワード"
LOCAL_DIR="/仕様1)で作ったサブディレクトリ/"
GET_DIR="/ホストのログ置場/"
ONE_DAY_AGO=`date --date '1 day ago' +%Y%m%d`
NOW_YEAR_MONTH=`date --date '1 day ago' +%Y%m`
NOW_DAY=`date --date '1 day ago' +%d`
FILE_NAME="access_log_${ONE_DAY_AGO}.gz"
STORE_DIR="${LOCAL_DIR}logs_${NOW_YEAR_MONTH}/"
STORE_FILE_NAME="${STORE_DIR}access_log_${NOW_DAY}"
REPORT_FILE_NAME="${LOCAL_DIR}access_log_${NOW_YEAR_MONTH}"

ftp -n ${FTP_HOST_NAME} << _EOF_ user ${FTP_USER_NAME} ${FTP_USER_PASS} bin lcd ${LOCAL_DIR} cd ${GET_DIR} get ${FILE_NAME} bye _EOF_ mkdir ${STORE_DIR} gunzip -c ${LOCAL_DIR}${FILE_NAME} > ${STORE_FILE_NAME}
visitors -A -m 50 ${STORE_DIR}* -o html > ${REPORT_FILE_NAME}.html
rm -f ${LOCAL_DIR}${FILE_NAME}
------
で、仕様上2)のシェルスクリプトをCRONに登録して1日1回実行する、としておけばOK。

Visitorsの性能なんだけども、
▼1ファイル16~18MB程度
▼同時処理ファイル数が5個
という環境でも1秒かからなかった。なかなかのスピードです。
とりあえず1ヶ月くらい動作させて問題がなかったら徐々に移行しようかと思ってます。

ZenBack

WebMoney ぷちカンパ