1

我有一个项目,我正在解析 Tomcat 日志以获取有用信息。起初,该程序非常简单,只需一个 grep 即可轻松完成。然而,一旦意识到这些信息可能有用,我就被要求进行越来越复杂的解析。

到了我想将日志条目的通用信息存储在数据库中的地步,然后进行各种查询以获取自定义报告。这些信息中的大部分都相当直接且易于解析。

  • 有IP地址和代理地址。例如,我现在有一个包含 10,000 个 IP 地址的列表,这些 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 浏览器!)。

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

4

1 回答 1

0

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

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

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

于 2013-04-16T14:27:24.513 回答