Linux 徹底活用講座 Analogの活用方法

ウェブショップやネットビジネスをやっていると、どこからどんな アクセスがあるのか気になるものです。
アクセスカウンターと違い、アクセスログ解析ソフトを使えばいろんな事を分析して、 サイト運営に役立つ情報をいろいろと教えてくれます。
パイチャートに関する設定を明示的にするようにしました。 今まではパイチャートの画像がOUTFILEで指定されたファイルと同じディレクトリに画像ファイルが 配置されて、せっかくimagesという画像ディレクトリがあるのでそのディレクトリにまとめた方が きれいだというのが理由です。

【更新】
2010/12/09:アクセスログの制限に関する設定誤りを修正
2007/08/30:チャートに関する設定とiptablesによるIPフィルターをちょっと追加
2005/08/05:不正アクセスに関する記述を少し加筆
2005/08/03:Apacheの設定によるアクセスの無効化を追加
2005/07/27:Analog5.32には細かい設定時の不具合が確認されましたのでAnalog5.01に記述変更
2004/10/04:アクセスの無効化の表現を少し変更しました。
また、アクセス表示は基本的にページへのアクセス数とするように変えました。

## Analogの導入
2005/07/27現在、お奨めの検索単語の日本語化に対応したAnalog安定版はanalog-5.01-jp1.04.src.rpmです。
Analogは以下のサイトから入手して下さい。

各種OSに対応したものが用意されています。Windows版、Linux系OS版、あるいはAthlon版と Analogの人気ぶりが伺えます。

今回はRPMのソースパッケージanalog-5.01-jp1.04.src.rpmを紹介します。 これは橘昌志氏が作成された日本語化パッチも含まれていますので手間が省けて便利です。
橘昌志氏の作成されたパッチのおかげで検索単語の日本語もきれいに表示してくれます。橘昌志氏に感謝します。

■ Analogのパッチの適用とコンパイルの仕方
$ su -
# rpm -ivh analog-5.01-jp1.04.src.rpm
プログラムを展開するディレクトリに移動します。(もちろんディレクトリは自由です)
# cd /usr/local/src/
# tar zxvf /usr/src/redhat/SOURCES/analog-5.01.tar.gz
# cd analog-5.01
# patch -p1 < /usr/src/redhat/SOURCES/analog-5.01-jp-1.04.patch
# make
Analogの画像ファイルはAnalogのレポートHTMLと同じ場所へコピーしておきます。
# cp -r images /ディレクトリ/
○ 使用ファイル
----------------------------------------------------------
analog-5.01-jp1.04.src.rpm

Analog本家サイト
http://www.analog.cx/

日本 Analog ユーザ会
http://www.jp.analog.cx/
ミラーサイト
http://www.tokyo-kasei.ac.jp/~matsuki/analog/
----------------------------------------------------------

## Analogの設定
Analogの利用の仕方には以下の2通りあります。
①analog.cfgの設定ファイルを使う
②CGIを利用したHTMLのフォームを使う
今回はベーシックにanalog.cfgの設定を紹介します。

Analogを展開したディレクトリに設定ファイルanalog.cfgがありますので
これをテキストエディタで編集します。

○Analogの設定ファイルanalog.cfgの設定
# 言語の設定、ここでは日本語EUCを指定
LANGUAGE JAPANESE
# アクセスログフォーマットの指定、Webサーバの設定も当然フォーマットを合わせておく必要があります。
LOGFORMAT combined
# アクセスログを絶対パスで指定する。
# 最後のアスタリスクはこれを入れておくとログをローテートしている場合にまとめて解析してくれます。
LOGFILE access_log*
# Analog解析の出力を指定する。ファイル名は任意
OUTFILE report.html
# 全てのパイチャートをオン
ALLCHART ON
# パイチャートの画像ディレクトリの指定。ドットをつけることを忘れないで
CHARTDIR ./images/
# パイチャートの画像ディレクトリの指定↓のパスはあくまで参考用です。
LOCALCHARTDIR /var/www/html/foo/images/
# Webサーバのホストネームを指定。これが解析出力レポートのタイトルになる
HOSTNAME "www.mydomain.com"
# 解析出力レポートのタイトルへのリンクづけ。これはあまり重要じゃないです。
HOSTURL http://www.mydomain.com/
# 月間レポートの指定(標準はONなので記入不要)
MONTHLY OFF
# 日別レポート:過去6週間分の日別のアクセス件数を棒グラフと数字で表示します。
DAILYREP ON
# 時間系レポート(月間、日別、曜日別、時間別レポートなど)をページだけのアクセス数を表示するのに便利
TIMECOLS P
# リンク元URLレポート:どのサイトからアクセスがあったのかが表示されます。
REFERRER ON
# リンク元サイトレポート:リンク元サイトをアクセス数の順で表示します。
REFSITE ON
# ブラウザの概要:アクセスしてきた方のブラウザを多い順に表示します。
BROWSER ON
# ホスト不成功レポート:文字通りWebサーバからのアクセス失敗したホストを表示
FAILHOST ON
# 大文字小文字の区別をなくす
CASE INSENSITIVE
# リクエストレポートのアクセス表示をページにする
REQINCLUDE pages
以上の設定をして、Analogを展開したディレクトリでログ解析をします。

○標準設定ファイルでの解析
# ./analog
とするとAnalogの標準設定でanalog.cfgを読み込んで指定したファイル名で出力されます。
HTMLファイルなのでブラウザから見ることが出来ます。

○標準設定ファイル以外での解析
バーチャルホストでいくつものWebサーバを解析したい場合やanalog.cfgというファイル名を 使いたくない場合は任意に、例えば、mydomain.cfgとして
# ./analog -G +gmydomain.cfg
とすることで解析できます。小文字のgの後にスペースを入れずに設定ファイルを指定します。
バーチャルホストを30設定していても、ドメイン毎に設定ファイルを 作成しておくことで、バーチャルホスト毎にレポート出力が可能です。

■実際的なAnalog設定
Analogは便利で役立つソフトに違いないのだけれど、そのままの設定ではいろいろと 解析された数字が役に立たない場合が多い。これは何もAnalogが悪いのではなく、 HTMLやCGIなどのウェブページの作り方と密接に関係あるから作成したウェブページに 最適化したAnalog設定をしないと解析した数字に意味がなくなります。

●ウェブコンテンツを作る上でのポイント
①フレームは使わない。
Analogはアクセスログに残っているものをすべてカウントしますのでフレームにより 2分割や3分割すると、その分アクセス数が多くなる。
アナログの設定によりメニューとしているフレームを無効化することも 可能ですが、それならば最初から使わないのが良いと思います。これは最近のSEO対策を考えても フレームは使わない方が良いでしょう。
②ファイルの拡張子は統一する
Analogは「JPG」と「jpg」や「gif」と「GIF」など大文字と小文字は区別して、 別の種類として扱います。
③ディレクトリ毎に画像やウェブファイルをまとめる
当たり前のことですがディレクトリ毎のアクセス数がAnalogでは見れますので便利です。

●Webサイトに対してのAnalog設定の最適化
①いろんなアクセスの無効化
アクセスの無効化をしたい場合は
FILEEXCLUDE *.gif
FILEEXCLUDE *.jpg
FILEEXCLUDE *.png
FILEEXCLUDE *.ico
また、スタイルシートやJavaScriptを外部ファイルとしている場合もアクセスとしてカウント されます。無効にしたい場合は
FILEEXCLUDE *.css
FILEEXCLUDE *.js
あるいは、最近FLASHコンテンツが多くなっています。無効にしたい場合は
FILEEXCLUDE *.swf
■Apacheの設定によるアクセスの無効化
その場合はApacheのhttpd.confに以下のような設定にして下さい。
SetEnvIf Request_URI "¥.(gif|jpg|png|ico|css|js|swf)$" no_log
# 上記以外のアクセスをログに記録する。logs/access_logは実際のアクセスログファイルに読み替えて下さい
CustomLog logs/access_log combined env=!no_log

②自サイトからのリンクの無効化
Analogにはリンク元URLレポートやリンク元サイトレポートを表示しますが、 この中には自サイトからのリンク(ほとんどがHTMLのメニューからアクセスしたものが多い)が 含まれていますのでこれを無効にします。
REFREPEXCLUDE http://www.bnets.net/*
REFSITEEXCLUDE http://www.bnets.net/
但し、自サイトのどこのページからのアクセスが多いかを表示させたい時はこの場合ではありません。

③自分のアクセスの無効化
Webサイトへのアクセス数には当然自分自身がアクセスしたものもカウントされていますので、 これを無効化します。
Webサイト開設当初などほとんどサイト関係者だけしか知らないので、ほとんどが自分自身からの アクセスとなってしまいます。

例)リモートホストがmy.provider.comだった場合
HOSTEXCLUDE my.provider.com
また、お使いのISPがDHCPサーバ機能を使っていてホストネームが変化する場合はアスタリスクを使います。
HOSTEXCLUDE *.provider.com
注意:当然この場合は同じISPを使っているユーザが多い場合は他の人のアクセス数も 無効化してしまう場合がありえます。

④ドメイン解決
標準設定だとドメイン表示がされないので解析レポートにIPアドレスが表示されて分かりずらい
これの解決策としては
a) Webサーバレベルでの解決
Apacheを使っている場合だとhttpd.confの設定を変更することにより解決できます。
--------------------------------
# OffをOnに変更
HostnameLookups On
--------------------------------
これによってWebサーバのアクセスレスポンスがほんの少し遅くなりますが、IPアドレスで表示されていたのが、 ドメイン表示されるようになります。

b) Analogでの解決
AnalogでもDNS検索を行いドメイン解決できます。但し、アクセスログを解析するのに 時間やCPU負荷がかかります。
DNSFILE localfile
DNS WRITE
DNSLOCKFILE localfile
DNSGOODHOURS 672
DNSBADHOURS 336
DNSTIMEOUT 5
詳しくは日本 Analog ユーザ会に日本語のマニュアルがありますのでそちらを参考にされると良いでしょう。

## Analogの運用
Analogを運用する上でのポイントを紹介します。
①Webアクセスログのローテートをする
標準ではアクセスログはローテート化されてないので放置しているとすぐに肥大化しますので、 ローテートしましょう。

1週間毎に12週分を残す設定例
# vi /etc/logrotate.d/httpd
access_log {
missingok
sharedscripts
rotate 12
weekly
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}

②アクセス制限
Analog解析したレポートはなるべく人には見られたくありませんので、ログディレクトリに Basic認証やDigest認証を設定してアクセス制限を設けるのが良いでしょう。

③不正アクセスにはホスト不成功レポートや状態コードレポートを参考に
セキュリティ的に非常に重要なレポートに「ホスト不成功レポート」と「状態コードレポート」が あります。状態コードレポートで全体的なチェックをし、頻繁に不正アクセスをするホストを調べるには ホスト不成功レポートをチェックすると良いでしょう。
○不正アクセスを特定する場合に役立つ情報
1)最終アクセス時刻を表示させる
2)最近7日間のアクセスのように短い期間に限定する
3)時にはディレクトリレポートやリクエストレポートに自ドメイン以外へのアクセスを調べる
の3点に注意しながら以下のような設定にしてみます。
○Analogの設定ファイルanalog.cfgの設定例(不正アクセス編)
# ホスト不成功レポート:文字通りWebサーバへのアクセス失敗したホストを表示
FAILHOST ON
# 最近7日間のリクエスト数と最後のアクセス日時の表示
FAILHOSTCOLS SD
# ホスト不成功レポートのソートを最近7日間のリクエスト順にする
FAILHOSTSORTBY REQUESTS7
# ホスト不成功レポートの最近7日間のリクエスト順の上位30位まで
FAILHOSTFLOOR -30s
# 状態コードレポート:この設定は標準設定でONになっています。(省略可)
#STATUS ON
# 状態コードレポートの最近7日間のリクエスト数と最後のアクセス日時の表示
STATUSCOLS SD
# 状態コードレポートのソートを最近7日間のリクエスト順にする
STATUSSORTBY REQUESTS7
# 状態コードレポートの最小表示は最近7日間の1リクエスト以上
STATUSFLOOR 1s
# ディレクトリレポート:この設定は標準設定でONになっています。(省略可)
DIRECTORY ON
# 最近7日間のリクエスト数と最後のアクセス日時の表示
DIRCOLS SD
# ディレクトリレポートのソートを最近7日間のリクエスト順にする
DIRSORTBY REQUESTS7
# ディレクトリレポートの最小表示は最近7日間の1リクエスト以上
DIRFLOOR 1s
# ディレクトリレポートのサブソートを最近7日間のリクエスト順にする
SUBDIRSORTBY REQESTS7
# ディレクトリレポートのサブ最小表示は最近7日間の1リクエスト以上
SUBDIRFLOOR 1s
以上の設定をして、Analogを展開したディレクトリでログ解析をします。

○標準設定ファイルでの解析
あまりに特定のIPやリモートホストから不正アクセスがある場合はIPフィルタすると良いでしょう。
1)共用サーバでは.htaccessファイルにてLimitディレクティブを配置
2)専用サーバではhttpd.confに直接Limitディレクティブを設定する
3)iptablesが利用できるのならばこれを利用するのが一番強力です

この他にもAnalogには様々なレポートが表示出来ます。これを機に多機能の点では商用ログ解析に分があると思いますが、 通常のログ解析には充分じゃないかと思える機能を備えているAnalogを試されて見てはいかがでしょうか。