我正在使用最新的ELK(Elasticsearch 1.5.2,Logstash 1.5.0,Kibana 4.0.2) 我有一个问题
示例.json
{ "field1": "This is value1", "field2": "This is value2" }
longstash.conf
input {
stdin{ }
}
filter {
json {
source => "message"
add_field =>
{
"field1" => "%{field1}"
"field2" => "%{field2}"
}
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
host => "localhost"
index => "scan"
}
}
输出:
{
"message" => "{ \"field1\": \"This is value1\", \"field2\": \"This is value2\" }",
"@version" => "1",
"@timestamp" => "2015-05-07T06:02:56.088Z",
"host" => "myhost",
"field1" => [
[0] "This is value1",
[1] "This is value1"
],
"field2" => [
[0] "This is value2",
[1] "This is value2"
]
}
我的问题是1)为什么字段结果在结果中出现两倍? 2)如果有嵌套数组,它应该如何在logstash configure中引用?
非常感谢!
.. Petera
答案 0 :(得分:2)
我认为你误解了json滤镜的功能。当您通过json过滤器处理字段时,它将查找字段名称和相应的值。
在您的示例中,您已使用此部分完成此操作:
filter {
json {
source => "message"
然后你添加了一个名为" field1"的字段。使用字段" field1"的内容,因为该字段已经存在,您刚刚将相同的信息添加到已经存在的字段中,它现在已成为一个数组:
add_field =>
{
"field1" => "%{field1}"
"field2" => "%{field2}"
}
}
}
如果您将代码简化为以下内容,那么您应该没问题:
filter {
json {
source => "message"
}
}
我怀疑你关于数组的问题在这一点上变得毫无意义,因为你可能不需要嵌套数组,因此,不需要解决它,但万一你这样做,我相信你可以这样做:
[field1][0]
[field1][1]