Analog + DNSTran による Apache のログ解析

Analog によるログの解析です.ここでは,Apache のログを解析します.また,Apache のログには標準で IP のみが記録され,ホスト名は記録されません.ログの IP からホスト名を逆引きするのに DNSTran を使用します(Analog でも可能ですがいちいち逆引きするので遅いため DNSTran で生成されたものをキャッシュとして使います).また,Google などの検索語句は UTF-8 になっているのでそのままでは化けてしまい何かわからないので,analogurldecode という perl スクリプトを使用します(実行には Jcode.pm が必要です).Analog は Web ブラウザから実行することも可能ですが,ここでは cron によって定時に実行する方法をとります.

インストール

Analog のサイトは, http://www.analog.cx/ です,DNSTran のサイトは, http://www.summary.net/soft/dnstran.html です,analogurldecode のサイトは, http://www.inwonder.net/~dayan/soft.html です.Analog のインストールは少し変わっていて configure スクリプトがなく,make で出来たバイナリなどを好きなところにコピーする形となっています.

 
# wget http://www.analog.cx/analog-5.32.tar.gz
# wget http://www.summary.net/soft/dns-x86.tar.gz
# wget http://www.inwonder.net/~dayan/soft/analogurldecode
# tar xvzf analog-5.32.tar.gz
# cd analog-5.32
# make
# mkdir /usr/local/analog
# cp analog anlgform.pl /usr/local/analog
# cp -r images/ lang/ /usr/local/analog
# cp -r images/ /home/httpd/html/analog
# chown -R httpd:users /home/httpd/html/analog/images
# cp analogurldecode /usr/local/analog
# chmod 755 /usr/local/analog/analogurldecode

コンフィグ

コンフィグのファイルは任意の名前,任意の場所で OK ですが,ここでは名前を,analog.cfg,場所を /usr/local/analog とします.また,この設定ファイルはアーカイブを展開された中にある analog.cfg を基に作成されています.また,analog は標準で analog 自身のディレクトリにある設定ファイルを見るようです.

 
# Configuration file for analog 5.32
# See http://www.analog.cx/
#
# Here are a couple of configuration commands to get you started. Add any more
# you like from the Readme.
#
# Lines starting with # are comments.
#
# There is a much more extensive configuration file in examples/big.cfg
#
# If you need a LOGFORMAT command (most people don't -- try it without first!),
# it must go here, above the LOGFILE commands.

# ログの形式が,Apache 方式であることを Analog に知らせます
APACHELOGFORMAT COMBINED
# ログのありかを指定します
LOGFILE /usr/local/apache2/logs/access_log
LOGFILE /usr/local/apache2/logs/access_log.*
# 出力言語を指定します
LANGFILE lang/jpe.lng
# DNSTran によって生成されるホスト情報を記載します
DNSFILE /usr/local/dnstran/dnscache
# ログの IP からホストを逆引きするのを抑制します
# これはすでに DNSTran によって生成されているためです.
DNS READ

# HOSTEXCLUDE によって除外するホストを指定します
HOSTEXCLUDE m9841.info
HOSTEXCLUDE .m9841.info
HOSTEXCLUDE 192.168.1.0/24
# FILEEXCLUDE によって除外するファイルを指定します
FILEEXCLUDE /analog/*
FILEEXCLUDE /count/*
FILEEXCLUDE /htmllint/*
FILEEXCLUDE /rrdtool/*
FILEEXCLUDE /squid/*
FILEEXCLUDE /test/*
FILEEXCLUDE /upload/*
FILEEXCLUDE /webalizer/*

# ホストレポートを有効にします
HOST ON
# リファラレポートを有効にします
REFERER ON
# リファラの閾値を決めます
REFFLOOR 1r
# リファラレポートから除外する語句を指定
REFREPEXCLUDE http://m9841.info/*
# リファラサイトのレポートを有効にします
REFSITE ON
# リファラサイトの閾値を決めます
REFSITEFLOOR 1r
# リファラサイトから除外する語句を指定
REFSITEEXCLUDE http://m9841.info/
# 検索語句レポートを有効にします
SEARCHQUERY ON
# 検索語句レポートの閾値を決めます
SEARCHQUERYFLOOR 1r
# 検索後レポートの閾値を決めます
SEARCHWORDFLOOR 1r
# ブラウザレポートを有効にする
FULLBROWSER ON
# ブラウザの概要を表示します
BROWSER ON

# 出力先を決定します
# analogurldecod 出の処理を考えてファイル名をつけておきます
OUTFILE /home/httpd/html/analog/index_before.html
# 出力結果表示のときのホスト名を決定します
HOSTNAME "M9841.INFO"

# ここから先は設定する必要はほとんどありません

DNSTran の用意

DNSTran はバイナリで配布されていますのでコンパイルは不要で展開してインストールするだけです.また一緒に dnstran.cfg が生成されますが,デフォルトのままで問題ありません.

 
# tar xvzf dns-x86.tar.gz
# cp -r dnstran-1.5.2/ /usr/local/dnstran

ここでは,毎日22:30に DNSTran によって,Apache の IP を解析させます.また,/usr/local/dnstran にはパスが通っていないので cron には簡単なシェルスクリプトを実行させます.

dnstran の cron ファイル
# こいつを /etc/cron.d/ に放り込みます
0 22 30 * * root /usr/local/dnstran/dnstran.sh
dnstran.sh
#!/bin/sh
# 当然ながら,このスクリプトは cron で指定された先に置きます
cd /usr/local/dnstran
./dnstran /usr/local/apache2/logs/access_log

運用

ここでは,毎日23:00(当然 DNSTran の後)に Analog を実行することにします,また,/usr/local/analog にはパスが通っていないので cron には簡単なシェルスクリプトを実行させます.

analog の cron ファイル
# こいつを /etc/cron.d/ に放り込みます
0 23 * * * root /usr/local/analog/analog.sh
analog.sh
#!/bin/sh
# 当然ながら,このスクリプトは cron で指定された先に置きます
cd /usr/local/analog
# warning を抑制
./analog -q
# analogurldecode で料理
./analogurldecode /home/httpd/html/analog/index_before.html > /home/httpd/html/analog/index.html
# 変換前のファイルを削除
rm /home/httpd/html/analog/index_before.html
# 所有者を変更
chown -R httpd:users /home/httpd/html/analog