sleepingbird.net Home since May.11 2003
Copyright sleepingbird, 1993- All rights reserved.
Linux Server

TOP > Linux Server > アクセス解析

CGI

 ホームページを開設すると、そのアクセス数が気になってくる。この手段として通常はカウンタを設置する。このサイトも当初カウンタを設置してみたが、カウンタだと、「統計取ってます」的な感じが嫌だ。そこで、ネットを検索したところ「futomi's CGI Cafe - 高機能アクセス解析CGI」というものが見つかった。 これを各ページに設置してもカウンタは表示されないのでアクセスしている側には分からない。また、解析対象から除外するホストの指定が可能なので、ローカルからのテストアクセスを解析値から除外することが可能である。Professional 版であれば結構複雑な解析も出来る。

futomi_logo.gif
 設置は思ったより簡単で、解析結果もきれいなグラフィカルで表示できる。

 詳細は配布ページまたはダウンロードファイルに含まれている説明を参照のこと。
 一応、満足する結果が得られたが、チョット考えて思ったのは、このツールではアクセス解析したいファイルには必ず解析用のタグを埋め込まなければならないこと。当然のことだが埋め込み前のアクセスは反映されない。
 しかし、http サーバーデーモンである apache は稼働当初から詳細なロギングを行っている。これを直接解析すればサーバー設置直後からの状況が解析できるはずである。
 当然、同じ事を思い付く人がいて既に開発済みではないのかと検索したら、あった。

AWStats

 AWStats というツール。一応日本語にも対応している。
 まず、AWStats Ver.6 をダウンロード、展開する。安定版は 6.3 (STABLE)。

$ wget http://mesh.dl.sourceforge.net/sourceforge/awstats/awstats-6.3.tgz
$ tar -zxvf awstats-6.3.tgz
 解凍したディレクトリの wwwroot/cgi-bin 以下の内容を、サーバーのディレクトリにコピーする。ここでは、 /home/httpd/sleepingbird 下に専用のディレクトリを用意する。
$ cd awstats-6.3
$ cp -r ./wwwroot/cgi-bin/* /home/httpd/sleepingbird/awstats
 awstats.pl ファイルの一番先頭は "#! /usr/bin/perl" で VineLinux の perl の位置になっているが念のため確認しておく。
 解凍したディレクトリの wwroot/icon 下にある6ディレクトリを、Apacheが読むことができる場所にコピーする。
 httpd.conf の Aliase に記述されている。
 VineLinux では、 /home/httpd/icons である。このディレクトリの所有者は root なので事前に su しておく。
$ su
# cp -r ./wwwroot/icon/* /home/httpd/icons/
# exit
$
 サーバーディレクトリにコピーした awstats.model.conf を コピーして編集する。
$ cd /home/httpd/sleepingbird/awstats
$ cp awstats.model.conf awstats.conf
$ vi awstats.conf
 デフォルト値以外の部分は次のとおり。なお、他の設定項目についてもひととおり確認しておく。
# less awstats.conf

# 解析したいWebサーバーのログファイル名
LogFile="/var/log/httpd/access_log"

# 分析するログファイルのタイプ(W:web S:streaming M:mail F:ftp)
LogType W

# ログの形式指定
LogFormat=1


# DNSの逆引き指定
# 0 - DNSの逆引きを行わない
# 1 - DNSの逆引きを完全に行う
# 2 - DNSキャッシュファイルに存在するIPアドレスについてのみのみ逆引きを行う
DNSLookup=1


# awstats.plが置かれている相対もしくは絶対URL.
DirCgi="/awstats"


# AWStatsがCGIとして利用される場合, アイコンサブディレクトリの相対もしくは
# 絶対URL
DirIcons="/icons"
デフォルトは /icon なので注意


# "SiteDomain" 統計対象のWebサイトのドメイン名もしくはイントラネット
# のサーバー名
SiteDomain="www.sleepingbird.net"

# awstats のデータを置くディレクトリ
DirData="/home/httpd/sleepingbird/awstats/awstats_db"

# ここには, 誰かが統計対象サイトに到達するために利用される可能性がある,
# 上記以外の全てのドメイン名やアドレス, バーチャルホストのエイリアス名などを
# 設定します.
HostAliases="localhost 127.0.0.1"


# 更新処理が走る際に, AWStatsはロックファイルをTEMPもしくはTMPディレクトリに
# セットすることができます.
EnableLockForUpdate=1


# AWStatsは処理済みのログを切り詰めることができます.
PurgeLogFile=0
(但し、テストが終わるまでは 1:切りつめない)


# PurgeLogFileが1に設定されている場合, AWStatsは処理済みのログファイルを
# 切り詰めます。しかし, この値を1に設定すると, 処理されたログがアーカイブ
# ファイル("DirData"に保存)として残されます(例えば別のログ分析ツールを
# 利用したい場合).
ArchiveLogRecords=1


# AWStatsに破損されていない最新のファイルを,
# .bakという名前で保存させておくことができます. このファイルは"DirData"
# ディレクトリに, その他の履歴ファイルと共に保存されます.
# 取り得る値: 0 or 1
# 既定値: 1
#
KeepBackupOfHistoricFiles=1


# 以下の基準にマッチするクライアントからのアクセスを処理対象外とします。
# ログファイル中のhostフィールドにIPアドレスが含まれる場合、基準はIPアドレスで
# 記述する必要があります。
SkipHosts="localhost 10.99.1.1 210.253.243.85 202.247.193.46"


# 特定のURLを無視させたい場合は, SkipFilesを利用します.
SkipFiles="robots.txt$ /~"


# メインとする言語を指定します.
Lang="jp"


# 画面に表示する, 他言語の統計画面へのリンクとなる国旗をリストします.
ShowFlagLinks=""
 apache のログファイル形式は combined にしておく必要があるが、Vine Linux ではインストール時にデフォルトで combined になっているため変更は不要である。一応確認はしておく。
 なお、VirtualDomain を設定した場合、log ファイルを個々に設定したら、combined 設定もそれぞれに行わなければならないので注意する。
$ less /etc/httpd/conf/httpd.conf

# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
# CustomLog /var/log/httpd/access_log common
CustomLog /var/log/httpd/access_log combined

AWStats TEST

 本番運用では cron で定期的に実行するが、テストでは手動で行う。
 awstats.pl を実行し、更新処理を行う。

$ cd /home/httpd/sleepingbird/awstats
$ ./awstats.pl -config=awstats.conf -update
 これで、awstats.conf の設定内容にしたがって処理が実行される。この初回のアクセス解析は、ログの量によってすぐに終わる場合もあるが、数十分掛かる場合もあるようだ。
 正常に終了していれば、以下のような処理結果が表示される。
Lines in file: 2230
Found 492 dropped records,
Found 5 corrupted records,
Found 0 old records,
Found 1733 new records.
 上から、ファイルの行数、統計対象外の行数、不正な行数、過去に処理済みの行数、新たに処理した行数である。
 これで生成されたファイルに基づいて HTML 文書を awstats.pl で生成する。
$ perl awstats.pl -config=awstats.conf -output -staticlinks > /home/httpd/sleepingbird/awstats/awstats.html
 ブラウザで、ここで生成されたファイル awstats.html にアクセスすれば解析結果がビジュアルに表示される。
 また、直接 awstats.pl にアクセスすれば動的に閲覧もできる。(ただし、解析ファイルも動的に生成されるわけではないので、あまり意味はないかもしれない。)詳細は、こちら

本番運用

 awstats.cron を自分の環境に合わせて編集し cron で定期実行させる。
 このファイルを /etc/cron.hourly に置けば、上記の処理が自動的に1時間おきに行われるようになる。
 実際に cron として実行させる前に、コマンドラインから awstats.cron を実行してみて、正常に動作しているのかを確認する。

$ su
#vi /etc/cron.hourly/awstats.cron

#!/bin/sh
/usr/bin/perl /home/httpd/sleepingbird/awstats/awstats.pl -config=awstats.conf -update > /dev/null
/usr/bin/perl /home/httpd/sleepingbird/awstats/awstats.pl -config=awstats.conf -output -staticlink > /home/httpd/sleepingbird/awstats/awstats.html
 実行属性を加えるのを忘れないように。
# chmod +x /etc/cron.hourly/awstats.cron
 これで、ブラウザから awstats.html にアクセスして解析結果が表示されるのを確認する。
 なお、apache のアクセスログのローテートのタイミングによりログの取りこぼしを防ぐために、/etc/logrotate.d/apache のログローテート前処理として統計情報更新処理を加えておく。
/var/log/httpd/access_log {
missingok
prerotate
/usr/bin/perl /home/httpd/sleepingbird/awstats/awstats.pl -config=awstats.conf -update > /dev/null
endscript
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}