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

· 4 min read
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