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 <span style="color: #ff0000;">--rsync-path='sudo rsync'</span> --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(XXX部分)を追記します。
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 によるログ解析処理を行います。
ログ解析も毎時行われますが、すぐに解析をおこないたい場合、以下を実行します。

/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