負荷分散された環境で、SYSLOGなどを使わずにApacheやProxyのログが複数サーバにそのままはかれる設定になっている場合、ログを調査する際に複数の巨大なファイルを扱わなくてはならず面倒ですね。
なんとなく既にあって車輪の再発明をしている気がギュンギュンするのですが、ざっとググったところ見つからなかったので書いてみました。
使い方
$ aplogmerge.rb 1.log 2.log 3.log...
色々なケースにおけるテストとか全然やってないのですが何となく動いてそう。 あ、Ruby1.9.2でしか動作確認してません(汗)
Apacheのログはアクセスされた時間をレスポンスした時に出力するため、それぞれのファイル内で前後している行がある可能性があります。 その場合このプログラムでマージすると純粋に正しい出力にはならないかもしれませんが、概ね目的の出力は得られると思います。
日時を数値に変換してるとこはテキトーです。各行の前後関係が分かればよいだけなので、もっと速くていいロジックがありそう。
Cで書かないと実用に耐えないかな?と思いましたが約1GBのログ3つで実行したところ6分くらいで返ってきたので十分かなと。
profileすると現状、遅いのは比較のため日付を数値に変換している処理と、まだ先読みしてないファイルを特定するためArray#reject
してるとこ。
気が向いたらもう少しチューニングしたいですが、現状十分な速度なのでもういいかなと(笑)