Hello Guest    ログイン
top > Linux > Apache > AWStatsでApacheのログ解析

AWStatsでApacheのログ解析

カテゴリー: Apache| 公開: 2008/11/19 | 更新: 2008/12/11 | コメント(1)

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件のトラックバック

  1. 2010/10/17 3:28

    [...] 前に書いたものを少し修正。過去のログをすべてHTMLにせずに、CGIを使う方法にした。 AWStatsをFreeBSDで動かすのawstats695t_jpn.zipを使用。 [...]

コメント送信

メールアドレスが公開されたり他で使用されたりすることはありません。