2005/02/09

Awstatsのインストールと設定

AwstatsはWEBサーバーのログを集計し、集計結果をグラフィカルなHTMLで表示してくれるツールです。
Apacheのログ解析にはAnalogを使用していたのですが、Awstatsの方が サイトの滞在時間レポートや、どのページから入ってどのページから出て行ったかを知ることができる等、 Analogに比べて出力レポートが充実しています。また、メールサーバーのログも解析する事ができます。
ただ、AnalogがC言語で作られているのに対し、AwstatsはPerlで作られているため、解析速度が遅くなってしまいます。 このデメリットに目をつぶれれば、今のところAwstatsはお勧めです。

Awstatsのアップグレードする場合は、Awstatsをemergeした後に、Apache等の設定を /usr/share/webapps/awstats/6.3/以下を参照するように変更してください。

Awstatsのインストール

Awstatsをインストールします。
root $ emerge -uv awstats
インストールされたAwstatsのバージョンは6.3でした。

Awstatsの設定

/etc/awstats/awstats.model.conf を元に設定ファイル /etc/awstats.www.gside.org.conf を作成します。
root $ cp /etc/awstats.model.conf /etc/awstats.www.gside.org.conf

# 編集可能とするよう書き込み権限を与えます。

root $ chmod u+w /etc/awstats/awstats.www.gside.org.conf

/etc/awstats.www.gside.org.conf の主な編集箇所は以下になります。
# Apacheのログファイルの場所を指定します。
LogFile="/var/log/apache2/access_log_gside"

# サイトのドメイン名を指定します。

SiteDomain="www.gside.org"

# 1 だとドメイン名の問い合わせを行い、ドメイン名で解析結果を表示します。
# 0 だとドメイン名の問い合わせを行わず、IPアドレスで解析結果を表示します。

DNSLookup=1

# 解析結果のデータファイルを格納するディレクトリを指定します。

DirData="/var/www/localhost/htdocs/awstats/awstats_temp"

# CGIが動作するディレクトリを指定します。
# これはドキュメントルートからの場所になります。

DirCgi="/awstats"

# Icon類の格納されているディレクトリを指定します。
# これはドキュメントルートからの場所になります。

DirIcons="/awstatsicons"

# 解析結果から除外するIPアドレスを指定します。
# 例ではIPアドレスが 192.168.1.1からのアクセスを解析結果から除外しています。

SkipHosts="192.168.1.1"

# サポートする言語を指定します。日本語だと jp です。

Lang="jp"

上記のDirCgiDirDataで指定したディレクトリを作成します。
例ではドキュメントルートを /var/www/localhost/htdocs としています。
root $ mkdir /var/www/localhost/htdocs/awstats
root $ mkdir /var/www/localhost/htdocs/awstats/awstats_temp

Awstatsが動作するためのApacheの設定

AwstatsはCGIとして動作するので、ApacheでAwstatsが動作するための設定を行う必要があります。
このために、/etc/apache2/conf/apache2.conf を編集します。
# Aliasを指定しています。
Alias /awstatsclasses "/usr/share/webapps/awstats/6.3/htdocs/classes/"
Alias /awstatscss "/usr/share/webapps/awstats/6.3/htdocs/css/"
Alias /awstatsicons "/usr/share/webapps/awstats/6.3/htdocs/icon/"

# CGIの動作を許可しています。
ScriptAlias /awstats/ "/usr/share/webapps/awstats/6.3/hostroot/cgi-bin/"

# ディレクトリへのアクセスを許可します。
<Directory "/usr/share/webapps/awstats/6.3/htdocs">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

# ディレクトリへのアクセスを許可します。
<Directory "/usr/share/webapps/awstats/6.3/hostroot/">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

ApacheがAwstatsが必要とする各ファイルにアクセスできるように、権限の設定を行います。
root $ chmod 755 /usr/share/webapps/awstats/6.3/htdocs/icon
root $ chmod 755 /usr/share/webapps/awstats/6.3/hostroot/cgi-bin/lang
root $ chmod 755 /usr/share/webapps/awstats/6.3/hostroot/cgi-bin/lib
root $ chmod 755 /usr/share/webapps/awstats/6.3/hostroot/cgi-bin/plugins

Awstatsの実行を行います。
root $ /usr/bin/awstats_updateall.pl now
-awstatsprog=/usr/share/webapps/awstats/6.3/hostroot/cgi-bin/awstats.pl
-configdir=/etc/awstats/ > /dev/null
※実際の画面では一行で記述しています

これでブラウザに http://[ホスト名]/awstats/awstats.pl にアクセスするとグラフィカルな解析結果を 見る事ができます。

Logrotateによる解析結果漏れの防止

ApacheのログをLogrotateにより運用していると、最後にAwstatsによる解析が行われた時間から、 Logrotateが行われた時間までのログが、解析結果から漏れてしまいます。
これを防ぐには、Logrotateが動作する直前にAwstatsによる解析を行う様にすれば解決します。

Logrotateはローテーションを行う直前に実行するコマンドを設定する事ができます。
Logrotateの設定ファイル /etc/logrotate.conf もしくは /etc/logrotate.d 配下のファイルを以下の様に編集する事で実現できます。
具体的には prerotate〜endscript の間に awstats の実行コマンドを記述します。
Logrotateの詳しい設定方法は本サイトLogrotateのインストールと設定

/var/log/apache2/access_log_hoge {

#対象のファイルが存在しなくても、エラーとしません。

missingok

#毎月ローテーションします。

monthly

#postrotate〜endscriptのコマンドがLogrotateの後に実行されます。

postrotate
/usr/bin/killall -HUP apache2
endscript

#prerotate〜endscriptのコマンドがLogrotateの前に実行されます。

postrotate
/usr/bin/awstats_updateall.pl now\
-awstatsprog=/usr/share/webapps/awstats/6.3/hostroot/cgi-bin/awstats.pl\
-configdir=/etc/awstats/ > /dev/null\
}
Index
Logrotateによるログのローテーション
AwstatsによるWEBアクセス解析