私の具体的な問題は、一連の Apache アクセス ログがあり、指定された時間の一連のタイム ウィンドウにグループ化することで、それらからリクエストの「ロールアップ」カウントを抽出したいということです。
私のデータの例:
127.0.0.1 - - [01/Dec/2011:00:00:11 -0500] "GET / HTTP/1.0" 304 266 "-" "Sosospider+(+http://help.soso.com/webspider.htm)"
127.0.0.1 - - [01/Dec/2011:00:00:24 -0500] "GET /feed/rss2/ HTTP/1.0" 301 447 "-" "Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=12878631678486589417)"
127.0.0.1 - - [01/Dec/2011:00:00:25 -0500] "GET /feed/ HTTP/1.0" 304 189 "-" "Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=12878631678486589417)"
127.0.0.1 - - [01/Dec/2011:00:00:30 -0500] "GET /robots.txt HTTP/1.0" 200 333 "-" "Mozilla/5.0 (compatible; ScoutJet; +http://www.scoutjet.com/)"
127.0.0.1 - - [01/Dec/2011:00:00:30 -0500] "GET / HTTP/1.0" 200 10011 "-" "Mozilla/5.0 (compatible; ScoutJet; +http://www.scoutjet.com/)"
ご覧のとおり、各行はイベント (この場合は HTTP 要求) を表し、タイムスタンプが含まれています。
私のデータが 3 日間をカバーしていると仮定し、時間枠のサイズを 1 日に指定すると、次のようなものを生成したいと思います。
Start End Count
2011-12-01 05:00 2011-12-02 05:00 2822
2011-12-02 05:00 2011-12-03 05:00 2572
2011-12-03 05:00 2011-12-04 05:00 604
しかし、ウィンドウのサイズを変更できる必要があります — 5 分、10 分、1 時間、1 日、または 1 週間などのウィンドウを使用して、特定のデータセットを分析したい場合があります。
また、サイズが数百または数千メガバイトのデータセット (一連の行) を分析できるライブラリ/ツールも必要です。
標準入力を介してデータを受け入れることができるビルド済みのツールは優れていますが、ライブラリを中心にツールをビルドするだけでよいため、ライブラリはまったく問題ありません。どの言語でもかまいません。私がそれを知らなければ、私はそれを学ぶことができます。
アクセス ログ データを、依存関係を最小限に抑えてツール/ライブラリに直接パイプすることでこれを行うことをお勧めします。データをデータベースに保存し、データベースにクエリを実行して分析を行うという提案は求めていません。必要に応じて、自分でそれを理解できます。
Splunk を試してみたところ、私のケースには重すぎて複雑すぎることがわかりました。これは単なるツールではなく、独自のデータストア、複雑なインデックス作成およびクエリ機能などを備えたシステム全体です。
私の質問は: そのようなライブラリやツールは存在しますか?
完全開示
認めざるを得ませんが、私は実際に数か月前にこのようなものを見つけようとして失敗したので、自分で書きました。どういうわけか、その時点でこの質問を投稿することは考えていませんでした。私が回答で書いた lib/tool をすぐに共有します。しかし、このようなものが存在するかどうか、私は本当に興味があります。数ヶ月前に探していたときに見逃してしまったのかもしれません。