1

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 ブラウザーを使用しているようです!)。

では、どのようにユーザー エージェント文字列を解析し、レポートを作成できる有用な情報を引き出しますか?

4

1 に答える 1

0

別のテーブルを開始します: UserAgentString, (id, UAS, num_uses, mobile, );

ログを解析するときは、生のユーザー エージェント文字列ではなく、各ログ エントリの UserAgentString.id をテーブルに保存し、新しい文字列を UserAgentString テーブルに追加します。

重複を見つけるたびに、num_uses 列をインクリメントします。モバイル デバイスを表していることがわかっている場合は、モバイル列を設定します。他の列を追加し、それらが有用であることがわかったら、uas の他の属性を表すように設定します。

于 2013-04-16T14:27:24.513 に答える