Webサーバーのログアナライザー(Urchinなど)は、多くの場合、多数の「セッション」を表示します。セッションは、限られた継続的な時間セグメント内で個人が行った一連のページ訪問/クリックとして定義されます。IPアドレス、および多くの場合、ユーザーエージェントやOSなどの補足情報、および15分や30分などのセッションタイムアウトしきい値を使用して、これらのセグメントを識別しようとします。
特定のWebサイトおよびアプリケーションでは、ユーザーはCookieを使用してログインおよび/または追跡できます。これは、サーバーがセッションの開始時刻を正確に知ることができることを意味します。私はそれについて話しているのではなく、Webサーバーがセッションを追跡しないときにヒューリスティックにセッションを推測すること(「セッションの再構築」)について話している。
たとえばPythonでコードを記述して、上記の基準に基づいてセッションを再構築しようとすることはできますが、車輪の再発明はしたくありません。私は約400K行のサイズのログファイルを見ているので、スケーラブルなアルゴリズムを使用するように注意する必要があります。
ここでの私の目標は、ログファイルから一意のIPアドレスのリストを抽出し、IPアドレスごとに、そのログから推測されるセッションの数を取得することです。絶対的な精度と正確さは必要ありません...かなり良い見積もりは大丈夫です。
この説明に基づく:
次の2つの条件が有効な場合、新しいリクエストが既存のセッションに追加されます。
IPアドレスとユーザーエージェントは、セッションにすでに挿入されているリクエストと同じです。- リクエストは、最後に挿入されたリクエストから15分以内に実行されます。
理論的には、値がペアである辞書(ユーザーエージェントによってキー設定)の辞書(IPによってキー設定)を構築するPythonプログラムを作成するのは簡単です:(セッション数、最新セッションの最新の要求)。
ただし、パフォーマンスの調整に多くの時間を費やすリスクがある可能性があるため、既存の実装が利用可能な場合はそれを使用することをお勧めします。
参考までに、誰かがサンプル入力を求めないように、ログファイル(サニタイズ済み)の行を次に示します。
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status
2010-09-21 23:59:59 215.51.1.119 GET /graphics/foo.gif - 80 - 128.123.114.141 Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+en-US;+rv:1.9.2)+Gecko/20100115+Firefox/3.6+(.NET+CLR+3.5.30729) http://www.mysite.org/blarg.htm 200 0 0