システム奮闘記:その59

ホームページ履歴解析



Tweet

(2007年3月26日に掲載)

  2007年1月23日、ある役員と打ち合わせ。

  役員曰く「うちのホームページの閲覧履歴を集計できへんかなぁ」だった。
  私は「いつも履歴はとっていますが」と答えた。

  役員は「どこのお客さんが、どれくらい、うちのホームページを
見に来ているのか知りたいんや。販売分析や販路拡大につなげたいんや。
ええソフトないかなぁ」と言った。

  私は「探してみますわ」と答えた。


さて、「探してみますわ」と言ったものの、何のソフトを使えば、 ええやろかと思った。 そこで、google先生を使うと早いので、とりあえず、google先生に 「Apache ログ 解析」の文字で検索すると、webalizerというソフトが出てきた。 いくつかの設定方法が書いてあるサイトがある。 そして、ダウンロードのため、本家のサイトに接続する。 http://www.mrunix.net/webalizer/ ログの解析結果をHTML型式で出力し、グラフなども使って、 視覚的に表示するというのだ。 これは使えそうだ! しかも、Webalizerの説明を見ると、自己アピールが上手な人(?)に思えた。
webalizerのサイトに書いてあるアピール
The Webalizer is a fast, free web server log file analysis program. 
It produces highly detailed, easily configurable usage reports in HTML format, 
for viewing with a standard web browser. 

It was written to solve several problems that I had with currently 
available analysis packages. A vast majority of them were written 
in Perl or some other scripting language, and took forever to run. 
Some were not free. Some even produced wrong results, 
or results that were not in a format I found very useful. 
(上の英文の私なりの解釈)

俺は、高速で動く、スゲーWeb解析のプログラムを作ったぜ! 無料だぜ!
これだとメッチャ見やすくて、しかも詳細な結果が出るんだ。
そうそう、解析結果はHTML型式だから、大抵のブラウザーで見れるぜ!

今までにある解析ソフトが抱える、いくつかの問題も解決したぜ!
他のソフトはスクリプト言語で書いているから、おせぇーんだよ。
だから俺は「long time」じゃなく「forever」(永久)を使ったんだよ。
なかなか解析結果が出てこねー時は、イライラするぜ!

それに大した事ねぇのに、金とるソフトもあるし、
解析結果が悪い奴もあるんだよ。
俺が「これはええ!」と思う解析結果を出してくれるソフトって
案外なかったんだよ!
(私の言い訳)

上の英文を正確な訳をしろと言われると、
英語力も国語力もない非文系人間の私には非常に困る。
さて、この英文の場合、「It」が何を指しているかを
キチンと把握できるかどうかで、正しい訳にやっているのか
それとも誤訳になっているのかの別れ道になる。

というわけで、私が感じた雰囲気を伝える事にしました (^^;;

  さて、ダウンロードができたので、設定にとりかかる。
  英語の設定方法なんぞ読む気も起こらないので、日本語で書かれたサイトを
探してみた。
  まずは、以下のサイトを参考にしながらインストールを始める。

  http://www.aconus.com/~oyaji/www/webalizer.htm


  インストールの方法。
  まずは、「libpng」ライブラリの確認から行う。

  データの解析結果はグラフで表示されるが、そのグラフの画像(PNG型式)を
生成するために必要になるからだ。

  RedHat7.3なので「rpm」コマンドで確認できる。

rpmコマンドで「libpng」のライブラリの確認
[suga@server]$ rpm -iq libpng
Name        : libpng                       Relocations: (not relocateable)
Version     : 1.0.12                            Vendor: Red Hat, Inc.
Release     : 2                             Build Date: 2001年07月17日 06時45分14秒
Install date: 2005年07月03日 19時53分35秒      Build Host: stripples.devel.redhat.com
Group       : System Environment/Libraries   Source RPM: libpng-1.0.12-2.src.rpm
Size        : 354504                           License: distributable
Packager    : Red Hat, Inc. 
URL         : http://www.libpng.org/pub/png/
Summary     : A library of functions for manipulating PNG image format files.
Description :
The libpng package contains a library of functions for creating and
manipulating PNG (Portable Network Graphics) image format files.  PNG
is a bit-mapped graphics format similar to the GIF format.  PNG was
created to replace the GIF format, since GIF uses a patented data
compression algorithm.

Libpng should be installed if you need to manipulate PNG format image files.

  問題なく、ライブラリが存在している事が確認できた。


  さて、webalizerのソースコンパイルにした。
  上のサイトの丸写しで、configureのオプションをつけた。

ソースコンパイル
configureを行う
[suga@server]$ ./configure --with-language=japanese --enable-dns
(途中、省略)
checking for language file... yes - japanese
updating cache ./config.cache
creating ./config.status
creating Makefile
linking ./lang/webalizer_lang.japanese to webalizer_lang.h
[suga@server]$ 
「 --with-language=japanese」は使う言語の選択。もちろん日本語にした。

「--enable-dns」は、Apacheのログで、接続元がIPアドレスの場合、
ホスト名に変換するのに必要な、DNS機能を働かせるためのオプション

  だが、makeでコンパイル中、エラーが出た。

コンパイルエラー発生
[suga@server]$ make
gcc -Wall -O2 -DETCDIR=\"/etc\"  -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1  -DUSE_DNS  -c webalizer.c
gcc -Wall -O2 -DETCDIR=\"/etc\"  -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1  -DUSE_DNS  -c hashtab.c
gcc -Wall -O2 -DETCDIR=\"/etc\"  -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1  -DUSE_DNS  -c linklist.c
gcc -Wall -O2 -DETCDIR=\"/etc\"  -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1  -DUSE_DNS  -c preserve.c
gcc -Wall -O2 -DETCDIR=\"/etc\"  -DHAVE_ERRNO_H=1 -DHAVE_SOCKET=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_GETOPT_H=1 -DHAVE_MATH_H=1  -DUSE_DNS  -c dns_resolv.c
dns_resolv.c: In function `resolve_dns':
dns_resolv.c:149: warning: passing arg 2 of pointer to function from incompatible pointer type
dns_resolv.c:149: too few arguments to function
dns_resolv.c: In function `dns_resolver':
dns_resolv.c:218: warning: implicit declaration of function `dbopen'
dns_resolv.c:218: warning: assignment makes pointer from integer without a cast
dns_resolv.c:228: too few arguments to function
dns_resolv.c:235: too few arguments to function
dns_resolv.c:275: warning: passing arg 2 of pointer to function from incompatible pointer type
dns_resolv.c:275: too few arguments to function
dns_resolv.c:329: too few arguments to function
dns_resolv.c:359: too few arguments to function
dns_resolv.c: In function `db_put':
dns_resolv.c:745: warning: passing arg 2 of pointer to function from incompatible pointer type
dns_resolv.c:745: too few arguments to function
dns_resolv.c: In function `open_cache':
dns_resolv.c:793: warning: assignment makes pointer from integer without a cast
dns_resolv.c:801: too few arguments to function
dns_resolv.c:807: too few arguments to function
dns_resolv.c: In function `close_cache':
dns_resolv.c:829: too few arguments to function
make: *** [dns_resolv.o] エラー 1
[suga@server]$ 
どうやらライブラリ依存の部分で問題発生だ。
ライブラリ関数の引数の数や仕様が違うようだ・・・

  このエラーは、RedHat7.3で発生する。
  試しに、RedHat9ではエラーは発生しなかった。


  INSTALLファイルには「--enable-dns」のオプションについて
以下のように書かれている。

INSTALLファイルの「--enable-dns」のオプションの記述
--enable-dns

DNS lookup features are added.  This simply adds the -DUSE_DNS compiler
switch.  Several dependencies are present when using the DNS code,
which is why it must be enabled manually.  If you system supports the
DNS functionality, great.. if not, don't enable it.
文章がわかりにくい!!
もしかして、本当は「わかりやすい文章」かもしれないが
私の英語力不足か、それともシステムの知識の不足のため
書かれている内容が理解できていないのかも  (--;;

Apacheのログを、接続元の記録をIPアドレスで記録している場合、
ログの集計時に、そのIPアドレスを読み込んで、DNSの逆引きの機能を使い
ホスト名に変換するためのオプションのようだ。

  RedHat7.3を使い続ける私。RedHat9は重たくて使う気になれない。

  以前の私なら「諦める」か「重たいがRedHat9に入れ換え」を
選択してしまいそうだが、今は、この程度では何とも思わない。

  「--enable-dns」のオプションを外せば、ええやん!

  そして、Apacheの設定ファイルの「httpd.conf」の部分で、
ログを採取する際、接続元の記録をIPではなく、ホスト名で記録するように、
設定ファイルの記述を変更すれば、問題は解決できるはず。

Apacheのhttpd.confファイルの設定
#
# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
#
HostnameLookups On
赤い部分で「On」にすれば、Apacheのログの採取の際、
接続元のホストを、逆引きが可能な場合は、ドメイン名で
記録してくれる。

ただし、この機能を使うと、Apacheの負荷が高くなるため、
接続数が多いサイトでは、この機能を使わないのが
無難という記述も見かける。

もちろん、うちの会社では突風が吹いたりするような事はないため
この機能をつけていても全く問題ない。


無事、インストールが終了した。 しかし、この時点では、apacheのログの集計データが少ないので あまり見ても参考にならない。 なので、しばらくApacheの集計を取ってみてみる事にした。 その前に、webalizerを動かすためには、設定ファイル(webalizer.conf)を 触る必要がある。 まずは、Webサイトの丸写しの如く、簡単な部分だけを設定する。
webalizer.confの設定
(ここでは簡単な事しか書いていません)
LogFile        /usr/local/apache/logs/access_log

LogType        clf

OutputDir       /usr/local/apache/XXXX

PageType        htm*
#PageType        cgi
#PageType       phtml
PageType        php
#PageType       pl
最初の「LogFile」だが、集計に使うログファイルの場所を指定する。
Apacheのログのファイルを、そのまま使う場合には、上のような設定になる。

2番目の「LogType」だが、webalizerは、Apacheのログだけでなく
プロキシーのsquidと、ftpのソフト(何のftpかは調べていません)の
ログの集計も可能なため、どのソフトのログを使うのかを
指定する必要がある。「clf」と指定すれば、Apacheのログという意味になる。
この部分を設定しない場合、Apacheのログを集計という意味になる。

3番目は、集計した後に出力されるHTMLファイルや、グラフの画像を置く
ディレクトリーの指定になる。

4番目の「PageType」だが、Apacheの履歴にある閲覧したファイルで
どのファイルの拡張子の集計を取るかの指定を行う。
「htm*」とすれば、「htm」や「html」のファイルが集計される。
うちの会社はPukiwikiでホームページを運用しているため、
「php」を指定した。

  より詳しい設定ファイルの話は後述しています。
  というより、動かす段階では、設定ファイルの勉強をするのが、
めんどくさかったので、簡単な所しか触りませんでした (^^;;


  ところで、まずはApacheのログから、うちの会社からの接続を省く必要がある。
  
  awkを使えば簡単やん!

  という事で、awkを使った簡単プログラムを作成

Apacheのログから、うちの会社のドメインを省く awk プログラム
/bin/awk ' $1 !~ /XXXXXX/ ' /usr/local/apache/logs/access_log > /usr/local/apache/logs/access_log-log
青い部分は、うちの会社のドメイン。
これを省かないと正確なデータはとれない。

これを、cronに埋め込んで、毎晩、集計すれば良いのだ。

  実は、こんな手間な事をしなくても、webalizerの設定ファイルの
webalizerを触れば、簡単にできるのだが、この時は、設定ファイルの
設定方法を見るのが面倒だったので、楽な方法を見過ごしてしまった (^^;;

  ちなみに、webalizerの設定ファイルの設定だが、次の通りになる。

webalizerの設定(webalizer.conf)
# The Ignore* keywords allow you to completely ignore log records based
# on hostname, URL, user agent, referrer or username.  I hessitated in
# adding these, since the Webalizer was designed to generate _accurate_
# statistics about a web servers performance.  By choosing to ignore
# records, the accuracy of reports become skewed, negating why I wrote
# this program in the first place.  However, due to popular demand, here
# they are.  Use the same as the Hide* keywords, where the value can have
# a leading or trailing wildcard '*'.  Use at your own risk ;)

IgnoreSite     XXXXXX.co.jp
ピンクの部分が設定内容。
うちの会社のドメインを読み飛ばす設定だ。

  さて、cronに仕掛けるのだが、その方法を書いておきます。

cronに記述する内容
/usr/local/bin/webalizer -c /etc/webalizer.conf
設定ファイルを読み込むのに「-c」オプションを使う。
このオプションのお陰で、何種類もの設定ファイルを作成可能になり
個々の場合の分析が可能になる。

  このシステムの運用は1月から始めた。
  しかし、ある程度の集計があれば良いと思い、1月〜3月半ばまでに
集計されたデータを使って、話を進めていきます。  

  さて、収集されたデータを見てみる事にした。

webalizerの画面
3月の半ばに採取した統計なので、こんな感じになる。

  上の図を拡大してみると、以下のようになる。

webalizerの画面
webalizerの画面
3月の半ばに採取した統計なので
1〜3月分のデータしか採取できていない事がわかる。

  そして、数値の表は以下の通りだ。

webalizerの画面
webalizerの画面の拡大図
ここで個々の月単位での集計データを選択し、閲覧する事ができる。
今回は、2007年2月分の集計データを見てみる事にした。

  さて、2007年2月分の詳細なデータを見てみる事にした。

2007年2月の接続記録
webalizerの画面:2007年2月の接続記録
接続数だけでなく、閲覧したファイル数、ファイルの大きさ
1日当たりの数字、接続の成功、エラー数なども表示される。

2007年2月の日付け別、接続数のグラフ
接続数のグラフ

2007年2月の日付け別、接続数の詳細データ
接続数の詳細データ
2007年の2月は、28日までありますが、画像の都合上、
25日で切っています (^^;;

しかし、数字を見ても漠然とした感じだ。

  日付け別でデータの集計ができる。
  普段の日と、ホームページの更新時、キャンペーンを行った時との
閲覧状況を比較して、お客さんや同業他社の関心度合などの目安になる。

時間別のグラフ
時間別グラフ

  夜中に閲覧がある。
  24時間営業のお客さんの可能性もあるし、検索エンジンが自動的に
うちの会社のホームページに接続している事も考えられる。

時間別の詳細データ
時間別の詳細データ

  次に肝心の接続元のドメインの順位表だ。

接続元のドメイン別の順位表
接続元のドメイン別の順位
さすがに、公開できない部分のため、黒で塗りつぶしました。
見ている限り、独自ドメインを持たずに、プロバイダーから
接続されている方が多い感じだ。

  国別のドメインの違いによるグラフと順位表もある。

国別ドメインのグラフ
国別ドメインのグラフ
「jp」ドメインが断トツだ。
「Unknown」は、IPアドレスがドメイン名に変換できなかった
つまりDNSの逆引きができなかった場所からの接続だ。

「com」はアメリカなのだが、日本のサイトでも「com」は多いので
アメリカの検索サイトなどの小数を除いて、日本からの接続と考えて良い。

  だが、円グラフでは小数派が表示されない。
  そこで詳細なデータが役に立つ。

国別ドメインの詳細データ
国別ドメインの詳細データ
アメリカだけでなく、中国、イタリア、ツバル、モーリシャス、
ベトナム、ドイツ、フランス、マレーシア、台湾、ブラジルがある。

取り引きのない国からの接続は何を意味しているのだろうか。
もしかして、うちの製品との取り引きを考えているために、
接続してきた可能性も少ないながらも考えられるかもしれないし、
海外の検索エンジンが自動的に接続してきたかもしれないし、
単なるホームページを狙った攻撃の記録かもしれない。

  このグラフや表を見ていると、今まで見過ごしてきた事が
見えてくる感じがする。

  もちろん、私は専門家ではないため、大した分析はできないが
それでも、見過ごしてきた事があるように思える。

  分析の専門家なら、これらのデータの意味合いを読み取って、
それを経営的な事で応用すると思う。


さて、一通りの接続元や接続数などの集計データのグラフやデータの詳細を 見る事ができる事がわかった。 だが、思った。これだけでは見づらい部分がある。 例えば、接続元ドメインだが、接続数の上位の部分しか載ってこないため、 もし、プロバイダーからの閲覧が多い場合、独自ドメインを持った大手取引先や 同業他社の偵察の様子を見る事ができない。 なので、Apacheのログを一度、ふるいにかける必要がある。 フルイにかける事により、データの分類別の分析が可能になる。 さて、Apacheのログだが、今回は、幸いな事に、IPではなく ドメインで記録している。 RedHat7.3の場合だと、ライブラリの関係で、webalizerのコンパイル時に ApacheのログのIPをドメインに変換するオプション「--enable-dns」が エラーを出したためだった。 それが、不幸中の幸いで、フルイをかける処理が簡単になった。 Apacheのログをawkで処理すれば良いのだ! これだと、webalizer内部のプログラムの改造なんて不要だし、 何と言っても手軽にできる。 まずは独自ドメインを持っている取引先や同業他社の様子を見るために 「co.jp」のログだけを収集する事にした。
「co.jp」ドメインを取り出す awk プログラム
/bin/awk ' $1 ~ /co.jp/ && $1 !~ /XXXXXX/ ' /usr/local/apache/logs/access_log > /usr/local/apache/logs/access_log-co
青い部分は、うちの会社のドメイン。
これを省かないと正確なデータはとれない。

これを、cronに埋め込んで、毎晩、集計すれば良いのだ。

  さて、接続元が「co.jp」だけのデータを見てみる事にした。

  まずは、接続元の上位のドメインを見てみる。
  ふるいにかけた事で、取引先、ライバル社の足跡がよくわかる。

2007年2月分の接続元のドメインの順位
接続元のドメインの順位
さすがに、この中身は公表できないので、黒く塗りつぶしました (^^;;

異業種の家電メーカ、精密機器会社などの接続もあり、
もしかしたら、異業種間の提携のために、情報収集の痕跡かなぁと
思ったりもする。

  さて、日にち別の接続数の統計のグラフを見てみる。

2007年2月の日にち別の接続数の統計
日にち別の接続数の統計
このグラフの凄いのは、日にちの部分の色で平日は黒だが、
土日は緑色なっている。

「co.jp」は基本的には企業からの接続になる。
土日が休みの所が大半のせいか、土日の接続が、ほとんどない。

  次に時間別の接続数を見てみる。

2007年2月の時間別の接続数の統計
時間別の接続数の統計<
さすがに昔のリゲインのCMのように「24時間戦えますか!」
という企業はなさそうで、真夜中の接続はなかった。

でも、晩の9時、10時の接続がある事から、遅くまで残業されておられる方が
おられるのは明確なので、「お疲れさま」と声をかけたくなる。

  ドメイン別の集計を取っただけでも、接続傾向が浮かび上がる事がわかった。
  色々な角度から分析できれば、Apacheのログからでも
色々な情報が得られそうな気がする。



さて、今回の話はこの辺で」と区切りたいが、肝心の設定ファイルの話を 書いていないので、その話に触れたいと思います。 webalizer.confファイルの設定を見ていく事にした。 最初の方で、うちの会社からの接続を集計しないように、 awkを使って、データ処理を行ったが、webalizer.confファイルで 集計から省く事ができないかと考えた。 そこでまず目をつけたのが「HideSiteの設定」だった。
HideSiteの設定
# Your own site should be hidden
#HideSite       *mrunix.net
#HideSite       localhost
「Hide」は「隠す」や「隠れる」という意味だ。
これを使えば、指定したドメインが表示されない。
私が行った設定
# Your own site should be hidden
HideSite       XXXX.co.jp
#HideSite       localhost
XXXX.co.jpは、うちの会社のドメイン。
これを設定すれば、集計されないと思った。

  上の設定を行った。その結果

  見事、うちの会社のドメインが表示されない!

  この時は「成功!」と思ったが、実は、そうではない事がわかる。

  さて、表示させたくないドメインを消すのに成功した。

  ふと思った。
  海外からの接続があるから、海外からの接続の統計を見てみよう。
  「jp」ドメインが表示されないようにする。
  そこで、先程と設定と同じような設定を行った。

「jp」ドメインが表示されないようにする
# Your own site should be hidden
HideSite        .jp
#HideSite       localhost

  そして、集計してみると

  見事に表示されてない (^^)V

「jp」ドメインを表示させない設定をした結果
「jp」ドメインを表示させない設定をした結果
見事に「jp」ドメインの集計が隠れている。

黒塗の部分だが、IPアドレス(DNSで逆引きできなかった所)は
隠しておきました。

  しかし、喜んでいるのも束の間だった。
  グラフを見ると・・・

  なんで「jp」が集計されているねん (--;;

  だった。

「jp」ドメインを表示させない設定をした結果
「jp」ドメインを表示させない設定をした結果
「jp」ドメインを隠す設定を行ったにも関わらず
グラフには「jp」ドメインの集計がされている。

  そこで、色々、調べてみると

  Hideは順位表から隠すだけで、集計されている

  だった。
  そのため順位表では表示されていないが、ドメインの国別には
しっかりと集計されている事がわかった。
  もちろん、「jp」ドメインの接続数なども数えられるため・・・

  これでは正しい集計ができへんやん!

  というわけで、特定のドメインを集計されない方法を調べてみると
「Ignore」を設定すれば良い事がわかった。
  ちなみに「Ignore」は「無視」という意味だ。

「jp」ドメインを集計しない(無視する)設定
IgnoreSite     .jp
#IgnoreURL      /test*
#IgnoreReferrer file:/*
#IgnoreAgent    RealPlayer
#IgnoreUser     root

  この設定で集計を行ったら、予想通り、順位表には「jp」ドメインが
載って来なかった。

「jp」ドメインを集計しない設定をした結果
「jp」ドメインを集計しない設定をした結果
見事に「jp」ドメインの集計から外れている。

  さて、肝心の円グラフを見てみる。すると

「jp」ドメインを表示させない設定をした結果
「jp」ドメインを表示させない設定をした結果
「jp」ドメインが含まれていない事がわかる。
この事から「jp」ドメインが集計対象から外されている事がわかる。

  うまくいった (^^)V

  これで、特定のドメインを集計から外す方法がわかった。

  ここで「Hide」と「Ignore」の違い。
  設定ファイルを見てみる。

「Hide」と「Ignore」の違い(設定ファイルの記述)
# The Hide*, Group* and Ignore* and Include* keywords allow you to
# change the way Sites, URL's, Referrers, User Agents and Usernames
# are manipulated.  The Ignore* keywords will cause The Webalizer to
# completely ignore records as if they didn't exist (and thus not
# counted in the main site totals).  The Hide* keywords will prevent
# things from being displayed in the 'Top' tables, but will still be
# counted in the main totals.  The Group* keywords allow grouping
# similar objects as if they were one.  Grouped records are displayed
# in the 'Top' tables and can optionally be displayed in BOLD and/or
# shaded. Groups cannot be hidden, and are not counted in the main
# totals. The Group* options do not, by default, hide all the items
# that it matches.  If you want to hide the records that match (so just
# the grouping record is displayed), follow with an identical Hide*
# keyword with the same value.  (see example below)  In addition,
# Group* keywords may have an optional label which will be displayed
# instead of the keywords value.  The label should be seperated from
# the value by at least one 'white-space' character, such as a space
# or tab.
上の部分の内容
ピンクの部分が「Ignore」の説明だ。
完全にデータの集計から無視すると書いている。

青い部分が「Hide」の部分だ。
順位表からは外されるが、集計される事を書いている。
そのため「jp」ドメインを「Hide」を使って隠しても
グラフでは表示されるわけだ。

  後になって英文を読めば「なるほど」と思うが、設定前に読んだ時は
「よくわからん」だった (^^;;

  こんな時、英文に苦しむ前に、先にソフトの設定を触りながら、
色々と動かしてみる事が大事だと思ったりする。

さて、他にできる設定を見ていく事にした。 プロバイダーの「ne.jp」ドメインの接続が結構多い。 なので、ODNとかOCNなどといった「ne.jp」ドメインの接続の集計を 個々に行うのではなく、「ne.jp」という形で一括して行いたいと思った。 そこで設定ファイルなどを眺めると、以下のようにすれば良い事がわかった。
「ne.jp」ドメインを一括した形で集計する設定
GroupSite      *.ne.jp
#GroupSite      *.compuserve.com

  この結果は・・・

「ne.jp」ドメインを一括して集計した結果
「ne.jp」ドメインを一括して集計した結果
「ne.jp」ドメインという一括した形で集計されるのがわかる。
一括して集計している所だけ、背景の色も違う。

ただ、「ne.jp」ドメインが一括された形なのだが、
個々の「ne.jp」ドメインを持った「ocn.ne.jp」なども
集計に載ってくる。

一括集計だからと行って、それを構成している個々の物が
順位表から消えるわけではない。
この事から「jp」ドメインが集計対象から外されている事がわかる。

  うーん、「ne.jp」を一括した形でまとめれば、個々の構成している物が
順位表から消えると思ったが、そうでなかった。


  他にもドメインのグループ化の方法がある。
  ドメインで左から2番目だけをグループ化する方法がある。
  例えば、「co.jp」や「ne.jp」、「ac.jp」といった感じで、
上位から2番目までのドメインを一括りにして、集計を取る方法だ。

上位2番目までのドメインを一括した形で集計する設定
GroupDomains   1
「1」をした場合、左から2番目までのドメインを1つの単位にして
集計を行うというのだ。
初期設定では「0」になっている。初期設定ではグループ化を
行わないという設定だ。

  その結果は・・・

上位2番目までのドメインを一括して集計した結果
上位2番目までのドメインを一括して集計した結果
見事に、上位2番目までのドメインを1つの単位として
集計されている様子がわかる。
一括して集計している所だけ、背景の色も違う。

  上位3番目までのドメインを一括して集計する事ができる。
  その設定は以下の通りだ。

上位3番目までのドメインを一括した形で集計する設定
GroupDomains   2
「2」をした場合、左から3番目までのドメインを1つの単位にして
集計を行うというのだ。

  さて、結果を見てみる。

上位3番目までのドメインを一括して集計した結果
上位3番目までのドメインを一括して集計した結果
見事に、上位3番目までのドメインを1つの単位として
集計されている様子がわかる。
一括して集計している所だけ、背景の色も違う。

  上位3番目までのドメインを一括して集計できる事がわかった。


  さて、一括した集計した部分は、背景の色が違う事に気づく。

  この背景の色を消す方法がある。以下の通りだ。

一括集計した部分の背景の色を消す設定
GroupShading   no
初期状態では「yes」になっているので、背景の色を消したい場合は
この設定を行う必要がある。

  さて、この結果は・・・

一括して集計した部分の背景の色を消す
一括して集計した部分の背景の色を消す
見事に、周囲と同じ背景の色になった。

  だが、一括して集計をした部分は、文字が太い。
  これも消す事ができる。以下の設定になる。

一括集計した部分の文字の太さを普通にする設定
GroupHighlight no
初期状態では「yes」になっているので、文字の太さを
周囲の文字に合わせる場合、この設定を行う必要がある。

  その結果は・・・

一括して集計した部分の文字の太さを普通にする
一括して集計した部分の文字の太さを普通にする
見事に、周囲と同じ文字の太さになった。

  一通り動かした所で、再び、設定ファイルに書かれている説明書きを読む。

「Group」の設定について(設定ファイルの記述)
# The Hide*, Group* and Ignore* and Include* keywords allow you to
# change the way Sites, URL's, Referrers, User Agents and Usernames
# are manipulated. The Ignore* keywords will cause The Webalizer to
# completely ignore records as if they didn't exist (and thus not
# counted in the main site totals). The Hide* keywords will prevent
# things from being displayed in the 'Top' tables, but will still be
# counted in the main totals. The Group* keywords allow grouping
# similar objects as if they were one.  Grouped records are displayed
# in the 'Top' tables and can optionally be displayed in BOLD and/or
# shaded. Groups cannot be hidden, and are not counted in the main
# totals. The Group* options do not, by default, hide all the items
# that it matches.  If you want to hide the records that match (so just
# the grouping record is displayed), follow with an identical Hide*
# keyword with the same value.  (see example below)  In addition,
# Group* keywords may have an optional label which will be displayed
# instead of the keywords value.  The label should be seperated from
# the value by at least one 'white-space' character, such as a space
# or tab.
上の部分の内容
ピンクの部分だが、「Group」を使って一括りにした物は
それが1つの集計単位として、順位表に載ってくるという。
表示の際、背景の色や太字になったりするという。

  後から英文を読み返すと意味がわかる。
  なので・・・

  そんな事では、アカンやん!

  と言われそうだが、別に英語を使った生活をしているわけでないため

  それでも良いのらー!

  と主張する (^^)

他の設定がないかなぁと探してみる。 順位表だが、接続元順位の場合、初期設定では30位まで表示される。
初期設定では接続元順位は上位30まで表示される
初期設定では接続元順位は上位30まで表示される
ここでは画像をわざと途中で切っていますが、ピンクで囲んでいる通り
上位30位まで表示されています。

  だが、30位は不要だと言う場合もある。
  そんな時、以下の設定を行う。

表示させる上位の数の変更を行う設定
TopSites        7
初期設定では「30」なので、変更する時は、ここを触る必要がある。
今回は上位7位まで表示に変更してみた。

  その結果は・・・

設定変更のため上位7まで表示される
設定変更のため上位7まで表示される
見事に、上位7位まで表示されている。

  だが、逆に全部の接続元を表示させたい場合もある。
  そんな時は、次の設定を行う。

全ての順位を表示させる設定
AllSites       yes

  この設定を行うと、接続元の順位表の尻尾の所に
全てを表示させるリンクが出てくる。

尻尾に全ての表示をさせるリンクが出てくる
尻尾に全ての表示をさせるリンクが出てくる

  そして、リンクを選ぶと、次の画面が出てくる。

全ての接続元の順位が表示される
全ての接続元の順位が表示される

  見事に全て表示された!!

  この設定を知るまでは、表示されるのは上位30位だと思いっていたが
全て表示される事がわかった。


  そして、再度、設定ファイルの書かれている英文の説明を見る。

「Top」の設定について(設定ファイルの記述)
# The "Top" options below define the number of entries for each table.
# Defaults are Sites=30, URL's=30, Referrers=30 and Agents=15, and
# Countries=30. TopKSites and TopKURLs (by KByte tables) both default
# to 10, as do the top entry/exit tables (TopEntry/TopExit).  The top
# search strings and usernames default to 20.  Tables may be disabled
# by using zero (0) for the value.

#TopSites        30
#TopKSites       10
#TopURLs         30
#TopKURLs        10
#TopReferrers    30
#TopAgents       15
#TopCountries    30
#TopEntry        10
#TopExit         10
#TopSearch       20
#TopUsers        20
上の部分の内容
上位何位まで載せるかの設定と書いている。
初期値では、接続元のサイトの場合は30位、国別ドメインも30位と書いている。

  さて、初期値だが、ここでは「#」のため、どうやってwebalizerが
初期値を認識しているかだが、ソースコードに埋め込まれている。

webalizer-2.01-10のソースコードの一部抜粋
(webalizer.c)
int     ntop_sites   = 30;                    /* top n sites to display   */
int     ntop_sitesK  = 10;                    /* top n sites (by kbytes)  */
int     ntop_urls    = 30;                    /* top n url's to display   */
int     ntop_urlsK   = 10;                    /* top n url's (by kbytes)  */
int     ntop_entry   = 10;                    /* top n entry url's        */
int     ntop_exit    = 10;                    /* top n exit url's         */
int     ntop_refs    = 30;                    /* top n referrers ""       */
int     ntop_agents  = 15;                    /* top n user agents ""     */
int     ntop_ctrys   = 30;                    /* top n countries   ""     */
int     ntop_search  = 20;                    /* top n search strings     */
int     ntop_users   = 20;                    /* top n users to display   */
上の部分の内容
ソースコードに初期値が埋め込まれているため、
設定ファイルの部分は「#」で読み飛ばしになっていても
キチンと表示されるのだ。

しかし、設定ファイルを触らずに、コンパイル前に、
こんな所を触って設定する人はいないだろうと思う (^^;;


さて、他の設定を見てみる。 ホスト名の表示の変更だ。
ホスト名が表示されている
ホスト名が表示されている
ピンクの枠で囲んでいる所がホスト名だ。
しかし、お見せするわけにいかないので、黒く塗りつぶしています (^^;;

  さて、この部分の変更が可能だという。
  ホスト名の表示を「Test」にしたい場合、次のようにすれば良い。

ホスト名の表示を「Test」に変更する場合
HostName       Test
初期状態だとホスト名が表示されるが、それ以外の物を表示させる場合
この部分を触る必要がある。

  その結果は・・・

ホスト名が表示されている
ホスト名が表示されている
表示が「Test」になった。

  そこで「Test」以外にも表示できないかと考えた。
  空白文字を含む「Web Access Data」の表示をしてみる事にした。

ホスト名の表示を「Web Access Data」に変更する場合
HostName       Web Access Data
「Web Access Data」の部分で空白があるが気にしなくても大丈夫だ。
「'」で囲んだりする必要はないのだ。

  さて結果は・・・

ホスト名が表示されている
ホスト名が表示されている
表示が「Web Access Data」になった。
空白文字があっても、そのまま入力すれば良い事がわかった。

  そうなれば、調子に乗る私は・・・

  日本語入力だって、でけるはずや!

  と思った。

  そこで、以下のような設定を行った。

ホスト名の表示の部分で、日本語表示を試してみる
HostName       うちの会社のサーバーへの接続統計
日本語が表示されるかどうか試してみる事にした。

  さて結果は・・・

日本語が問題なく表示されている
日本語が問題なく表示されている
ただし、設定ファイルに入力した日本語だが、文字コードに注意が必要だ。
EUCだと問題ないが、SJISでやってみると文字化けした。

  さて、あとから英文を読む私。
  設定ファイルに書かれている説明書きを見る。

設定ファイルの「HostName」の部分
# HostName defines the hostname for the report.  This is used in
# the title, and is prepended to the URL table items.  This allows
# clicking on URL's in the report to go to the proper location in
# the event you are running the report on a 'virtual' web server,
# or for a server different than the one the report resides on.
# If not specified here, or on the command line, webalizer will
# try to get the hostname via a uname system call.  If that fails,
# it will default to "localhost".
上の部分の内容
「HostName」でホスト名を定義する。
でも、実際のホスト名を書く必要はなく、ピンクの部分にあるように
単なる題名にしかすぎないのだ。だから何を指定しても良い事になる。

青い部分は、もし、この部分の設定を行わなかった場合の事が書かれている。
何も指定されていない場合は、unameのシステムコールを使って
ホスト名を呼び出して表示させ、もし、ホスト名の呼び出しに失敗すれば、
「localhost」を表示させるようだ。

  うーん、あとから英文を読んで内容が理解できても・・・

  全く英語力あらへんやん!

  と言われても仕方がない。
  でも・・・

  非国際派の事務員なので良いのらー!

  と完全に開きなおる (^^)


設定ファイルを眺めている間に気がついた。 各種表やグラフの表示の有無が設定できるのらー! うーん、最後になって、ようやく発見した。遅過ぎ (^^;;
設定ファイルの中身
# Country Graph allows the usage by country graph to be disabled.
# Values can be 'yes' or 'no', default is 'yes'.

#CountryGraph   yes

# DailyGraph and DailyStats allows the daily statistics graph
# and statistics table to be disabled (not displayed).  Values
# may be "yes" or "no". Default is "yes".

#DailyGraph     yes
#DailyStats     yes

# HourlyGraph and HourlyStats allows the hourly statistics graph
# and statistics table to be disabled (not displayed).  Values
# may be "yes" or "no". Default is "yes".

#HourlyGraph    yes
#HourlyStats    yes
上の部分の内容
赤い部分は国別ドメインのグラフの有無の設定。
初期設定では表示になっている。

青い部分は日にち別のグラフと順位表の表示の有無の設定。
初期設定では表示になっている。

ピンクの部分は月ごとの順位表の表示の有無の設定。
初期設定では表示になっている。

  設定ファイルを見て思った。

  横着せず、英文を見るようにならないと、回り道してしまう。
  しかし、英語が嫌いな私なので、できるだけ英語を避けたいと思ったりする。

最後に、あまり意味のない設定を紹介します。 データ集計後に吐き出されるHTMLファイルだが、その拡張子の変更ができる。
設定ファイルの中身
# HTMLExtension allows you to specify the filename extension to use
# for generated HTML pages.  Normally, this defaults to "html", but
# can be changed for sites who need it (like for PHP embeded pages).

#HTMLExtension  html
上の部分の内容
初期設定では拡張子は「html」になる。

  そこで以下のような設定をしてみた。

こんな設定にした
# HTMLExtension allows you to specify the filename extension to use
# for generated HTML pages.  Normally, this defaults to "html", but
# can be changed for sites who need it (like for PHP embeded pages).

HTMLExtension  acho
これで拡張子は「acho」になると思った。

  実際に動かしてみた。すると・・・

実験結果
[suga@server]$ ls
ctry_usage_200701.png   daily_usage_200703.png   site_200701.acho   usage_200702.acho
ctry_usage_200702.png   hourly_usage_200701.png  site_200702.acho   usage_200703.acho
ctry_usage_200703.png   hourly_usage_200702.png  site_200703.acho   webalizer.current
daily_usage_200701.png  hourly_usage_200703.png  usage.png          webalizer.hist
daily_usage_200702.png  index.acho               usage_200701.acho
拡張子が「acho」になった。

  さて、index.acho ファイルには他のHTMLファイルを見にいくための
リンクが設定されている。index.acho ファイルを見てみる。

index.acho ファイルの中身(一部抜粋)
<TR><TD NOWRAP><A HREF="usage_200702.acho"><FONT SIZE="-1">Feb 2007</FONT></A></TD>
<TD ALIGN=right><FONT SIZE="-1">1430</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">1378</FONT></TD>
リンク先のファイルの拡張子も、キチンと「acho」になっている。
これだとリンク先が見れない自体は起こらない。

  うーん、でも拡張子を変更する場合があるとは思えない。
  設定ファイルには「like for PHP embeded pages」と書いている。
  しかし、その意味が理解できないのが残念 (--;;


設定ファイルを見る上での注意点 ところで、設定ファイルのwebalizer.confだが、 ところどころ「あれっ?」と思う部分がある。 例えば、次のような場合だ。
「あれっ?」と思う箇所
#GroupUser      root            Admin users
#GroupUser      admin           Admin users
#GroupUser      wheel           Admin users
  これを見た時・・・

  なんでユーザー名が関係するねん?

  と思った。

  だが、よく考えると、集計できるログは、Apacheのログだけではない。
  プロキシーのSquidや、ftp関係のログも採取できる。

  なので、それを頭に入れていかないと、「なんで」と思う事になる。

  少なくとも3種類の異なるサーバー機能のログの集計を行うため、
設定ファイルを個別にせずに、同じファイルで兼用させると
混乱しやすい部分が出るのだ。


まとめ 今回は、七転八倒していない上、他に立派なホームページがあるため あまり面白味のない二番煎じ、三番煎じになってしまいました。 他に立派なサイトがあるので、特に私が書く必要もないと思いましたが、 自分のための備忘録として、まとめてみました (^^;; Apacheのログの分類で、ある程度なら、設定ファイルwebalizer.confで グループ化や不要なドメインを無視する事ができますが、 特定のドメインだけを集計する場合などは、このソフトを使う前に awkを使って、データを加工する必要があります。 その場に応じて、加工するのが良いと思います。 私が分析が得意なら、awkを駆使して、色々な角度からの分析で 経営的な話ができるかもしれませんが、awkを駆使する知識も、 分析を行う実力もないので、簡単な分析だけを書きました。 Squidのログや、ftpサーバーのログの解析にも使えるソフトですが、 今回は割愛しました。Squidは使っていない上、ftpサーバーも社内だと 私以外、誰も使わないためです。

次章:「PostgreSQLのトランザクション、ロック機能、VACUUMって何?」を読む
前章:「上海ペンギン旅行記」を読む
目次:システム奮闘記に戻る

Tweet