2014-09-30 108 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 ?