0

私の具体的な問題は、一連の 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 をすぐに共有します。しかし、このようなものが存在するかどうか、私は本当に興味があります。数ヶ月前に探していたときに見逃してしまったのかもしれません。

4

3 に答える 3

1

質問で述べたように、私は実際に数か月前にこのようなものを見つけようとして失敗したので、自分で書きました。(どういうわけか、その時点でこの質問を投稿するとは思いませんでした。)

これを関数型プログラミング (FP) を学び、CoffeeScript の習熟度を高める機会と捉えました。そこで、 Node上で動作するCoffeeScriptツールとしてRollupsを作成しました。その後、FP のさらなる調査の一環として、ScalaClojureのバージョンを追加しました。

すべてのバージョンは、ツールとライブラリの両方として使用できるように意図されていますが、それらはすべてその道の一部にすぎません — 現在、Clojure バージョンだけがライブラリとして本当に安全に使用できると思います。その方法でテストしました。

ツールは、質問で説明したとおりに機能します。Apache アクセス ログを含むファイルまたはファイル セットを指定すると、次のように呼び出します。

$ gzcat *.access.log.gz | rollup.clj -w 1d

(またはrollup.coffeerollup.scala) 出力は質問の例とまったく同じです。

このツールは私の問題を解決し、日常的に積極的に使用することはなくなりました。しかし、他の人が使用していることを知っていれば、他の人が使用できるようにさらに改善したいと思います. だからフィードバックは大歓迎です!

于 2012-04-12T14:21:12.937 に答える
0

では、これはどの程度自動化されている必要があるのでしょうか? まだ有用な、あまり役に立たない答えを出すことはできますか?

あなたがそれについて本当にゲットーになりたいのなら、私が通常行うことは、醜いシェルの束を1回限りにすることです. これは、いくつかのcutトリックを使用して時間ごとに合計するものawkです (確かに私はあまり得意ではありませんが、信じられないほど高速で強力です)。

cat access_log | cut -d '[' -f 2 | cut -d ' ' -f 1 | cut -d ':' -f 1,2 | awk '{ date=$1; if (date==olddate) sum=sum+1; else { if (olddate!="") {print olddate,sum}; olddate=date; sum=1}} END {print date,sum}'

( awk を使用したプロットに関するこの投稿は、集計ビットを理解するのに役立ちました。)

次のような出力が必要です。

12/Apr/2012:11 207
12/Apr/2012:12 188
12/Apr/2012:13 317

これは、それ自体で非常に簡単に再生できます。オークはきちんとしています。

于 2012-04-18T01:31:56.233 に答える
0

Splunk (http://www.splunk.com/) は、このような問題に対して私が考えるツールです。無料版と有料版があります。私は自分でライセンスを取得していません。既にインストールされているものを使用しただけです。

于 2012-04-11T18:23:07.857 に答える