Tomcat ログを解析して有用な情報を得るプロジェクトがあります。最初は、プログラムは非常に単純で、1 回の grep で簡単に実行できました。しかし、この情報が役立つ可能性があることが判明すると、ますます複雑な解析を行うように求められました。
ログエントリの一般的な情報をデータベースに保存し、さまざまなクエリを実行してカスタマイズされたレポートを取得したいところまで来ました。この情報のほとんどは、かなり単純明快で、簡単に解析できます。
- IP アドレスとプロキシ アドレスがあります。たとえば、アプリのセキュリティをテストするために雇った会社から 10,000 個の IP アドレスのリストを入手しました。したがって、どのレポートでもこれらの IP アドレスからのエントリを無視したいと考えています。
- セッション ID があります。ユーザーがページ「B」の前にページ「A」にアクセスしたが、ページ「C」にアクセスした後ではなかったというレポートが必要です。セッション ID を使用すると、この動作を追跡できます。
- 時間と日付があります。
- HTTP 応答コードがあります。
- これが GET または POST アクションであるかどうかがあります。
- Web ページ自体 (および GET 経由で渡される可能性のある値) があります。
そして、最後に User Agent Mess があります...つまり、User Agent String です。
ユーザー エージェント文字列のレイアウトはかなり緩いようです。たとえば、Mozilla/4.0
これらのほとんどが Mozilla、Netscape、または Firefox とは関係なく、Gecko レイアウト エンジンを使用していないブラウザからのものであるにもかかわらず、それらの 99% は で始まります。
残念ながら、レポートではユーザー エージェント文字列がかなり重要になってきています。たとえば、Safari やモバイル ブラウザを使用している人、または Linux ベースのシステムと Windows と iOS を使用している人の数を知る必要があります。
大きな問題は、将来何が要求されるか分からないことです。そのため、どの情報が役に立ち、どの情報が役に立たないか 100% 確信が持てません (当社のユーザーの 99.7% が Mozilla 4.0 ブラウザーを使用しているようです!)。
では、どのようにユーザー エージェント文字列を解析し、レポートを作成できる有用な情報を引き出しますか?