Analog によるアクセスログ解析
このページで紹介しているツールは現在はメンテナンスされていません。代替ツールの利用に当たっては注意してください。
独自サーバを立て WWW サーバを運用してる方は、アクセスログも採っていると思います。アクセスログはテキスト形式ですので、ビューアで見ても良いのですが、統計処理を手作業で行なうのは大変です。Analog というツールは、アクセスログの解析と統計処理を、高速に行なってくれます。以下、Redhat Linux 7.x (Apache 1.3.x) 用で Analog を導入した際の方法を簡単に書いておきます。
インストール
>Analog の公式サイト (現在はリンク切れ)より RPM パッケージをダウンロードします。筆者が試したのは、バージョン5.3.1 の Intel 版です。
# wget http://www.iddl.vt.edu/~jackie/analog/analog-5.31-1.i386.rpm # rpm -K --nogpg analog-5.31-1.i386.rpm # rpm -Uvh analog-5.31-1.i386.rpm
analog.cfg の編集
/etc/analog.cfg ファイルで、解析のオプションを指定できます。ただし、デフォルトでインストールされる /etc/analog.cfg はあまり参考にならないので、 /usr/share/doc/analog-5.31/examples/big.cfg を /etc/analog.cfg にコピーして、これを編集して利用します。
ログのフォーマットとファイル名を設定します。httpd.conf で設定されているログの形式を指定します。ログファイルは、* で指定することも可能ですので、ローテーションさせている場合は便利です。また、複数行の記述で、いくつかのログファイルを指定することもできます。バージョン 5.3.1 では、圧縮ファイルもそのまま読み込めます。
LOGFORMAT combined LOGFILE /var/log/httpd/access_log LOGFILE /var/log/httpd/access_log.*
HOSTNAME には、サイト名を記述します。漢字コードは後述の LANGUAGE と同じものを指定してください。
HOSTNAME "サイト名" HOSTURL http://mysite.example.jp/
レポートの出力ファイルを絶対パスで指定します。ファイル名はここでは report.html としますが、何でも構いません。
OUTFILE /var/www/html/report.html
言語を指定します。レスポンスヘッダでの文字コード指定に合わせて、JAPANESE-SJIS, JAPANESE-JIS, JAPANESE-EUC のいずれかを指定しましょう。
LANGUAGE JAPANESE-EUC
解析の実行
では、アクセスログを解析してみます。出力先のディレクトリにファイルを書き込める権限があれば、どのユーザで実行しても構いません。
$ analog
警告 (Warning) が出ることもありますが、ともかく、report.html が出力できていれば OK です。出力に失敗した場合は、ディレクトリが存在するか、またアクセス権があるか確認しましょう。
出力された report.html をブラウザでアクセスしてみましょう。円グラフや棒グラフが使われた解析結果が表示されるはずです。一部検索単語が文字化している場合がありますが、後述の方法で回避できます。
ファイルの出力先を変更した場合、画像がうまく表示されないときは、 /var/www/html/images/ にある画像ファイルを適切な場所に移動しましょう。
DNS の設定
初期状態では、ドメインレポート、組織レポートが、IP アドレスでの統計となっています。この IP アドレスをドメインに変換するには、DNS の設定が必要になります。サーバで DNS サーバが実行されている必要はありませんが、DNS を利用できる環境が必要です。
DNSFILE /var/cache/analog/dnscache DNSLOCKFILE /tmp/dnslock DNS WRITE
このように指定して、Analog を再度実行してみましょう。DNS の設定前に比べると、とてつもなく時間がかかりますが、我慢しましょう。解析結果は IP アドレスでなく、ドメインで分類されているので、見やすいと思います。二回目以降はキャッシュが有効になるので、そこそこ早くなります。もしキャッシュファイルの作成に失敗する場合は、ディレクトリのアクセス権を確認してください。
検索単語の文字化けを回避する
さて、検索単語レポートが文字化けしているかと思います。これは、ログファイルに含まれる検索単語の文字コードが、統一されていないためです。これを回避するために、あらかじめログファイル内の検索単語部分のコードを変換、統一します。
変換には、logkf というヘルパーアプリケーションを利用します。試したバージョンは 1.0beta2 (本家から落とせなくなったので転載) です。サーバにダウンロードして解凍します。
$ wget https://futuremix.org/downloads/logkf-1.0beta2.tar.gz $ tar xzvf logkf-1.0beta2.tar.gz
解凍したディレクトリに移動して、make を実行します。
$ make
コンパイルされた logkf というファイルが出来ますので、パスの通ったディレクトリ (/usr/local/bin など) にコピーします。次に、logkf を実行します。次の例では、文字コードを EUC に統一し、/tmp に出力します。もちろん文字コードは、Analog.cfg での文字コード指定と揃える必要があります。
$ logkf -e /var/log/httpd/access_log > /tmp/access_log
この出力されたファイルを Analog の解析対象にすれば、検索単語が文字化けしないようになります。
更なるオプション指定
画像を GIF 形式ではなく、PNG 形式にしたい場合は、次のように指定します。
PNGIMAGES ON LOGO analogo.png
特定のファイルを除外したい場合は、EXCLUDEFILE で、ファイル名のパターンを指定します。たとえば、画像を含まないようにする場合は、次のように指定します。
EXCLUDEFILE /images/*.*
どのページからリンクされているのか、といった情報を出力するには、リファラーの統計を ON にします。REFERER はリンク元の URI を、REFSITE は、その URI をサイト毎(ドメイン毎)にまとめた結果を出力します。リンク元から自サイトを除外するための指定も付け加えておきます。
REFERRER ON REFSITE ON REFREPEXCLUDE http://mysite.example.jp/* REFSITEEXCLUDE http://mysite.example.jp/
ドメインレポートで、.jp → ne.jp → ocn.ne.jp の様に、
階層構造で出力させるには、次の設定を行ないます。
SUBDOMAIN *.*.*
また、設定ファイルを複数用意して、切り替えることも出来ます。
次のように実行時の引数に -G, +g, および設定ファイルのパスを指定します。
+gに続けて空白を入れずにファイルパスを指定するのがポイントです。
$ analog -G +g/etc/analog_hoge.cfg
上記以外にも、Analog のオプションはたくさんありますので、色々試してみると面白いでしょう。
なお、私の環境では、初期設定のままでは、Analog 実行時に、次のような警告が出てしまいます。
$ analog -G +g/etc/analog_hoge.cfg analog: analog version 5.31/Unix analog: Warning D: In Browser Summary, SORTBY (requests) doesn't match SUBSORTBY (pages) (For help on all errors and warnings, see docs/errors.html) analog: Warning D: In Browser Summary, SUBSORTBY (pages) isn't included in COLS
一つ目は、ブラウザの統計の設定で、ソートキーが REQUESTS なのに、サブソートキーが PAGES であるという警告のようです。二つ目は、サーブソートキーが PAGES にもかかわらず、カラムの中に PAGES が含まれていないという警告です。このメッセージが出ないようにするには、設定ファイルで次の設定を追加します。
BROWSUMCOLS RP SUBBROWSORTBY REQUESTS
自動実行
どうせなら、Analog を1日1回なり、週に1度なり、自動実行させるようにしてみましょう。これには crond を動作させる必要があります。cron の設定ファイルを編集します。
# crontab -e
としてエディタを起動させて、新しい行に cron の設定を追加します。その際に、cron の環境変数も忘れずに設定しましょう。次の例は、毎日午前4時00分に Analog を実行します。
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin MAILTO=root HOME=/ 0 4 * * * analog
また次の例は、毎週日曜日の 午前3時に logkf を実行し、午前3時15分に analog_hoge.cfg の設定に従って統計を出力させます。
0 3 * * sun logkf -e /var/log/httpd/access_log > /tmp/access_log 15 3 * * sun analog -G +g/etc/analog_hoge.cfg
アクセスログの解析
自宅のサーバでWebサイトを公開しているとやっぱりアクセルログの状況が気になるものです。 今まで簡単なcgiで解析をしていましたがもう少し細かい解析情報がほしいのでこの際、analogというソフトを導入しました。 自分のためにインストールログを残しておきます。……
トラックバック by Zakimi::Blog — 2004-02-20 22:53
Analogを使ったアクセスログ解析を検討しています。
以下のアドレスにあるApacheLogViewerにより生ログを解析をしたのですが、
http://home.ns01.info/circle/
一部ドメイン名が取得できないIPがあります。
それらのIPがどういったアクセス元であるかを知りたいので、
以下のようなサイトで一つ一つ検索して集計しているのですが、
http://whois.ansi.co.jp/
Analogを使うことでこうした問題を解決できるものでしょうか。
最終的には日本語に対応した文字コードによる
アクセス元とページビューが一覧できるかたちに
出力できたらと考えております。
ご存知でしたらご回答の程、よろしくお願いいたします。
コメント by frills — 2004-10-19 16:56
Fedora coreへのanalogの導入
mild2.jpサーバーにログ整形ツールの一種である analog を導入してみ…
トラックバック by 一語/一区 — 2004-10-21 20:11