人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

「logファイル分析:自作アクセス解析」

こちらの質問で、ログを収集するのはできるようになりました。
http://q.hatena.ne.jp/1178617727

今度はlogファイルを自動分析する仕組みを作りたいです。

logファイルにカンマ区切りで以下のように保存します。

ホスト,時刻,アクセスURL[改行]

このログファイルから、アクセス数が多いURLを順番に並べるにはどのような処理をすればいいでしょうか?

何からどう手をつけていいのかわかりません。MySQLにデータを格納すれば自力で出来るとは思いますけど、一般的にはどのような処理をするのでしょうか?

漠然とした質問ですが、みなさんよろしくお願いします。

*PHPとMySQLが少々出来るレベルです。


●質問者: tokyosmash
●カテゴリ:インターネット ウェブ制作
✍キーワード:MySQL PHP URL アクセス アクセス数
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● GEN111
●50ポイント

一般的かどうかは分かりませんが、

// $log にテキスト形式のログが入っているとして

$logarray = explode("\n", preg_replace('/.*,/', '', trim($log))) ;
// アクセスURLだけの配列を作る

$access = array_count_values($logarray) ; // アクセスURLの数を数える
arsort($access) ; // 多い順にソート

foreach (array_keys($access) as $one) { echo "$one\n" ; } // 表示

アクセスがある度にMySQLに書き込むのは非現実的だと思います。

ログを MySQL に保存するのならそれでいいと思いますが。

◎質問者からの返答

ありがとうございます。具体的で本当に助かります。

生ログをそのままMySQLに入れてしまうとデータ量が大きくなりすぎて、後々面倒な事になりそうなんです。

SNSを運営しているのですが、生ログに該当する「あしあと」のデータが巨大になりすぎていつも困っています。こんなデータ必要ないだろうと軽い気持ちで削除したらユーザーから苦情が来まして。



PHP側で生ログを加工してMySQLに渡す方法を模索しています。1週間分のログを貯めて、そこからいらないデータは捨てて、加工して、DBに引き渡すといった感じです。

技術が無いために遠回りしているような気もするのですが、現状このくらいしかできません。

とりあえず頂いた回答で試行錯誤してみます。具体的な情報ありがとうございました!


2 ● quinoco
●50ポイント

自分が同じようなことをやる場合、一旦ファイルに落とさずにアクセスの度にDBに追加しちゃいますねー。既にアクセスログをファイルに記録してるのであれば、まずそのデータをDBに入れてしまって、それ以降はアクセスの度にDBに書き込むようにしちゃいます。

で、ファイルにアクセスログがある場合、それをDBにまとめて記録する方法はこんな流れになると思います。

$data = file("access.log");

$count = count($data);

// このへんでDBを開く

for($i=0; $i<$count; $i++)

{

$tmp = split(',', trim($data[$i]));

// tmp[0] ホスト

// tmp[1] 時刻

// tmp[2] アクセスURL

// これらを組み合わせてクエリを作る

// クエリ発行

}

// このへんでDBを閉じる

こんな感じです。

MySQLは長らく触っていないので、ミスったら嫌だから処理の手順だけ書いています。すみませんw参考になれば幸いです。

◎質問者からの返答

回答ありがとうございます。

後々参考にさせてもらうと思います。

丁寧にありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ