ログ解析(Analog+ReportMagic)


ホームページのアクセス状況を知るために、Apache のログ解析を行います。
Apache のログ解析プログラムでは、Analog が有名です。
Analog の出力でも十分なのですが、その結果をより見やすく表示してくれるプログラムが ReportMagic です。

<ログ解析の流れ>
Apache Anarog ReportMagic ブラウザ
ログファイル Apacheログファイルから
解析ファイルの出力
Analogの解析ファイルから
HTMLファイルの作成
ReportMagicが出力した
ファイルの表示

Analog と ReportMagic のインストールをレポートします。

Analogのインストール


いつものようにapt-getでインストールします。
# apt-get update
# apt-get install analog
特に問題なくインストールされます。

Analogの設定ファイルを変更します

ファイル名:/etc/analog.cfg

修正・追加内容 意 味
LOGFILE /var/log/apache2/access.log apacheのログを指定
OUTPUT COMPUTER 出力ファイルをReportMagic用の形式で作成するように指定
OUTFILE ana_report.dat 出力ファイルの名前を指定
LANGFILE /usr/share/analog/lang/jpe.lng 言語の指定
HOSTNAME "alk.dip.jp" ホスト名の指定

ReportMagicのインストール


これも同じくapt-getでinstall
# apt-get install rmagic

rmagicの設定ファイルは、下記です。
/etc/rmagic/

インストール直後は、英語環境の設定になっています(これは、各自の環境で違うと思いますが)。
/usr/share/rmagic/lang/ja/ に日本語環境用の設定ファイルがあります。
これを、/etc/rmagic/ へコピーします。
コピーするファイル名
  • cdata.ini
  • lang.ini
  • rdata.ini
  • rmagic.ini

rmagic.iniに[graphs]セクションがあり、グラフィック表示に使用するフォントを指定する必要があります。
設定例では kochi-mincho.ttf をしているので、筆者もそれに習って 、kochi-mincho.ttf を使うことにします。

筆者のシステムでは、日本語を使用するつもりが無かったので、日本語フォントが入っていません。
kochi-mincho.ttfをインストールします。

# apt-get install ttf-kochi-mincho

[graphs]セクションのFontを下記のように変更します。

Font = /usr/share/fonts/truetype/kochi/kochi-mincho.ttf,14,14,14

ここで問題が!!!


実行させたところ、グラフィックの文字が正常に表示されていません。
色々調査した結果、GD(グラフィック関連ライブラリ)の文字処理の対象コードUTF-8になっているようです。
AnalogやRepotMagicはEUCコードで出力します。

何か方法があるのかも知れませんが、筆者はグラフィック関連には疎いので、文字化けは我慢することにしました。
文字化けを起こすのは、グラフィック内の文字だけなので大きな実害はなさそうです。

こんな場合の本来の対処方法をご存知の方は、教えてください。m(_~_)m


ここで、またまた問題が!!!


アクセスログの解析結果で、検索文字列の表示があります。
この文字列がURLエンコードされて表示されます。
検索エンジンは、検索文字をURLエンコードして取得しています。
この文字列が、そのままログの解析結果として表示されているのです。

どんな、検索文字で私のホームページにやってくるのか興味があります。

ここは、頑張ってURLデコードして表示することにチャレンジしました。
最初に提示した、ログ解析の流れの間にURLでコード換処理を入れます

<新しいログ解析の流れ>
Apache Analog URLデコード ReportMagic ブラウザ
ログファイル Apacheログファイルから
解析ファイルの出力
Analogの出力ファイル
から検索文字列を探し
出しURLデコードする
URLデコードさらたファイル
からHTMLファイルの作成
ReportMagicが出力
したファイルの表示

Analogが出力する解析結果ファイルの検索文字列の行は次のようなフォーマットになっています。

n   R   3   %E8%A8%AD%E5%AE%9A

先頭が n の行を探し出し、URLデコードします。

URLデコードするために漢字コードの変換処理が必要です。
Perl用変換パッケージの使用の為 libunicode-japanese-perl をインストールします。

# apt-get install libunicode-japanese-perl

URLデコード部は次のように処理しました。

#!/usr/bin/perl
use Unicode::Japanese qw(PurePerl);
$in_file = 'ana_report.dat';
$out_file = 'report.dat';
$cvt_str = Unicode::Japanese->new( );
open(IN,"<$in_file");
open(OUT,">$out_file");
while($line = <IN>){
    if($line =~ /^n\t/){
        $line =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
        $cvt_str->set($line,'utf8'); パラメータに'auto'を指定すると変換に失敗することがありました
        $line = $cvt_str->euc;
    }
    print OUT $line;
}

 $cvt_str->set($line,'utf8') の'utf8'は、文字コードをutf8であると決め付けています。
しかし、検索エンジンによっては、ShiftJISであったりJISであったりと特定できません。

パラメータに自動判定用の auto を指定しての実験も行いましたが、結構、判定に失敗します。
Googleからこのサイトに来る人が多いようなので、検索文字コードは、とりあえず utf8 を対象にしました。
これで問題が多ければまた考えることにしよう(ヨッパ得意の問題の先送り 笑)

cronで定期的なログ解析の実行


cronで毎日4:30にログ解析が起動するように設定します。
<cronの設定方法>
PuTTYでログイン
crontab -eの実行
エディッタが起動するので、下記を入力
30 4 * * * /usr/local/〜〜〜.pl


ログ結果


ログ解析結果例

グラフを見ると文字化けしています。
ヨッパはとりあえず、無視します。

Analog+ReportMagicでのログ解析の他にも、素晴らしいログ解析ツールがあるようです。
筆者は、ログを解析してどうのこうのするつもりは、ありません。
さらに詳しい情報(解析結果)が欲しくなったとき、別のログ解析ツールにチャレンジしようかと考えています。