- 締切済み
PHPでアクセスログ管理システム
掲題の通り、PHPでアクセスログを管理(管理画面より閲覧)できるシステムを作ろうと思っています。システムの実現方法に悩んでいます。「こういうのが最も動作が軽い」から「実務でこういうのを作った」「自分が作るならこう作る」までなんでも良いので(ちょっとしたヒント程度のものでもかまいませんので)アイデアをいただけたらありがたいです。 要望は以下のとおりです。 ・管理画面から閲覧ができる(ログファイルを見る必要がない) ・サーバーへの負荷が少ない ・リアルタイムがベスト ※具体的なソースのご提示はなくてもかまいません ※対象サイトの月間PVは3万~5万程度です。 ※「Google Analyticsを使えば良い」はお控えください 当方で考えたシステムは以下の3通りです。 == 1. アクセスログテーブルを作成し、ユーザーからのアクセスするたびにDBにINSERTする 2. テキストファイルに出力をしておいて、アクセスの少ない時間帯にバッチを動かして、テキストからDBにINSERTする 3. テキストファイルに出力して、管理画面でアクセスするたびにテキストを加工し、閲覧できるようにする == どれも、どこかに大きな負荷がかかりそうな気がして、いまいちこれで良いのか、という感じがしています(3万~5万というPVがどの程度のものかがいまいち掴めていない、というのもありますが…) 以上です。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- pringlez
- ベストアンサー率36% (598/1630)
あなたがどういう状況にあるのかわかりませんが、開発の経験がほとんどない方なのでしょうか?でしたら普通に周りの先輩などに聞けばいいと思うのですが。…まぁそれができない状況だから質問しているということなのでしょうかね。 月間5万のトランザクションという事だと私からすると小規模で、どんなつくりにしても問題は起きないだろうと思ってしまいます。将来アクセスが激増して月間500万になったとしても、30日*24時間*60分*60秒=259万秒で割れば、1秒当たり1.9件です。ので普通にリアルタイムにDBにINSERTで何も問題はないでしょうね。さらにピーク時は平均の10倍のアクセスがあるのだとしても、1秒19件、1件当たり50msならば(そこまで行くとサーバー性能によりますが)ギリギリ持つと思います。というかそれくらいは耐えられるシステムを作りたいものです。 あと考慮することはDBの容量など。1レコードあたりのバイト数(もちろんインデックスも付与するのでしょうからその分の容量もきちんと考慮する事)と何件分・何年分保存するかの要件から保存に必要な容量を計算しそれを根拠にハードを確保したり、逆にハードが決まっているなら何件保存できるか逆算しておくべきでしょう。そして古いものは削除するのかとかその辺を考えます。「どのくらい使えるのか自分でもさっぱりわかりません」なんてことを言うものなら、入社1年目でもかなり恥ずかしい事だと思います。 それから検索ですかね。将来データが溜まった時に例えば100万件のデータを1画面で表示しようとすればどうしたってHTML作成に時間がかかってしまいます。ので、ページングしたり検索数の上限値を決めたり、期間指定を必須とし半年以内とするとか、データ数をしぼる何かしらの工夫は必要でしょう。 さらに、データの追加と検索はプロセスを分離した方がいいかと思います。万が一、検索時にデータを絞る処理がきちんとできていなくて、検索の応答が返ってこなくなってしまった場合などでも無関係にデータの追加ができるようにとか。
- yambejp
- ベストアンサー率51% (3827/7415)
webalizerでログ解析してみて、機能の過不足を調整してみては? (webalizerを使えという意味ではなくあくまでも必要機能確認のため) リアルタイムと負荷が少ないのは相反しているので。 更新スケジュールを1時間程度にして定期処理を回すのが妥当では?
お礼
ありがとうございます。更新スケジュールを多目にして、一度のクエリーの負荷を減らすということですね。参考にさせていただきます。
補足
質問内容は「高負荷によって障害が起きないようにするための方法」ではありません。先頭に書いてあるとおり「軽量なアクセス解析システムのプログラム実装アイデア」です。システムという書き方が悪かったですかね。質問の仕方が悪かったのならすみませんでした。