使用Jsawk解析JSON访问日志

时间:2014-09-30 23:26:38

标签: json

使用我们的新网络服务器,访问日志采用JSON格式,我无法使用典型的awk命令来提取流量信息。我找到了jsawk,但是当我试图从访问日志中取出任何东西时,我总是得到一个解析错误。我觉得日志不是解析器喜欢的格式

以下是日志中的示例条目:

{ "@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正确解析?

1 个答案:

答案 0 :(得分: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 ?

相关问题