Logstash 过滤器解析 json 文件结果一个双字段
Logstash filter parse json file result a double fields
我使用的是最新的 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)为什么字段结果在结果中出现了double? 2)如果有嵌套数组,在logstash配置中应该如何引用?
非常感谢!
..彼得拉
我认为您误解了 json 过滤器的作用。当您通过 json 过滤器处理字段时,它将查找字段名称和相应的值。
在你的例子中,你已经完成了这部分:
filter {
json {
source => "message"
然后您添加了一个名为 "field1" 的字段,其中包含字段 "field1" 的内容,因为该字段已经存在,您刚刚将相同的信息添加到已经存在的字段中,它有现在变成一个数组:
add_field =>
{
"field1" => "%{field1}"
"field2" => "%{field2}"
}
}
}
如果您将代码简化为以下内容应该没问题:
filter {
json {
source => "message"
}
}
我怀疑你关于数组的问题在这一点上变得没有实际意义,因为你可能不需要嵌套数组,因此不需要解决它,但如果你这样做,我相信你可以做到像这样:
[field1][0]
[field1][1]
我使用的是最新的 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)为什么字段结果在结果中出现了double? 2)如果有嵌套数组,在logstash配置中应该如何引用?
非常感谢!
..彼得拉
我认为您误解了 json 过滤器的作用。当您通过 json 过滤器处理字段时,它将查找字段名称和相应的值。
在你的例子中,你已经完成了这部分:
filter {
json {
source => "message"
然后您添加了一个名为 "field1" 的字段,其中包含字段 "field1" 的内容,因为该字段已经存在,您刚刚将相同的信息添加到已经存在的字段中,它有现在变成一个数组:
add_field =>
{
"field1" => "%{field1}"
"field2" => "%{field2}"
}
}
}
如果您将代码简化为以下内容应该没问题:
filter {
json {
source => "message"
}
}
我怀疑你关于数组的问题在这一点上变得没有实际意义,因为你可能不需要嵌套数组,因此不需要解决它,但如果你这样做,我相信你可以做到像这样:
[field1][0]
[field1][1]