ウェブサイトの訪問者がいる場所を地図上に表示しよう

  ApacheMap を使えば、ウェブサイトの訪問者がいる場所をGoogle Map上に表示することができる。ApacheMapは、Apacheのログから取得したIPアドレスをhostip.infoを使用して緯度/経度情報に変換するユーティリティだ。

 HostIPが提供している、IPアドレスに対応する地理情報はユーザから提供された情報に基づいている。そのため中には地理情報に変換することができないIPアドレスもあるなど問題もないわけではない。実際、geoiptool.comなどのサイトはIPアドレスだけを基にして私のいる場所をかなり正確に推測したのに対して、hostip.infoでは私のIPアドレスは認識されなかった。とは言え、IPアドレスに基づく地理情報の推測結果というもの自体、いずれにしても話半分に受け取っておくべき類いのものでもあるだろう。

 Ubuntu、openSUSE、Fedora用のApacheMapのパッケージは用意されていない。今回は、Fedora 8をインストールした64ビットマシンにバージョン0.5bをインストールして使ってみた。なおtarファイルのapache-geo-map-0-5b.tar.gzはサブディレクトリに展開されないので注意しよう。apache-geo-map-0-5b.tar.gzに含まれているapache-geo-map.plスクリプトはperl-libwww-perlとperl-YAMLに依存しているため、これらのパッケージもインストールする必要がある。perl-libwww-perlがインストールされていない場合、apache-geo-map.plを実行しようとすると「HTTP/Request/Common.pmというファイルが存在しない」という内容のエラーが表示される。またperl-YAMLがインストールされていない場合には、「YAML.pmファイルが存在しない」という内容のメッセージが表示される。

 ApacheMapをインストールするためには、以下に示すように、ウェブサーバのドキュメントルートディレクトリ(通常は/var/www/html)内に新規に作成したサブディレクトリでtarファイルを展開する。その後、含まれているPerlスクリプトを使って、Apacheのログファイル中のIPアドレスからdata.xmlというデータファイルを作成する。なお私の場合、このデータファイルについては通常のユーザとしてスクリプトを実行して更新したかったので、自分のアカウントでスクリプトを実行することができるようにパーミッションを変更して、さらに自分のアカウントでdata.xmlファイルに書き込みができるようにした。また設定ファイルは、分かりやすい名前を付けて/etcディレクトリに移動した。その他の様々なファイルに関しては/usr/local/shareに移動した。

# cd /var/www/html
# mkdir apache-geo-map
# cd apache-geo-map
# tar xzvf /.../apache-geo-map-0-5b.tar.gz
# chown -R root.apache .
# mv apache-geo-map.pl /usr/local/sbin/
# chown ben.apache apache-geo-map.pl
# mv ./apache-geo-map.pl /usr/local/bin
# mv default.conf /etc/apache-geo-map.conf
# mkdir /usr/local/share/apache-geo-map
# mv README  CHANGELOG gpl.txt  /usr/local/share/apache-geo-map/
# chown ben.apache data.xml
# chown ben .

apachemap_thumb.png
ApacheMap

 設定ファイルの/etc/apache-geo-map.confは単にキーと値の組のリストで、一行に一組ずつ指定する。なおDebianシステム上では特に設定ファイルを用意しなくてもそのまま使えるはずだ。おそらくApacheMapの作者がDebianを使用していて、Debian上で動くようにデフォルトを設定したのだと思う。Debian以外のLinuxディストリビューションではいくつかのパスに関して設定ファイルで変更する必要があるかもしれない。自信がないときには、設定ファイル内で明示的に設定しておくのが常に最良の方法だと思われる。なお下記のリストの中の「—」の行は設定ファイルの一部なので、編集しないようにしよう。またdata_dirの値とdata_fileの値とが正しく連結されるようにするため、data_dirの値の最後には「/」が必要だ。

# vi /etc/apache-geo-map.conf
---
apache_log: /var/log/httpd/access_log
data_dir: /var/www/html/apache-geo-map/
data_file: data.xml
default_icon_color: blue
new_icon_color: yellow

 なお上に記した設定は、ユーザbenに、/var/log/httpd内のApacheのログファイルの読み取り権限があることを前提としている。設定後、以下に示すコマンドを実行すれば、data.xmlファイルが更新されて、Apacheの最新のログファイルの中にあるすべてのIPアドレスの位置情報が含まれるようになる。なおapache-geo-map.plはHTTPプロキシには対応していないので、インターネットに直接的にアクセスが可能な状態である必要がある。

apache-geo-map.pl -c /etc/apache-geo-map.conf

 なお、今回ApacheMapを使ってスクリーンショットを生成してみるのに使用したログファイルは以下のような内容だ。

66.35.250.151 - - [12/May/2008:11:49:46 +1000] "GET / HTTP/1.1" 403 3918 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.8) Gecko/20071030 Fedora/..."
18.7.22.83 - - [12/May/2008:11:49:46 +1000] "GET / HTTP/1.1" 403 3918 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.8) Gecko/20071030 Fedora/..."

 生成された地図は、Firefoxでhttp://localhost/apache-geo-map/apachemap.htmlにアクセスすると見ることができた。

 ApacheMapを設定するための最後のステップは、Google MapsのAPIキーを取得して、apachemap.htmlのいちばん上にあるsrc属性のkey=<your-api-key>を取得したAPIキーに置き換えることだ。APIキーを取得すれば、ローカルホスト以外のマシンからもApacheMapのマップを見ることができるようになる。

まとめ

 ApacheMapを使えば、手軽に自分のウェブサイトへの訪問者の地理的な分布についてのイメージをつかむことができる。このような地理情報にどれほどの価値があるのかは、ウェブサイトの内容がどれほどニッチ的なものなのかによるだろう。ウェブサイトのアクセス数が非常に多くて、多様な人々が興味を持つような内容である場合には、地図上のいたるところに印が付いてあまり有益な情報を得ることはできないだろう。反対に、ウェブサイトが特定のニッチを対象としたものである場合には、地域ごとのアクセス数を把握することができることによって、内容に興味を持つユーザをより多く獲得することができるような、何らかのターゲットマーケティングを行うことができるかもしれない。

Ben Martinは10年以上もファイルシステムに携わっている。博士号を取得し、libferris、ファイルシステム、検索ソリューションを中心としたコンサルティングサービスを提供している。

Linux.com 原文