我想从AWS WAF的json日志中解析一些字段。在输入logstash上使用:
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"
我尝试了kv的json过滤器,但没有成功。
感谢您的回复。
答案 0 :(得分:0)
最简单的方法是使用红宝石代码。像下面这样。我还没有测试。但基本上,它是从headers数组创建新事件。如果有多个同名事件,则可能会出现问题。它可能会被最后一个覆盖。
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)
"
}