先日、本ブログのアクセス解析をしてみる様アドバイスを頂いたので
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