2013-02-28 35 views
1

我有一个项目,我正在解析Tomcat日志以获取有用的信息。起初,这个程序非常简单,只需一个grep即可轻松完成。但是,一旦意识到这些信息可能有用,我就被要求做更多更复杂的解析。用户代理字符串:我应该捕获什么?

它已经到了我想要将日志条目的通用信息存储在数据库中的位置,然后执行各种查询以获取自定义报告。这些信息大部分是相当直接的,很容易解析。

  • 有IP地址和代理地址。例如,我现在有一份来自我们聘用的公司的1万个IP地址列表,用于测试我们的应用安全性。因此,我们希望忽略任何报告中来自这些IP地址的条目。
  • 有会话ID:我需要一个报告,其中用户在页面“B”之前前往页面“A”,但不是在页面“C”之后浏览页面。会话ID允许我跟踪这种行为。
  • 有时间和日期。
  • 有HTTP响应代码。
  • 这是否是GET或POST操作。
  • 有网页本身(和可能的值通过GET传递)。

最后是用户代理混乱...我的意思是用户代理字符串。

用户代理字符串似乎有一个相当松散的布局。例如,他们中的99%以Mozilla/4.0开头,尽管其中大多数来自浏览器与Mozilla,Netscape或Firefox无关,甚至不使用Gecko布局引擎。

不幸的是,用户代理字符串在我们的报告中变得相当重要。例如,我们需要知道有多少人在使用Safari或使用任何移动浏览器,或者在基于Linux的系统上使用Windows与iOS。

最大的问题是我不知道将来可能会有什么要求,所以我不能100%确定哪些信息是有用的,哪些是无用的(看起来99.7%的用户使用Mozilla 4.0浏览器!)。

那么,你将如何解析用户代理字符串,并提取有用的信息,我可以产生一个报告?

回答

0

我会开始另一个表:UserAgentString,(id,UAS,num_uses,mobile,);

解析日志时,为表中的每个日志条目存储UserAgentString.id,而不是原始用户代理字符串,并将新字符串添加到UserAgentString表。

每次找到重复项时,都会增加num_uses列。如果(当)知道它代表移动设备,请设置移动列。添加其他列并将它们设置为表示您发现它们有用的uas的其他属性。

相关问题