![]() |
| Home | Diary | Desktop | Link | Update History |
Apacheが出力するLogを1行ずつ眺めていくのは非現実的ですよね。
そこでApacheのログを集計しHTML化して出力してくれるツール,Analogを導入します。
$ emerge -puv app-admin/analogXのインストールも行われてしまうようでしたが、私のサーバーでは X はいらないので
USE="-X" emerge -v app-admin/analogとしてXがインストールされない様にしました。インストールされたAnalogのバージョンは5.32でした。
Analogの設定ファイルは/etc/analog/analog.cfgです。
設定ファイルの一部を以下に示します。
#Apacheのログファイルの場所を指定します。
LOGFILE /var/log/apache/access_log*
#出力されるHTMLファイルの場所を指定します。
OUTFILE /var/log/analog/index.html
#言語に日本語を指定します。
LANGUAGE JAPANESE-EUC
#グラフを表示する画像の場所を指定します。
IMAGEDIR images/
#出力されたHTMLファイルのタイトルを指定します。
HOSTNAME "Linux-Air"
#リクエストレポートでページにのみリンクを張ります。
REQLINKINCLUDE pages
#リンク元レポートでリンクを張ります。
REFLINKINCLUDE *
#ログファイルが圧縮されている場合は、ファイルと解凍方法を指定します。
UNCOMPRESS *.gz,*.Z "gzip -cd"
#ブラウザレポートでの表示形式を指定します。
SUBBROW *⁄*
#ファイル種別レポートでの表示形式を指定します。
SUBTYPE *.gz,*.Z
#サーチエンジンのURLを指定します。
SEARCHENGINE http://*google.*⁄* q
#OSレポートでロボットとして集計されるブラウザを指定します。
ROBOTINCLUDE Googlebot*
#ファイル種類別レポートで出力される表示名称を指定します。
TYPEOUTPUTALIAS .html ".html [Hypertext Markup Language]"
#除外するホスト名を指定します。
HOSTEXCLUDE 192.168.1.*
#リンク元サイトレポートから除外するホスト名を指定します。
REFSITEEXCLUDE http://tma2002.homedns.org/
#リンク元URLレポートから除外するホスト名を指定します。
REFREPEXCLUDE http://tma2002.homedns.org/*
#集計から除外するファイルを指定します。
FILEEXCLUDE *.css
#リンク元レポートを出力するよう指定します。
REFERRER ON
#ホスト名の検索を行うよう指定します。
DNS WRITE
#ホスト名検索用DNSキャッシュファイル名
DNSFILE dnsfile.txt
#DNSキャッシュファイルの有効期限(時間)
DNSGOODHOURS 168
主な設定項目は
LOGFILE /var/log/apache/access_log*
Apacheが出力するログファイルの場所を指定しています。
最後に「*」(アスタリスク)をつけているのは、例えば 「access_log.1.gz」
と言った風に、圧縮されているファイルを解凍し、集計対象とするためです。
Logrotate等を導入していて、ローテーションされ、圧縮されたファイルを集計
対象とする場合に便利です。
OUTFILE /var/www/localhost/analog/index.html
集計を行った結果を表示するHTMLファイルの出力先を指定しています。
例では /var/www/localhost/analog/index.html を指定しています。
IMAGEDIR images/
出力されたHTMLファイルにおいて、グラフを表示するために必要なイメージファイルの
入ったディレクトリを指定します。このディレクトリは /var/log/analog/image
にインストールされています。
ここではファイルシステム上のパスではなく、WEBサーバー上でのパスや、
OUTFILEで指定したHTMLファイルからのパスを指定します。
例では、出力されたHTMLファイルと同じ場所に image フォルダをコピーする必要があります。
REFERRER ON
例ではリンク元レポートを出力するよう指定していますが、他にも以下のレポート出力を
指定する事ができます。
GENERAL 全体の概要 YEARLY 年別レポート QUARTERLY 4半期別レポート MONTHLY 月別レポート WEEKLY 週別レポート DAILYREP 日別レポート DAILYSUM 曜日別集計 HOURLYREP 時間別レポート HOURLYSUM 時間別集計 WEEKHOUR 曜日別時間集計 QUARTERREP 15分間隔レポート QUARTERSUM 15分間隔集計 FIVEREP 5分間隔レポート FIVESUM 5分間隔集計 HOST ホストレポート REDIRHOST ホストリダイレクションレポート FAILHOST ホスト不成功レポート ORGANISATION 組織レポート DOMAIN ドメインレポート REQUEST リクエストレポート DIRECTORY ディレクトリレポート FILETYPE ファイル種類別レポート SIZE ファイルサイズレポート PROCTIME 処理時間レポート REDIR リダイレクトレポート FAILURE 不成功レポート REFERRER リンク元レポート REFSITE リンク元サイトレポート SEARCHQUERY 検索語句レポート SEARCHWORD 検索語レポート INTSEARCHQUERY 内部検索語句レポート INTSEARCHWORD 内部検索単語レポート REDIRREF リダイレクトされたリンク元URLレポート FAILREF 不成功リンク元レポート FULLBROWSER ブラウザーレポート BROWSER ブラウザーの概要 OSREP OSレポート VHOST 仮想ホストレポート REDIRVHOST 仮想ホストリダイレクションレポート FAILVHOST 仮想ホスト不成功レポート USER ユーザレポート REDIRUSER ユーザリダイレクションレポート FAILUSER 不成功ユーザレポート STATUS 状態コードレポート
検索単語レポートの日本語が文字化けするため,対策を行います。
http://www.inwonder.net/~dayan/soft.html#analogurldecode を開き、
analogurldecode ベータ版 のリンクをたどると現れるPerlスクリプトをコピーし,ファイルを作成します。
ここでは作成したファイル名を analogurldecode とします。
尚、作成したファイルの改行コードはCRLFではなく、LFとするように注意します。
また、スクリプトの1行目のPerlへのパスが動作させるマシンの環境と同じか確認します。
$ chmod 755 analogurldecode
$ emerge dev-perl/Jcodeanalogurldecodeを実行します。/var/www/localhost/htdocs/analog.html に出力されている
analogurldecode /home/httpd/hdoc/analog.html > /home/httpd/hdoc/analog_jp.htmlこれで検索語が日本語化されたファイル、analog_jp.htmlが作成されます。
バーチャルホストを運用していて、ホストごとにログファイルを分けている場合があります。
こういった場合に各ホストごとにAnalogによる集計結果を出力したいというニーズがあると思います。
この場合は、各ホストごとにAnalogの設定ファイルを作成し、設定ファイルを指定してAnalogを実行します。
以下の例を考えます。
| ホスト名 | Apacheログ出力先 |
| ホストA | /var/log/apache2/access_hostA.log |
| ホストB | /var/log/apache2/access_hostB.log |
Analogの設定ファイルを二つ用意します。ここでは、
/etc/analog/analog_hostA.cfg と /etc/analog/analog_hostB.cfg とします。
LOGFILEの項目に上記表のログ出力先をそれぞれ指定します。
また、OUTFILEの項目にもそれぞれのホスト毎に設定を行います。
設定後、Analogを実行します。
analog -g/etc/analog/analog_hostA.cfg analog -g/etc/analog/analog_hostB.cfg
analog.cronファイルを作成し、/etc/cron.dailyの下に配置します。
尚、各ホストのAnalog設定ファイルにおける OUTFILEの設定は
ホストA は OUTFILE /var/www/localhost/htdocs/report/analog_hostA_src.html
ホストB は OUTFILE /var/www/localhost/htdocs/report/analog_hostB_src.html
とします。
analog.cronの内容は以下の通りです。
#!/bin/sh #各ホスト毎にAnalog実行 /usr/bin/analog -g/etc/analog/analog_hostA.cfg /usr/bin/analog -g/etc/analog/analog_hostB.cfg #HTMLファイル出力ディレクトリに移動 cd /var/www/localhost/htdocs/report/ #検索語の日本語化 /usr/local/bin/analogurldecode analog_hostA_src.html > analog_hostA.html /usr/local/bin/analogurldecode analog_hostB_src.html > analog_hostB.html
$ chmod +x /etc/cron.daily/analog.cronこれで毎日Analogの集計が自動的に行われます。