我有一个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}"}
所以我只对整个日志中的几个字段感兴趣。
换句话说,我想从日志中提取必要的数据,然后将其发送到输出的内容
答案 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版的配置。 希望这会有所帮助。