2013-02-28 80 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的其他屬性。

相關問題