analog (アクセス統計)

analog は、WWW サーバのログファイルを統計解析して、 結果を HTML 形式で出力します。 他にも統計解析アプリケーションはいっぱいありますが、 analog は日本語対応していてなかなか嬉しいです。

用意するもの

参考ページ

解凍、コンパイル

拾って来た analog-5.32.tar.gz を解凍します。
% cd /somewhere
% zcat /somewhere/analog-5.32.tar.gz | tar -xf -
% cd analog-5.32

Makefile は src/ にあるので、必要に応じて Makefile を変更します。 変更したらコンパイルします。
% cd src
% cp Makefile Makefile.orig
% vi Makefile
% cd ..
% make

analog.cfg

設定ファイルである analog.cfg を編集します。
% cp analog.cfg analog.cfg.orig
% vi analog.cfg
% diff analog.cfg analog.cfg.orig
< LOGFORMAT COMMON
< LOGFILE /usr/local/apache2/logs/access_log #(解析対象のログファイルを指定)
< OUTFILE index.html #(出力ファイル名)
< HOSTNAME "[www.your.server.name]" #(出力ファイルの表題に使われるだけ)
< HOSTURL http://www.your.server.name #(出力ファイルの表題に使われるだけ)
< LANGUAGE JAPANESE
< LANGFILE lang/jpe.lng
< DESCFILE lang/jpedesc.txt
< DOMAINSFILE lang/jpedom.tab
< DNSFILE dnscache
< DNS WRITE
< DNSGOODHOURS 672
----
> LOGFILE logfile.log
> # OUTFILE Report.html
> # HOSTNAME "[my organisation]"
ログファイルは、common 形式では access のみの情報となりますが、 combined 形式なら access, agent, referer の情報を含みます。 Apache におけるログ形式の変更は Apache2 のインストールと設定を参照してください。 common 形式ではなく、combined 形式のログファイルを用いる場合は、 LOGFILE の前に LOGFORMAT COMBINEDを入れておきます。
.....
LOGFORMAT COMBINED
LOGFILE /usr/local/apache2/logs/access_log
.....

ドメインレポートは、ホスト名を頼りにどこの国からアクセスしたかを報告します。 log ファイルに IP番号しかないとき、DNS を参照してホスト名を知る必要があります。 しかしいちいち nslookup してたのでは大変なので、一度調べたものはキャッシュします。 DNSFILE はそのキャッシュファイルの名前を指定します。 DNS WRITE は、まず dnscache を参照し、なければ nslookup し、 結果を dnscache に付け加えます。 一度検索に成功して dnscache に入っているデータベースを どれくらいの頻度で確認するかを決めるのが DNSGOODHOURS です。 この場合は 672 時間(4週間)となっています。

anlgform.pl

以下、analog を /usr/local/analog/analog-5.32/ 以下に インストールするものとします。
% cp anlgform.pl anlgform.pl.orig
% vi anlgform.pl
% diff anlgform.pl anlgform.pl.orig
< $analog = '/usr/local/analog/analog-5.32/analog'; #(右辺はインストールする場所)
perl がインストールされている場所が /usr/bin/perl でない場合は、 1行目の #!/usr/bin/perl を変更しておきます。

jpform.html

% cd lang
% cp jpeform.html jpeform.html.orig
% vi jpeform.html
% diff anlgform.pl anlgform.pl.orig
< <h1><img src="/usr/local/analog/analog-5.32/images/analogo.gif" alt="" Analog フォーム・インタフェース</h1>
< <form action="/usr/local/analog/analog-5.32/cgi-bin/anlgform.pl" method="POST">
----
> <h1><!-- img src="/images/analogo.gif" alt="" -->
> <!-- form action="/cgi-bin/anlgform.pl" method="POST" -->

インストール

インストールは単にファイルのコピーです。
# mkdir -p /usr/local/analog/analog-5.32
# cp -R analog analog.cfg anlgform.pl ./lang ./images /usr/local/analog/analog-5.32/

テスト

# cd /usr/local/analog/analog-5.32
# ./analog
これでカレントディレクトリに index.html というファイルが出来ていればOKです。

図ファイルの置き場所

analog は index.html ファイルの他、 いくつかのグラフ(code.png, dir.png など)も作ります。 これら png ファイルは index.html ファイルと 同じディレクトリになければなりません。 また、images/ 以下の絵ファイルも使いますので、 images/ ディレクトリを index.html と同じディレクトリに置いておきます。

作業の自動化(crontab)

crontab で analog を自動的に動かします。
# crontab -e

0 0 * * * /somewhere/make_analog_report

上の例では、 毎日0時0分にスクリプト make_analog_report を動かします。 make_analog_report の中身は次のようなものです。
#!/bin/csh -f
cd /usr/local/analog/analog-5.32
./analog
/usr/local/analog/analog-5.32 に移動してからでないと、 analog がうまく動かないみたいです。

検索語句、検索単語欄の日本語化けを直す

analog の出力では、「検索語句」欄などの日本語が化けてしまっています。 これを直すのに、 postanalog という perl スクリプトを使います。 postanalog.txt を拾って来たら postanalog という名前にして実行権を与えます。
% mv postanalog.txt postanalog
% chmod +x postanalog

postanalog は nkf の perl 拡張モジュールである NKF.pm を使います。 port の japanese/p5-nkf をインストールすればOKです。 NKF.pm は /usr/local/lib/perl5/site_perl/5.005/i386-freebsd/NKF.pm に入ります。 なお nkf はバージョン 2.0 以上がよいそうです。

analog の出力では、検索語句の順位が低いものは切り捨てられていますが、 大文字小文字を区別しなければ同じものもあります。 そこで、切り捨て内ですべて出力させるオプションを付けておきます。
# ./analog +C"REFSITEFLOOR 1r" +C"SEARCHQUERYFLOOR 1r" +C"SEARCHWORDFLOOR 1r" +C"SEARCHQUERYCHART OFF" +C"SEARCHWORDCHART OFF" (1行でかく)

得られた出力ファイル(index.html とする)を postanalog に食わせると、 標準出力に文字化けが直ったものが出力されます。
% ./postanalog -i index.html
postanalog の -i オプションは大文字小文字を区別せず小文字に変換するものです。 その他、 -q0 ですべての順位を、-q10 で10位までの検索語句を表示する、 というオプションもあります。-q のかわりに -w で同じように 順位の低い検索単語を切り捨てられます。

トラブルシューティング

何らかの理由により ports が使えない場合、nkf はソースからコンパイルします。 まず、http://www01.tcp-ip.or.jp/~furukawa/nkf_utf8/からソースを取って来ます。 [2003/10/07]現在、nkf202.tar.gzが最新です。

解凍、コンパイル、インストールをします。
% tar zxvf nkf202.tar.gz
% cd nkf202
% vi Makefile (環境によって、パラメータ[CC,,CFLAGS,PERL]を適当に修正する)
% make
% su
# install -cs -o bin -g bin -m 755 nkf /usr/local/bin
# install -c -m 644 nkf.1 /usr/local/man/man1
# install -c -m 644 nkf.doc /usr/local/man/cat1/nkfdoc.0

Perl モジュール(NKF.pm など)を作り、インストールします。
% perl Makefile.PL && make && make test
% su
# make install
参考サイト

参考サイト


FreeBSD の部屋


Last modified: Wed Apr 20 16:14:12 JST 2011