2014-09-30 110 views
0

使用我們的新的Web服務器,訪問日誌使用JSON,我無法使用典型的awk命令來提取流量信息。我發現了jsawk,但是當我試圖從訪問日誌中取出任何東西時,我總是收到解析錯誤。我有一種感覺,日誌不在一個格式分析器喜歡使用Jsawk分析JSON訪問日誌

下面是從日誌中的條目示例:

{ "@timestamp": "2014-09-30T21:33:56+00:00", "webserver_remote_addr": "24.4.209.153", "webserver_remote_user": "-", "webserver_body_bytes_sent": 193, "webserver_request_time": 0.000, "webserver_status": "404", "webserver_request": "GET /favicon.ico HTTP/1.1", "webserver_request_method": "GET", "webserver_http_referrer": "-", "webserver_http_user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36" } 

因此,舉例來說,如果我要拉的IP地址進行的日誌,我會用這樣的:

cat access.log | jsawk 'return this.webserver_remote_addr' 

然而,這不僅導致「jsawk:JSON解析錯誤:」和打印的整個訪問日誌。

我正確地認爲訪問日誌是分析器無法識別的格式嗎?日誌中的每個條目都在一行上。我如何才能讓jsawk正確解析?

回答

0

我嘗試這樣做:

$ echo '{ "@timestamp": "2014-09-30T21:33:56+00:00", "webserver_remote_addr": "24.4.209.153", "webserver_remote_user": "-", "webserver_body_bytes_sent": 193, "webserver_request_time": 0.000, "webserver_status": "404", "webserver_request": "GET /favicon.ico HTTP/1.1", "webserver_request_method": "GET", "webserver_http_referrer": "-", "webserver_http_user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36" }' | jsawk 'return this.webserver_remote_addr' 

,並得到這個:

24.4.209.153 

更新: 我認爲問題是,你必須每行作爲一個JSON對象,並有多個行access.log的。有一個很好的方法可以在這裏解決:How to use jsawk if every line is a json object ?