Webalizerでアクセスログを解析する
生のログはとても見にくい。見にくいだけじゃなく、いくらがんばって見つめてもアクセスの傾向など見えてこない。だが、解析ツールを使うとどのページへのアクセスが多いかとか、どこを経由して自分のサイトへアクセスしてきたかといった情報が一目で分る。その結果をもとにコンテンツを見直せば、アクセスを増すためのヒントになるだろう。
解析ツールといってもいろいろあるが、フリーのツールとしてはAnalogとWebalizerの2つが有名だ。この中でapt-getで簡単にインストールできるWebalizerの使い方を見ることにしよう。Webalizerをインストールするには「apt-get install webalizer」だけで大丈夫。もし「パッケージwebalizerが見つかりません」と言われたら、「apt-get update」を実行してからもういちどやりなおす。
# apt-get update # apt-get install webalizer
Webalizerを実行する
apt-getでインストールしたWebalizerは特に設定せずとも、コマンドプロンプトで「webalizer」と打ち込むだけで実行できる。すでに標準的な設定がなされているので、Apacheのhttpd.confでログやドキュメントのディレクトリを変更していないならそのまま動かせる。
正常に動くとアクセスログを読み込んで、次のように「××レコードありました」とメッセージが表示される。
# webalizer Webalizer V2.01-10 (Linux 2.4.27-0vl7) Japanese(EUC) ログファイル ― /var/log/httpd/access_log.1 (clf) 作成ディレクトリ: /home/httpd/html/webalizer ホスト名 ― 'localhost.localdomain' ヒストリファイルが見つかりません... 以前の実行データが見つかりません... 現在の実行データを保存しています... [02/06/2005 01:58:56] 月別レポート作成 ― 2005年 2月 総合レポートの作成 ヒストリ情報の保存... 67 レコードありました. 処理時間: 0.18 秒 #
Webalizerの解析結果を見る
Webalizerの解析結果は「/home/httpd/html/webalizer」ディレクトリに出力される。つまり、httpdのドキュメントディレクトリの中にある「webalizer」というディレクトリだ。ブラウザに「http://www.mydomain.com/webalizer/」のようにURLを打ち込むと解析結果を見られる。

項目の概要を見てみよう。ぱっと見ただけでは「ヒット」「ファイル」「ページ」の違いは分からないはず。それぞれの項目はこんな意味を持っている。よく「ヒット数」という言葉を聞くけれども、実際の解析ではあまり意味を持った数字ではない。むしろ「ページ」「訪問」あたりが重要になってくる。
| ヒット | サーバーに対するリクエストのすべて。存在しないファイルへの要求や、ユーザーのキャッシュに入っていて送信はしなかったファイルも含まれる。 |
| ファイル | ユーザーからの要求にこたえて実際に送信を行ったファイルの数。ヒットが入力の数とすれば、ファイルは出力の数になる。 |
| ページ | ページの数。HTMLファイルのほか、CGIやPHPが生成したページもそれぞれカウントされる。画像などのファイルは含まない。 |
| 訪問 | サイトを訪問したユーザーの数。同一IPアドレスからリクエストがあった場合、30分以内であればカウントされない。30分を超えると新規訪問と見なされる。 |
| サイト | いくつのIPアドレスからリクエストを受け取ったか。異なるユーザーからのアクセスでも同一IPアドレスからであれば1つとしてカウントされる。 |
| キロバイト | サイトが送信したデータの総量。ログの中に記録された各ファイルのサイズを合計したもの。 |
Webalizerを設定する
標準のままでもWebalizerは動いてくれるが、ディレクトリを変更していたり、集計の方法を変更したいときは設定ファイルを編集する必要がある。Webalizerの設定ファイルは「/etc/webalizer.conf」だ。設定項目の数はとても多いので、その中から重要そうなものをピックアップしよう。
LogFile /var/log/httpd/access_log.1 ログファイルのディレクトリとファイル名を指定する。 最新のログを解析するならaccess_logを指定する。 OutputDir /home/httpd/html/webalizer Webalizerが出力するファイルの場所を指定する。 ブラウザで閲覧できる場所にすること。 Incremental yes 古い情報を残したまま新しい情報を追加していく。 「No」にするとログが消えると解析結果も消えてしまう。 PageType htm* PageType cgi #PageType phtml #PageType php3 #PageType pl 上の表にある「ページ」として見なすファイルの拡張子。 PHPなどを使っているなら該当する拡張子を追加する。 #DNSCache dns_cache.db ログのIPアドレスからホスト名を逆引きするときに、 DNSデータをキャッシュすることで高速化する。 Vine LinuxのWebalizerでは逆引きはできない。 #TopSites 30 #TopKSites 10 #TopURLs 30 #TopKURLs 10 #TopReferrers 30 #TopAgents 15 #TopCountries 30 #TopEntry 10 #TopExit 10 #TopSearch 20 #TopUsers 20 月別ページでの集計結果を何位まで表示するか。 「0」にするとその項目は表示されなくなる。 #AllSites no #AllURLs no #AllReferrers no #AllAgents no #AllSearchStr no #AllUsers no 各項目についてすべての記録を表示する。 「yes」にするとそこ項目についての別ページが作られる。 #HideSite *mrunix.net #HideSite localhost #HideReferrer mrunix.net/ 集計結果に含めたくないサイトを登録する。 自分のサイトを指定しておくと集計はされない。 HideURL *.gif HideURL *.GIF HideURL *.jpg HideURL *.JPG HideURL *.png HideURL *.PNG HideURL *.ra HideURL *.zip HideURL *.gz HideURL *.Z HideURL *.tgz HideURL *.bz2 HideURL *.lha HideURL *.patch HideURL *.diff HideURL *.rpm HideURL *.deb 集計結果に含めたくないファイルの拡張子を指定する。 標準では画像ファイルや書庫ファイルが指定されている。 #GroupReferrer yahoo.com/ Yahoo! #GroupReferrer excite.com/ Excite #GroupReferrer infoseek.com/ InfoSeek #GroupReferrer webcrawler.com/ WebCrawler リンク元のURLを1つのグループとして扱う。 どの検索エンジンから訪問があったかを見るときに便利。 SearchEngine yahoo.com p= SearchEngine altavista.com q= SearchEngine google.com q= SearchEngine eureka.com q= SearchEngine lycos.com query= SearchEngine hotbot.com MT= SearchEngine msn.com MT= SearchEngine infoseek.com qt= SearchEngine webcrawler searchText= SearchEngine excite search= SearchEngine netscape.com search= SearchEngine mamma.com query= SearchEngine alltheweb.com query= SearchEngine northernlight.com qr= SearchEngine google.co.jp q= SearchEngine yahoo.co.jp p= SearchEngine yahoo.co.jp q= SearchEngine infoseek.co.jp qt= SearchEngine excite.co.jp search= SearchEngine goo.ne.jp MT= SearchEngine msn.co.jp q= SearchEngine search.nifty.com Text= SearchEngine biglobe.ne.jp q= リンク元が検索エンジンなら何のキーワードを指定したか。 太字の部分も追加するといい。
設定項目の中で「DNSCache」というのがあるが、コメントを外して有効にしてもエラーが出る。Webalizerにはアクセスログの中にあるIPアドレスからホスト名を逆引きする機能があるが、Vine
Linuxのapt-getでインストールされるWebalizerではこの機能が無効になっている。つまり、IPアドレスのままでしか集計結果が表示されないわけだ。
これを解決するには、httpd.confの中にある「HostnameLookups」の項目を「on」に変更し、ホスト名の形でアクセスログを記録すればいい。アクセスが多いサイトではアクセスがあるたびに逆引きが行われるのでサーバーに負荷がかかるが、よほどの人気サイトでもない限り問題はないと思う。
また、Webalizerのソースを入手し、DNSの逆引きを有効にしてコンパイルするという手もある。configureにenable-dnsというオプションを追加すればいい。こちらのサイトからWebalizerの最新のソースを入手し、次のようにしてコンパイルする。
$ tar zxfv webalizer-2.01-10-src.tgz $ cd webaizer-2.01-10 $ ./configure --with-language=japanese --enable-dns $ make $ su - # make install
過去のログをすべて解析する
/etc/webalizer.confを編集したら、いったん/home/httpd/html/webalizerに出力された集計結果のファイルをすべて削除し、新たに集計をやりなおす。そのとき、古いログも残っていたらそれもすべて解析にかけるといい。
アクセスログは毎週新しいファイルが作成され、古いファイルは名前を変えて過去4週分が保存されている(1つのファイルに記録する期間と、保存する古いファイルの個数は/etc/logrotate.confで変更できる)。lsコマンドでログのディレクトリ(/var/log/httpd)を確認してみよう。
$ ls -l /var/log/httpd 合計 13492 -rw-r--r-- 1 root root 509767 Feb 10 01:28 access_log -rw-r--r-- 1 root root 1085700 Feb 6 03:59 access_log.1 -rw-r--r-- 1 root root 867948 Jan 30 03:57 access_log.2 -rw-r--r-- 1 root root 985214 Jan 23 03:22 access_log.3 -rw-r--r-- 1 root root 1400689 Jan 19 23:35 access_log.4 -rw-r--r-- 1 root root 29393 Feb 10 01:27 error_log -rw-r--r-- 1 root root 115741 Feb 6 04:02 error_log.1 -rw-r--r-- 1 root root 220857 Jan 30 04:02 error_log.2 -rw-r--r-- 1 root root 100044 Jan 23 11:31 error_log.3 -rw-r--r-- 1 root root 89497 Jan 19 23:35 error_log.4 -rw-r--r-- 1 root root 0 Feb 6 04:02 ssl_request_log -rw-r--r-- 1 root root 6526 Jan 30 23:09 ssl_request_log.1 -rw-r--r-- 1 root root 0 Jan 23 04:02 ssl_request_log.2 -rw-r--r-- 1 root root 0 Jan 19 23:35 ssl_request_log.3 -rw-r--r-- 1 root root 0 Jan 19 23:35 ssl_request_log.4 $
access_logというのが最新のアクセスログで、××.1、××.2、××.3の順に古くなっていく。この過去のログをWebalizerへ古い方から順番に読み込ませるといい。これでログに残っている分はすべて集計することができる。
# webalizer /var/log/httpd/access_log.4 # webalizer /var/log/httpd/access_log.3 # webalizer /var/log/httpd/access_log.2 # webalizer /var/log/httpd/access_log.1 # webalizer /var/log/httpd/access_log
次に/etc/webalizer.confの「LogFile」の設定を「access_log」に変えておく。すると次からただ「webalizer」と打ち込むだけで、ログの新しい部分だけが集計結果に追加されていく。手動で設定するのも面倒なのでcronで自動実行するようにしておけばいいだろう。
cronで自動実行させるには「/etc/crontab」に記述を追加する。新しいログの作成は毎週日曜日の午前4時22分に行うように設定されているため、毎日実行する場合でも午前4時22分の直前にログ解析を行うように指定すべき。午前6時なんて時間を指定すると、毎週日曜日のデータがごっそり解析の対象から抜け落ちてしまう。下の例では毎日午前4時20分にWebalizerを実行するように指定している。
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly 20 4 * * * root run-parts /usr/bin/webalizer
複数サイトを運営しているときは
一台のサーバーで複数のドメイン(もしくはサブドメイン)を動かしていて、それぞれ別にアクセスログをとっている場合は、それぞれのアクセスログに対してWebalizerを実行すればいい。たとえば、「www.mydomain.com」のほかに「red.mydomain.com」「blue.mydomain.com」という2つのドメインがあったと仮定しよう。
- Webalizerの設定ファイルである/etc/webalizer.confをコピーして、/etc/webalizer_red.confと/etc/webalizer_blue.confといったファイルを作成する。
- それぞれの設定ファイルをviで開いて、アクセスログと集計結果出力先のディレクトリを指定する。
- 新しく作った設定ファイルをWebalizerに読み込ませる。webalizer -c /etc/webalizer_red.conf、webalizer -c /etc/webalizer_blue.confのようにする。
- 手動で実行するのは面倒なので、上のコマンドを/etc/crontabに追加する。同時に実行するとトラブルの元なので2〜3分ずつずらして指定するといい。