AwstasでApacheのアクセスログ解析

awstasの導入がうまくいきました。忘れない内に備忘録を書いておきます。
Screenshot3.png

ログデータとログ解析データ

詳しくは分からないのですが、awstasはApacheのログファイルから、ログ解析データを生成してそれをウェブ上で表示します。このやり方から、通常のWebコンテンツに比べてインストール方法が難しくなります。
  • デフォルトのApacheユーザーログは、/var/log/apache2/ にあって、root権限です。これをawstasの実行ユーザーであるwww-dataが触りに行こうとするとこのファイルの公開設定を変えるか、www-data をroot グループへ追加するなどの処理が必要となりますが、これはあまり好ましい操作ではありません。この状態を何とかするためには、まずApacheの実行ユーザーをroot以外のユーザーとして、Webコンテンツに関する権限だけを付与する。その次にログファイルについても、Apache実行ユーザーのフォルダーに変更して、そのファイルをwww-dateユーザーが見にいけるようにする。とします。
  • アクセスログは、Web管理者のものであることは、妥当なことだと思いますが、アクセスログを公開してしまうことは、アクセスしてくださるユーザーにとっては不愉快なことです。そのため、Web上でアクセスログ解析をした場合には、公開先は自LAN内に止めるなどの対応が必要です。以上の観点で導入していきます。

インストールと設定

Apacheの実行ユーザーの設定

できることならサーバー設置後すぐにApacheの実行ユーザーを変更しておくべきだと思います。またアクセスログファイルの位置も変更します。デフォルトは/var/log/apache2/です。バーチャルホストを設定していない場合には、/etc/apache2/sites-enabled/000-default を編集します。詳しい設定方法はUbuntu/Serverをご参照ください。なお現存しているコンテンツがルート権限であった場合にはこれまで表示されていたものもうまく表示されなくなる可能性があります。コンテンツのユーザーを以下のコマンドなどで変更することが必要だと思います。
$ chown -R flabo:flabo /home/www/*
 →/home/www/下のコンテンツの全ファイルのユーザーを flaboグループのflaboユーザーに変更するコマンド
尚、以下の設定方法ではApacheの実行ユーザーをflaboとして記載していきます。

インストール方法

$ sudo apt-get install awstats

設定方法

設定ファイルは /etc/awstats/awstats.conf に書いていきます。
$ sudo vi /etc/awstats/awstats.conf
以下を追加
#ログファイルを設定
LogFile="/home/flabo/log/apache2/access.log"
#LogFormat
LogFormat=1
#LogType
LogType=W
#言語設定
Lang="jp"
#DNSLookUP
DNSLookup=1
# DNSの逆引きを行わない IP アドレス(正規表現)
SkipDNSLookupFor="REGEX[^192\.168\.99\.]"
#EnableLockForUpdate=1
EnableLockForUpdate=1
#Local
HostAliases="localhost 127.0.0.1"
#ドメイン名を入力
SiteDomain="felix-labo.org"
#アイコンセットのディレクトリ
DirIcons="/awstats-icon"
# アクセスできるIPアドレスを限定する
AllowAccessFromWebToFollowingIPAddresses="127.0.0.1 192.168.99.1-192.168.99.10"
# 解析しないファイルを設定
SkipHosts="127.0.0.1 REGEX[^192\.168\.99\.]"
# アクセスできるIPアドレスを限定する
AllowAccessFromWebToFollowingIPAddresses="127.0.0.1 192.168.11.1-192.168.11.5 121.2.65.177"
# 解析しないファイルを設定
SkipHosts="127.0.0.1 192.168.11. 121.2.65.177"
続いて上記で設定したアイコンセットをウェブルートにリンクさせます。
$ sudo ln -s /usr/share/awstats/icon /virtual/www/awstats-icon
$ sudo chown -R flabo:flabo /virtual/www/awstats-icon
エイリアスの方がきれいかも。。。
この状態ではページは表示されますが、ログ解析データが表示されません。ログ解析データは定期的に生成する必要があります。いろいろやり方があるみたいですが、私はクローンにやらせます。
sudo crontab -e
以下は一時間毎(毎時00分)にログファイルを更新する方法です。以下の文を追加して Ctrl+x → Y (yes) → [Enter] で設定更新します。
00 * * * *      /usr/lib/cgi-bin/awstats.pl -config=awstats -update > /dev/null$
このままではwww-dataユーザーはflaboのログファイルを触れないので
$ sudo adduser www-data flabo
以上設定完了です。
/ホスト名/cgi-bin/awstats.pl
でめでたくページが表示されます。

そういえば・・・

↑のURLを見てもらえば分かるとおり、awstats のページは、/cgi-bin/ ディレクトリ下で表示されます。この元はというと
/usr/lib/cgi-bin/
ディレクトリです。このディレクトリが何のディレクトリかよく分かっていませんが、名前からするとawstatsの専用ディレクトリってわけでもなさそうで、気持ちが悪いので、以下の様に他からアクセスできないように設定しておきます。ちなみに私の場合は awstats 以外のコンテンツはおいてありませんでした。
ScriptAlias /cgi-bin/ "/usr/lib/cgi-bin/"
<Directory "/usr/lib/cgi-bin/">
 Options ExecCGI +SymLinksIfOwnerMatch
 AllowOverride None
 Order deny,allow
 Deny from all
 Allow from 192.168.99
 Allow from 127.0.0.1
</Directory>