Apacheのログを解析してくれるお勧めのソフトは

[上に] [前に] [次に]
中根 [E-Mail] [HomePage] 2000/03/14(火) 13:42:53
こんにちは、中根です。

Namazuがやっとこさインストールできたので、
今度はApachのログを解析してみようと思い立ちました。

今は、無料のサービスを使っていますが、
使用ブラウザの比率と、アクセス数以外は
過去20アクセス分(しかもトップページだけ)の統計しか
とってくれないので不便です。

せっかくApachのログが提供されているので
ぜひ統計をとりたいと思います。

先頭の数行を見ると、次のような形式になっています。

03.atomic.co.jp - - [13/Mar/2000:20:40:24 +0900] "GET / HTTP/1.0" 200 10211 "htt
p://www1.interq.or.jp/nakane/html/top2.html" "Mozilla/4.0 (compatible; MSIE 5.01
; Windows NT 5.0)"
130.34.15.128 - - [13/Mar/2000:08:26:13 +0900] "GET / HTTP/1.1" 200 10463 "-" "M
ozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
130.34.15.128 - - [13/Mar/2000:16:16:46 +0900] "GET / HTTP/1.1" 304 - "-" "Mozil
la/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
130.79.149.210.economy.2iij.net - - [13/Mar/2000:16:49:49 +0900] "GET / HTTP/1.1
" 200 10463 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)"

ホスティング・サービスのヘルプによると、一般的なApachの
ログらしいです。

これを解析して統計を取ってくれるよいソフトを探しています。

このまえ、Perlでかかれたwww-statというソフトを入れてみたのですが、
統計を取ってくれるのはいいけれど、グラフや(多い順の)ソートはしてくれず
あまり便利ではありませんでした。

ほかに何かいいソフトがあれば教えてください。

できれば、サーバー上で動くものがいいです。
(一日で10MBを超えてしまいますから、ダウンロードは困難です。)

ふじ 2000/03/14(火) 14:50:16
Analog
http://www.statslab.cam.ac.uk/~sret1/analog/

中根 [E-Mail] [HomePage] 2000/03/14(火) 19:02:16
こんにちは、中根です。

いつもいつもすみませんが、
ホームディレクトリにインストールしないとだめなんです。

まず、指示されたアドレスからソースコードを持ってきて
(サーバーはFreeBSD)、解凍して、
./configureもないみたいなので、とりあえず
makeしました。

make installもないみたいなので、とりあえず
出来上がった
./analog
を実行してみたところ、
設定ファイルを、
/usr/local/analog4.03
へ設定ファイルを探しにいってしまいます。

設定ファイルの位置をしていするにはどうすればいいのでしょうか。

ふじ 2000/03/14(火) 20:44:47
付属のREADMEは読みましたか?
> とりあえずmakeしました。
の前に、取りあえずドキュメントを眺めた方が。

で、展開して出来る docs/Readme.html には、

make DEFS='-DANALOGDIR=\"/usr/etc/apache/analog/\"'

てな記述があるので、自分のホームディレクトリが
/home/hoge なら、

make DEFS='-DANALOGDIR=\"/home/hoge/analog4.03\"'

みたいにして make すればいいでしょう。
# しかしめちゃくちゃ速いなこれ。

ふじ 2000/03/14(火) 20:46:51
失礼。

>make DEFS='-DANALOGDIR=\"/home/hoge/analog4.03\"'
make DEFS='-DANALOGDIR=\"/home/hoge/analog4.03/\"'

です。最後の / は必要。

andi 2000/03/14(火) 21:42:28
サーバのログって公開して良いのですか?
あまり良いことではないような・・・
(関係なくて申し訳ないです。)

てきとー 2000/03/15(水) 02:33:53
analogといえば、最近日本語のMLができました。
http://www.tokyo-kasei.ac.jp/~matsuki/analog/index.html

中根 [E-Mail] [HomePage] 2000/03/15(水) 08:55:46
こんにちは、中根です。

なんとか、いろいろなファイルをいじりまくって
(日本語MLのサイトのインストール方法が役に立ちました)
Telnet上で、./analogとしてログをはいてくれるようになりました。
しかし、CGIとして動いてくれません。
analogへのリンクである、analog.cgiをブラウザから呼ぶと
InternalServerErrorが出ますし、
付属のjpform.htmlを使うと、
anlogform.plへのPOSTはできないというエラーが出ます。

とりあえず、Telnetでanalogを起動し、
適当なファイルへリダイレクトしてやればログは見れますが、
実用的ではありません。

どなたか教えてください。

(情報が不足していると思いますが、よろしくお願いします。
必要なら設定ファイルやヘッダファイルで書き換えたところを
載せます)

中根 [E-Mail] [HomePage] 2000/03/15(水) 09:57:48
こんにちは、中根です。

なんとか、いろいろなファイルをいじりまくって
(日本語MLのサイトのインストール方法が役に立ちました)
Telnet上で、./analogとしてログをはいてくれるようになりました。
しかし、CGIとして動いてくれません。
analogへのリンクである、analog.cgiをブラウザから呼ぶと
InternalServerErrorが出ますし、
付属のjpform.htmlを使うと、
anlogform.plへのPOSTはできないというエラーが出ます。

とりあえず、Telnetでanalogを起動し、
適当なファイルへリダイレクトしてやればログは見れますが、
実用的ではありません。

どなたか教えてください。

(情報が不足していると思いますが、よろしくお願いします。
必要なら設定ファイルやヘッダファイルで書き換えたところを
載せます)

中根 [E-Mail] [HomePage] 2000/03/15(水) 12:03:20
[[解決]]
こんにちは、中根です。
上は、二重投稿になってしまいました。

もしやと思い、anlgform.plの拡張子をCGIに変えたら動いてしまいました。
ありがとうございました。

ふじ 2000/03/15(水) 15:56:53
自分で見るだけなら、いちいち CGI として起動しても良いですが、
もし人に公開するつもりなら負荷が結構掛かるので、

> 適当なファイルへリダイレクトしてやれば
これを cron で一日一回動かして、ファイルに落としたのを
見せる方が良いかも知れません。

中根 [E-Mail] [HomePage] 2000/03/15(水) 17:04:25
ところが、Root権限がないため、
CRONが設定できないんですよ。

しかも、週おきではなく、毎日ログ・ファイルがクリアされます。
何とか、もう少し長い期間のログを解析したい(最低でも1週間)
のですがどうにかならないでしょうか。

この掲示板にも来ていらっしゃるS-Poreさんと
個人的にチャットしたときに、よく呼び出されるCGI(カウンタなど)
に、時刻をチェックして一日に一度ログを移動したらと
アドバイスされましたが、具体的なコードが分かりません。

どなたか教えてください。

むぅ 2000/03/15(水) 18:25:52
$checkdata = "mday.dat";#日付チェックファイル
$checkhour = "5";#実行時間

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

open(DATA,"$checkdata");
$check = <DATA>;
close(DATA);

if ($mday eq "$check"){ #同じ日に2回実行しない様にする。
}elsif ($hour eq "$checkhour"){
system('../../analog/analog > log$mday\.html');
system('cp ../../logs/access_log > access$mday\_log');

open(DATA,">$checkdata");
print DATA $mday;
close(DATA);
}

あれ?何か勘違いしてるかも。

むぅす 2000/03/15(水) 19:03:57
>system('cp ../../logs/access_log > access$mday\_log');
system('cp ../../logs/access_log access$mday\_log');

中根 [E-Mail] [HomePage] 2000/03/15(水) 20:03:49
こんにちは、中根です。

どうもありがとうございます。
ちょっとこのスクリプトについて質問したいのですが、

・これを、呼び出されるCGIのメインルーチンの中に突っ込めばいいのですよね。
・ログがクリアされるのは、午前3時のようでした。
(3:00でログの中身がスッカラカンになる)
その場合は、2:50分頃にバックアップをすればいいと思うのですが、
$checkhour = "2";#実行時間
とすればいいのですか?

むぅす 2000/03/15(水) 21:06:32
>これを、呼び出されるCGIのメインルーチンの中に突っ込めばいいのですよね。
そうですね。
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
は、そのCGIに既に記述されている可能性もありますので、
その場合はいりません。

あと、referer_log agent_log error_log も保存されているのであれば
system('cp ../../logs/referer_log referer$mday\_log');
system('cp ../../logs/agent_log agent$mday\_log');
system('cp ../../logs/error_log error$mday\_log');

>system('cp ../../logs/access_log access$mday\_log');
の次に追記してください。


>system('../../analog/analog > log$mday\.html');
>system('cp ../../logs/access_log access$mday\_log');
パスは
/home/****/public_html/count/count.cgi
/home/****/analog/analog
と仮定していますので、状況に応じて変更してください。

>・ログがクリアされるのは、午前3時のようでした。
>(3:00でログの中身がスッカラカンになる)
>その場合は、2:50分頃にバックアップをすればいいと思うのですが、
>$checkhour = "2";#実行時間
>とすればいいのですか?

そうですね。でも2時台にそのCGIにアクセスされなければ
意味が無いんですよねぇ。

むぅす 2000/03/15(水) 21:25:18
あと、そのCGIのあるディレクトリとログのあるディレクトリのパーミッションは
707若しくは777にしてください。
分かっていたらすみません(^^;;

ふじ 2000/03/15(水) 22:02:52
> system('cp ../../logs/access_log access$mday\_log');
シングルクォートで括ると変数が展開されませんよ。

シェルに
cp ../../logs/access_log access$mday\_log
という文字列がそのまま渡ります。それをシェルが $mday
をシェル変数だと思って展開して(で、その変数は未定義なので)
結局

cp ../../logs/access_log access_log

というコマンドが実行されることになります。
これは望んだ動作ではないですよね。

system("cp ../../logs/access_log access$mday\_log");
とするか、
system ("cp", "../../logs/access_log", "access$mday\_log");
としましょう。

むぅす 2000/03/15(水) 22:45:20
>シングルクォートで括ると変数が展開されませんよ。
のわっ、そうですね失礼しました。

そのCGIにかなりの(30分単位で確実に)アクセスがあるのであれば
2時30分以降として
>if ($mday eq "$check"){ #同じ日に2回実行しない様にする。
>}elsif (30 gt "$min"){
>}elsif ($hour eq "$checkhour"){
とした方が良いと思います。

中根 [E-Mail] [HomePage] 2000/03/16(木) 13:55:39
まぁ、30分に1回ぐらいはあると思われますし、
べつに数回ログが飛んでもOKなわけなので、
むぅすさんとふじさんの方法で行ってみる事にします。

ありがとうございました。

[上に] [前に] [次に]