「AWStatsをFreeBSDで動かす」で日本語化されているawstats68t_jpn.zipを使ってApacheのログを解析する。
| AWStatsをインストールするディレクトリ | /usr/local/awstats |
| 解析結果を出力するディレクトリ | /var/www/awstats |
インストール
awstats68t_jpn.zipをダウンロードして展開する。
# cd /usr/local/ # wget http://hobbit.ddo.jp/html/awstats68t_jpn.zip # unzip awstats68t_jpn.zip # rm awstats68t_jpn.zip
バージョンアップしやすいようにシンボリックリンクにする。
# ln -s AWStats68t_Jpn awstats
解析結果を出力するディレクトリを作成して必要なファイルをコピーする。
# cd awstats
# mkdir /var/www/awstats
# cp -r wwwroot/{css,icon,js} /var/www/awstats/
awstats68t_jpnの修正
awstats68t_jpnはWindowsで作られているので、少し修正する。
awstats.plに実行権限をつける。
# cd wwwroot/cgi-bin/ # chmod u+x awstats.pl
改行コードをLFにする。
# mv awstats.pl awstats.pl.orig # tr -d '\r' < awstats.pl.orig > awstats.pl
Perlのパスとスタイルシートのパス(DirCssを変更したときに反映されなかった)を修正。
# diff -uw awstats.pl.orig awstats.pl
--- awstats.pl.orig 2008-11-14 14:32:30.000000000 +0900
+++ awstats.pl 2008-11-18 22:07:53.000000000 +0900
@@ -1,4 +1,3 @@
-#!c:/perl/bin/perl
#!/usr/bin/perl
#------------------------------------------------------------------------------
# Free realtime web server logfile analyzer to show advanced web statistics.
@@ -1676,7 +1675,7 @@
$DirIcons||='/icon';
$DirJs||='/js';
$DirCss||='/css';
- $StyleSheet||='/awstatscss/awstats_bw.css';
+ $StyleSheet||=$DirCss.'/awstats_bw.css';
if ($DNSLookup !~ /[0-2]/) { error("DNSLookup parameter is wrong in config/domain file. Value is '$DNSLookup' (should be 0,1 or 2)"); }
if (! $SiteDomain) { error("SiteDomain parameter not defined in your config/domain file. You must edit it for using this version of AWStats."); }
if ($AllowToUpdateStatsFromBrowser !~ /[0-1]/) { $AllowToUpdateStatsFromBrowser=0; }
awstats68t_jpnのutf8_decode.plでは Unicode::Japanese が必要なのでCPANでインストールする。
# perl -MCPAN -e shell cpan> install Unicode::Japanese
設定
awstats.model.confをコピーして設定する。
# cd /usr/local/awstats/wwwroot/cgi-bin # cp awstats.model.conf awstats.parlia.net.conf # vi awstats.parlia.net.conf LogFile="/tmp/awstats_access.log" SiteDomain="www.parlia.net" HostAliases="REGEX[\.parlia\.net$]" DirData="/var/cache/awstats" DirIcons="./icon" DirJs="./js" DirCss="./css" DetailedReportsOnNewWindows=0 Lang="jp"
データベースファイルのディレクトリ(DirData)を作成。
# mkdir /var/cache/awstats
データベースファイルの更新
今あるログをすべて連結して/tmp/access.logに書き込む。
# ls /var/log/apache2/access.log* /var/log/apache2/access.log /var/log/apache2/access.log.2.gz /var/log/apache2/access.log.1 /var/log/apache2/access.log.20.gz /var/log/apache2/access.log.10.gz /var/log/apache2/access.log.21.gz /var/log/apache2/access.log.11.gz /var/log/apache2/access.log.22.gz /var/log/apache2/access.log.12.gz /var/log/apache2/access.log.3.gz /var/log/apache2/access.log.13.gz /var/log/apache2/access.log.4.gz /var/log/apache2/access.log.14.gz /var/log/apache2/access.log.5.gz /var/log/apache2/access.log.15.gz /var/log/apache2/access.log.6.gz /var/log/apache2/access.log.16.gz /var/log/apache2/access.log.7.gz /var/log/apache2/access.log.17.gz /var/log/apache2/access.log.8.gz /var/log/apache2/access.log.18.gz /var/log/apache2/access.log.9.gz /var/log/apache2/access.log.19.gz # echo -n > /tmp/access.log # for log in `ls -tr /var/log/apache2/access.log.*.gz` > do > gzip -d < $log >> /tmp/access.log > done # cat /var/log/apache2/access.log.1 >> /tmp/access.log
utf8_decode.plでログの検索語をUTF-8にする。awstats68t_jpnのutf8_decode.plはawstats_host.plを参照するので、awstats_host.plにホスト名を書き込んでから実行する。
# cd /usr/local/awstats/tools/ # echo '$Myhost = "parlia\.net";' > awstats_host.pl # perl utf8_decode.pl < /tmp/access.log > /tmp/awstats_access.log
データベースファイルの更新。
# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=parlia.net -update
解析結果の表示
過去分も含めてすべてHTMLファイルを出力する。
http://fedorasrv.com/awstats.shtml を参考にしてスクリプトを作成した。INIT=1 の場合、すべてのデータベースファイルからHTMLを作成する。
# vi awstats_buildhtml.sh
#!/bin/bash
INIT=1
SITE=$1
HTMLDIR=$2
APACHELOG=$3
AWSTATSDIR=/usr/local/awstats
DIRDATA=/var/cache/awstats
TEMPLOG=/tmp/awstats_access.log
reportbuild() {
cd $AWSTATSDIR/tools
perl awstats_buildstaticpages.pl -awstatsprog=$AWSTATSDIR/wwwroot/cgi-bin/awstats.pl \
-config=$SITE -dir=$HTMLDIR -update -year=$YEAR -month=$MONTH -builddate=$YEAR$MONTH
}
if [ $INIT -gt 0 ]; then
for log in `ls $DIRDATA/awstats*.$SITE.txt`
do
YEAR=`echo $log | sed -e 's/^.\+awstats[0-9]\{2\}\([0-9]\{4\}\)\..\+$/\1/'`
MONTH=`echo $log | sed -e 's/^.\+awstats\([0-9]\{2\}\)[0-9]\{4\}\..\+$/\1/'`
reportbuild
done
else
cd $AWSTATSDIR/tools
echo "\$Myhost = \"$SITE\";" | sed 's/\./\\./g' > awstats_host.pl
perl utf8_decode.pl < $APACHELOG.1 > $TEMPLOG
perl utf8_decode.pl < $APACHELOG >> $TEMPLOG
YEAR=`date --date '1 days ago' +%Y`
MONTH=`date --date '1 days ago' +%m`
reportbuild
fi
実行権限をつけて実行。HTMLファイルを作成する。/var/www/awstatsにawstats.parlia.net.200811.htmlなどができる。
# chmod u+x awstats_buildhtml.sh # ./awstats_buildhtml.sh parlia.net /var/www/awstats
普段は、INIT=0 にして更新分だけHTMLファイルを作成するようにする。
# vi awstats_buildhtml.sh INIT=0
毎日実行するようにcronに登録。
# vi /etc/crontab 1 0 * * * root /root/awstats_buildhtml.sh parlia.net /var/www/awstats /var/log/apache2/access.log > /dev/null
[12/11 追記] GeoIPプラグインを使う
GeoIPを使うとIPアドレスから国や都市などの地理情報を取得できる。ここではGeoLite Countryを使って国名を表示できるようにする。
libgeo-ip-perl(Geo::IPモジュール)とlibgeoip1(GeoIP.dat)のインストール。
# apt-get install libgeo-ip-perl libgeoip1
confファイルの編集。
# vi /usr/local/awstats/wwwroot/cgi-bin/awstats.parlia.net.conf LoadPlugin="geoip GEOIP_STANDARD /usr/share/GeoIP/GeoIP.dat"
libgeoip1のGeoIP.datの精度が悪いので、GeoLite CountryからGeoIP.datをダウンロードして置き換える。
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz # gzip -d GeoIP.dat.gz # mv GeoIP.dat /usr/share/GeoIP/GeoIP.dat
トラックバックURL
1件のトラックバック
[...] 前に書いたものを少し修正。過去のログをすべてHTMLにせずに、CGIを使う方法にした。 AWStatsをFreeBSDで動かすのawstats695t_jpn.zipを使用。 [...]