Harada's Diary

AWStatsを使用してアクセス解析をする。

先日、本ブログのアクセス解析をしてみる様アドバイスを頂いたので
AWStats をインストールして、さくっとアクセス解析をしてみました。


はじめに

AWStats を導入する場合、ログ解析を行う対象のサーバにインストールする形が多いですが、
セキュリティリスクが上がってしまいますし、そもそも解析結果は一般公開しないので、
ローカル環境のサーバを用意してそちらでアクセス解析を動作 させます。

具体的には以下のイメージです。

利用 OS は以下の通りです。

種別

内容

OS (hdserver.info)

CentOS 6.8 (64bit)

OS (LAN)

CentOS 6.8 (64bit)

ログ解析ソフトウェア

awstats-7.0-3.el6


ログ取得スクリプトの作成

※ログの取得には rsync を使用します。
rsync コマンドが無い場合はローカルサーバ(以下 LAN サーバ)にインストールしておきましょう。

# yum install rsync 

スクリプトの中身はこんな感じ。
ssh over rsync でファイルを取ってくるので、ポートを変えている場合は適宜変えて下さい。

# vi /home/harada/script/log_rsync.sh #!/bin/bash ADDRESS=取得先のホスト名、または、IPアドレスを指定 HTTPDLOG_DIR=/var/log/nginx/ BKUP_DIR=/var/log/awstats # rsync ec2 to local rsync -avrz --delete -e 'ssh -i /root/key/kagifile.pem' user@$ADDRESS:$HTTPDLOG_DIR $BKUP_DIR 1> /dev/null 

先に rsync だけ dry-run で実行して、挙動を確認しておきましょう。

# rsync -navrz --delete -e 'ssh -i /root/key/kagifile.pem' user@18.183.225.54:/var/log/nginx/ /var/log/awstats . .. ... sent 332 bytes received 2568 bytes 1933.33 bytes/sec total size is 698900 speedup is 241.00 (DRY RUN) 

問題なさそうなので通常実行。

. .. ... sent 2028 bytes received 13721 bytes 10499.33 bytes/sec total size is 698900 speedup is 44.38 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1505) [generator=3.0.6] 

おや?エラーが。
調べてみると権限がないと出るエラーっぽいので sudo 権限付きで rsync を実行します。

※参考
http://progmemo.wp.xdomain.jp/archives/358

# rsync -avrz --rsync-path='sudo rsync' --delete -e 'ssh -i /root/key/kagifile.pem' user@18.183.225.54:/var/log/nginx/ /var/log/awstats . .. ... sent 2025 bytes received 424531 bytes 284370.67 bytes/sec total size is 699166 speedup is 1.64 

うまく行ったのでスクリプトは完成。

ちなみに rsync するユーザにアクセス権がない問題を解消するために、
パーミッションを変更する方法もあります。

# chmod 0605 /var/log/nginx 

うまくいったところで、スクリプトを再度実行しておきます。

# sh /home/harada/script/log_rsync.sh 

で、このスクリプトを cron に毎時で登録してあげる事で、
AWStats の更新と同じタイミングでログが更新されます。

00 * * * * /home/harada/script/log_rsync.sh 

AWStats のインストール

おまたせしました。AWStats をインストールします。今回は yum で入れます。

# yum install awstats 

AWStats をインストールすると、Apache 用設定ファイルが
/etc/httpd/conf.d/awstats.conf として作成されます。
このファイルを編集します。

# vi /etc/httpd/conf.d/awstats.conf allow from 127.0.0.1 allow from 192.168.1.0/24 # 許可するサブネットを追加 allow from 192.168.2.0/24 # 許可するサブネットを追加 

設定を確認し、問題なければ Apache をリロード。

# httpd -t Syntax OK # /etc/init.d/httpd reload 

このままでは AWStats のトップページを開いても、

Error: Couldn’t open config file "awstats.localhost.conf" nor "awstats.conf".
Please read the documentation for directories where the configuration file should be located.

というエラーになるので、awstats.conf を設定します。

AWStats の設定ファイルは /etc/awstats 以下に格納されます。
サンプル設定ファイルがインストールされるので、これをコピー&編集します。

# cd /etc/awstats/ # cp awstats.model.conf awstats.conf 

設定ファイルを編集します。内容は以下の通り。

# vi awstats.conf LogFile="/var/log/awstats/access_log" # 解析対象のログファイルを指定します SiteDomain="hdserver.info" # サイトのドメイン名を設定します HostAliases="hdserver 133.130.88.106" # 別のドメイン名でアクセス可能な場合に、その名前を指定します DNSLookup=1 # アクセス元の名前解決を行う場合 1 に SkipHosts="127.0.0.1 XXX.XXX.XXX.XXX" # 除外したいIP(社内など)を追記 Lang="ja" # システム言語を明示的に日本語に # プラグインに関しては必要に応じて有効にします LoadPlugin="geoipfree" # GeoIPfree プラグインは利用される事が多い 

GeoIPfree を利用する場合、以下の追加インストールが必要になります。

https://centos.pkgs.org/6/repoforge-x86_64/perl-Geo-IPfree-0.8-1.el6.rf.noarch.rpm.html 

上記 LogFile 設定の場合、最新のアクセスログのみが解析対象 になります。
サイト構築と同時期に AWStats を導入した場合はこれで OK ですが、
既に過去の(ローテートされた)アクセスログファイルが存在する場合、
この設定だけではそれらが解析されません。

そういった要件に対応する場合、設定ファイルのコメントにもある通り、
logresolvemerge.pl スクリプトを利用できます。

LogFile="/usr/bin/logresolvemerge.pl /var/log/aws/*access_log* |" 

AWStats によるログ解析

ログが取得できたら、AWStats によるログ解析処理を行います。
ログ解析も cron で毎時行われますが、すぐに解析したい場合は以下を実行。

/etc/cron.hourly/awstats 

ログ量にもよりますが、初回の解析にはある程度時間がかかります。
解析が完了しプロンプトに戻ってきたら、Web ブラウザから AWStats の URL にアクセスします。

http://awstatsをインストールしたホスト名/awstats/awstats.pl 

※実際の URL(ローカル環境なので外部からは閲覧不可)
http://192.168.2.96/awstats/awstats.pl

アクセス自体少ないのでグラフがしょぼいですが……
ひとまずこれで様子見とします。

参考:
https://www.agilegroup.co.jp/technote/awstats.html