2004年11月23日
Webアクセス解析analogのログファイル指定方法
Apacheのアクセスログ管理で、ログファイルを毎日ローテーションして、ログファイル名に日付を入れる方法を紹介した。そこで更に、アクセス解析のツールであるanalogで、こうしたログファイルを指定する方法をまとめる。先月一ヶ月分と過去7日分をまとめて処理する場合について述べる。
まず、先月一ヶ月分のアクセスをまとめて分析する場合について述べる。
analogにはログファイルを指定するLOGFILEコマンドがある。LOGFILEコマンド中には、analogが実行された日時かTOコマンドで指定された日時を示す変数を用いることができる。使える変数には次のようなものがある。
%D date of month
%m month name, in English
%M month number
%y two-digit year
%Y four-digit year
%H hour
%n minute
%w day of week, in English
先月一ヶ月分のログファイルを処理対象としたい場合は、設定ファイルに次のように指定する。アスタリスク(*)を指定するとワイルドカードとして扱われる。
FROM -00-0101
TO -00-0131
LOGFILE /var/log/httpd-access/httpd-access.log.%Y%M*
また、非圧縮ファイルと圧縮済みファイルが混ざっていても、次のように指定しておけば拡張子に応じてanalogが判断して処理を適切に行ってくれる。
UNCOMPRESS *.bz2 /usr/bin/bzcat
次に、最近7日間分のアクセスをまとめて分析する場合について述べる。
さきほどのLOGFILEコマンド中で使った日時を示す変数は、残念ながら特定の一日しか表現できない(TOコマンドの場所や値によらず)。そのため、この変数を活用して過去7日間という指定をすることはできない。そこで、シェルスクリプトを使ってanalogの引数としてLOGFILEコマンドを与えることで、より柔軟なログファイルの指定が可能となる。
analogを実行するためのスクリプトanalog.shを次のように準備し、これを実行するようにする。
# vi analog.sh
#!/bin/sh
LOGFILE='/var/log/httpd-access/httpd-access.log'
PAST7DAYS=`date -v-7d +%Y%m%d`
PAST6DAYS=`date -v-6d +%Y%m%d`
PAST5DAYS=`date -v-5d +%Y%m%d`
PAST4DAYS=`date -v-4d +%Y%m%d`
PAST3DAYS=`date -v-3d +%Y%m%d`
PAST2DAYS=`date -v-2d +%Y%m%d`
PAST1DAYS=`date -v-1d +%Y%m%d`
cd /home/toshikazu/public_html/analog/daily
/usr/local/bin/analog \
-C'LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r%wHTTP%j" %c %b "%f" "%B")' \
-C'LOGFORMAT (%S %j %u [%d/%M/%Y:%h:%n:%j] "%j%w%r" %c %b "%f" "%B")' \
-C"LOGFILE $LOGFILE.$PAST7DAYS" \
-C"LOGFILE $LOGFILE.$PAST6DAYS" \
-C"LOGFILE $LOGFILE.$PAST5DAYS" \
-C"LOGFILE $LOGFILE.$PAST4DAYS" \
-C"LOGFILE $LOGFILE.$PAST3DAYS" \
-C"LOGFILE $LOGFILE.$PAST2DAYS" \
-C"LOGFILE $LOGFILE.$PAST1DAYS" \
-G +gconfig/analog.cfg > log 2>&1
../analogurldecode.pl index-sjis.html > index.html
日付の生成には、システム付属のdateコマンドを使っている。また、analogの設定ファイルが同ディレクトリのanalog.cfgファイルであるとしている。LOGFORMATは、LOGFILEより先に置く必要がある。そのため、LOGFORMATを指定する場合は、analog.cfgではなくanalog.shに記述しなければならない。
最後に、これらの設定ファイルとスクリプトを準備して、crontabに登録しておけば、毎日自動的に解析が行われる。
# crontab -e
# 01:00 every day
0 1 * * * /home/toshikazu/public_html/analog/daily/analog.sh > /dev/null 2>&1
おまけ: analogのインストール方法
次のコマンドを実行すると、インストールが行われ、設定ファイルの雛形が/usr/local/etc/analog.cfgに置かれる。
# portinstall www/analog