Logstash - 解析 json 事件中的 json 数组



我想从 AWS WAF 的 json 日志中解析一些字段。在输入日志存储时:

s3 {
bucket => "XXXX"
access_key_id     => "XXXX"
secret_access_key => "XXXX"
prefix            => "waf/"
region       => "XXX"
sincedb_path => "/tmp/s3.sincedb"
add_field    => [ "lso_name", "NULL", "lsi_type", "s3", "lsi_name", "waf" ]
codec        => "json"
}

我收到如下消息:

{
"httpSourceName"=>"CF",
"httpRequest"=> {
"clientIp"=>"XX.XX.XX.XX",
"httpMethod"=>"GET",
"requestId"=>"XXXX",
"uri"=>"XXX", 
"headers"=>
[
{"name"=>"Host", "value"=>"test.exmaple.com"},
{"name"=>"user-agent", "value"=>"Mozilla/5.0"},
{"name"=>"accept", "value"=>"*/*"}
]
}
}

我正在尝试在logstash过滤器中解析该标头,但无法做到。

Kibana 中的输出应如下所示:

"httpRequest.headers.Host" => "test.example.com"
"httpRequest.headers.user-agent" => "Mozilla/5.0"

我尝试了 json 过滤器甚至 kv,但没有成功。

感谢您的任何回复。

最简单的方法是使用 Ruby 代码。如下所示。我还没有测试过。但基本上它是从标头数组创建新事件。如果有多个事件具有相同的名称,则可能会出现问题。它可能会覆盖最后一个。

ruby {
init => "
def process_headers obj, event
if obj.is_a? Array
obj.each {|a|
event.set("[httpRequest][headers]["+a['name']+"]")=a['value']
}
end
end
"
code => "
process_headers(event.get["httpRequest][headers]",event)
"
}

最新更新