是否可以从日志中删除一些键值对?

时间:2013-09-03 19:19:33

标签: linux json filter nginx logstash

我有一个nginx日志文件,看起来与此类似:

{ "@timestamp": "2013-09-03T14:21:51-04:00", "@fields": { "remote_addr": "xxxxxxxxxxxx", "remote_user": "-", "body_bytes_sent": "5", "request_time": "0.000", "status": "200", "request": "POST foo/bar/1 HTTP/1.1", "request_body": "{\x22id\x22: \x22460\x22, \x22source_id\x22: \x221\x22, \x22email_address\x22: \x22foo@bar.com\x22, \x22password\x22: \x2JQ6I\x22}", "request_method": "POST", "request_uri": "foo/bar/1", "http_referrer": "-", "http_user_agent": "Java/1.6.0_27" } }

我想知道是否可以使用logstash过滤器发送看起来类似于此的日志:

{"@fields": { "request": "POST foo/bar/1 HTTP/1.1", "request_body": "{\x22id\x22: \x22460\x22, \x22source_id\x22: \x221\x22, \x22email_address\x22: \x22foo@bar.com\x22, \x22password\x22: \x2JQ6I\x22}"}

所以我只对整个日志中的几个字段感兴趣。

换句话说,我想从日志中提取必要的数据,然后将其发送到输出的内容

1 个答案:

答案 0 :(得分:3)

是的,如果您首先浏览json过滤器,则可以这样做。 那么你需要这样的东西:

filter {
  json {
    source => "message"
    add_tag => "json"
  }
  mutate {
    tags => [ "json" ]
    remove_field => [ "[@fields][remote_addr]", "[@fields][remote_user]", "[@fields][body_bytes_sent]", "[@fields][request_time]" ]
  }
}

我的配置类似于使用logstash 1.2.0版的配置。 希望这会有所帮助。