ハウツー
仮想ホスト (別ログファイル) に対する
Analog の使い方

このハウツーの著者: Peter Rose
HTML への変換と第3ステップの追加の著者: Stephen Turner

Analog の最大の特徴の一つは、同じサーバ上の数個の仮想ホストに対して、カスタマイズされたそれぞれ異なる出力を簡単に提供できることにある。

もしあなたのサーバ上で数個のドメインを提供し、日別/週別/月別の Analog の統計結果をすべての顧客に対して提供したいが、顧客すべてが同じ程度の報告、あるいは見てくれを必要としないときには、これは、あなたにとって明らかな利点となります。

以下は、RedHat Linux 6.1 上で動作している Apache 1.3.12 に基づいた実際例です。しかし、他の Unix の仲間のプラットフォームにも適用できるはずです。第2と第3ステップ、それに一般的な考え方は、Windows NT や他の OS でも役に立つことでしょう。しかし、詳細については、他の人に聞かなければならないでしょう。:-)

第1ステップ

Apache Virtual Host の項に必要な記述をして下さい。

以下は、私の httpd.conf の例です。

<VirtualHost 212.87.82.24>
ServerName www.ontiles.com
SSLDisable
DocumentRoot /home/httpd/html/tileshop
ServerAdmin webmaster@ontiles.com
CustomLog logs/ontiles-referer_log  referer
TransferLog logs/ontiles.com-access_log
</VirtualHost>

<VirtualHost 212.87.82.24>
ServerName www.nuw-maas.co.uk
SSLDisable
DocumentRoot /home/httpd/html/nuwmaas
ServerAdmin webmaster@cyberscreen.com
TransferLog logs/nuw-maas-access_log
</VirtualHost>

上記では、異なるログの取り方をしている、2個の仮想ホストが含まれています。

ontiles.com は、通常のアクセス統計と共に参照元レポートを要求していますが、一方、nuw-maas.co.uk は、基本的なアクセス統計のみを必要としています。

第2ステップ

各ドメインに対応する別々の analog.cfg を作成して下さい。ontiles.com に対しては、(びっくりするほどオリジナルな)ontilesanalog.cfg と呼ばれるファイルを作成しました。このファイルの適切な部分は、以下の通りです。
LOGFILE /etc/httpd/logs/ontiles.com-access_log
LOGFORMAT REFERRER
LOGFILE /etc/httpd/logs/ontiles-referer_log
OUTFILE /home/httpd/html/cyberscreen/stats/ontiles_stats.html 
HOSTNAME "ONTILES.COM"
HOSTURL "http://www.ontiles.com/"
IMAGEDIR "http://www.cyberscreen.com/images/"
LOGO "ontileslogo.jpg"
STYLESHEET ontilesanalogstyle.css
LOGFILELOGFORMAT コマンドの現れる順番に気を付けて下さい。もし、LOGFORMAT REFERRERLOGFILE /etc/httpd/logs/ontiles-referer_log の前になければ、正常に動作しないでしょう!このドメインのレポートには、ホームページの上部に独自のロゴを与えていることにも気がつくと思います。また、このウェッブサイトに相応しいスタイルシートを使っています。これらは、本質的なことではありませんが、最後の仕上げをせざるを得ないでしょう。 :-)

以下は、他の仮想ホストに対する analog.cfg ファイルの記述です。あなたが予想していたとおり、nuw-maasanalog.cfg と呼んでいます。

LOGFILE /etc/httpd/logs/nuw-maas-access_log
OUTFILE /home/httpd/html/cyberscreen/stats/nuw-maas_stats.html 
HOSTNAME "WWW.NUW-MAAS.CO.UK"
HOSTURL "http://www.nuw-maas.co.uk/"
IMAGEDIR "http://www.cyberscreen.com/images/"
LOGO "nuw-maaslogo.jpg"
STYLESHEET nuw-maassanalogstyle.css
これまでで、考え方はつかめたと思います。このドメインは、参照元レポートを必要としませんが、魅力的な独自のロゴと出力に適用されるスタイルシートを要求している。この機会に乗じて、各ドメインの analog.cfg 内で、各ホストの要求に応じて、凝った出力を作成したり、リクエスト数の最低数を決めたりできます。

第3ステップ

また、我々独自の要求から、すべての仮想ホストの使用概要についてのレポートを必要とします。そのために、すべてのログファイルを一緒に解析する必要があります。問題は、ログファイル中のファイル名が、例えば、単に /index.html の様に現れてしまうことです。しかし我々の必要とするのは、http://www.ontiles.com/index.html という名前であり、こうなれば、どのファイルがどちらの仮想ホストに属しているかが分かります。このためには、LOGFILE コマンドの2個目の引数にこの URL を書けばよい。この引数は、そのログファイルに含まれるファイルに接頭辞として付け加わります。以下の例の環境設定ファイル、all.cfg で見ることができます。
LOGFILE /etc/httpd/logs/ontiles.com-access_log http://www.ontiles.com
LOGFILE /etc/httpd/logs/nuw-maas-access_log    http://www.nuw-maas.co.uk
OUTFILE /home/httpd/html/cyberscreen/stats/overall_stats.html 
HOSTNAME "Cyberscreen"
IMAGEDIR "http://www.cyberscreen.com/images/"
SUBDIR http://*
最後の行の SUBDIR コマンドに注意して下さい。この行のおかげで、ディレクトリレポートを使い、各仮想ホストのデータ転送量を見ることができます。この情報は、仮想ホストレポートでは見られません。というのも、仮想ホスト名は、ファイル名の単なる一部であり、それ自身が項目とはならないからです。

このレポート出力を行うと、Analog は、"2重勘定の可能性" の注意を与える。これは、単にログファイルの日時が一致しているということを意味し、すべてのログファイルは異なる仮想ホストからのものであるから、何ら心配することはない。

第4ステップ

さて、小さなシェルスクリプトを作成して、Analog が起動後に異なるホストに対して統計レポートを作成するようにしなければならない。以下は、私の場合にはうまくいきました。
#!/bin/sh

cd /etc/httpd/analog4.0
./analog -G +gontilesanalog.cfg
./analog -G +gnuwmaasanalog.cfg
./analog -G +gall.cfg
明らかなように、1行目は、Analog の位置を示している。あなたの場合には、どこか別の場所かもしれません。もし、Analog を $PATH の中に含めてしまえば、もちろん、各行の先頭に ./ を付ける必要はありません。ここでやっていることは、異なる環境設定ファイルを使って、Analog を単に2度走らせているだけです。これを無限に続けることはできませんが、私は20個の仮想ホストを持っており、Analog は、全部を数秒で処理してしまいます。上記で重要なオプションは、-G であり、これは、Analog が初期環境設定ファイルを使用しないようにし、また cfg ファイル名の先頭に付いている +g というオプションは、Analog がその特別な環境設定ファイルを使うようにさせる。ファイル名の前にスペースを入れてはいけません。

第5ステップ

上記のスクリプトを 'runanalog' (または、他の名前) を付けて保存し、そのファイルのモードを755とする(chmod 755 runanalog)。これで、cron デーモンを使えば、あなたの希望通りの頻度で、Analog をすべての仮想ホストに対して自動的に実行させることができる。Linux の場合に、これを実行するには全く頭を使わずに済む。なぜなら、/etc の下に、cron.daily、cron.weekly または cron.monthly というディレクトリがあり、ユーザが彼らの統計ページを毎日更新したいとすると、私は単に 'runanalog' を cron.daily にコピーするだけですが、同様にして、週毎あるいは月毎に更新することもできます。もし異なるホストに対して、異なるサービスを提供するなら、1個の 'runanalog' を持つか、あるいは、毎日更新するようなマニアに対処し、かつ、大した情報量を処理できないホストに対して cron.monthly 中に別種のシェルスクリプトを持てばよい。

これでおしまいです。今や、Analog は、すべての仮想ホストに対してカスタマイズされたレポートを、自動的に生成します。


ハウツーのインデックスに戻る