在Logstash中解析JSON对象的数组

时间:2016-07-19 19:11:57

标签: json logstash elastic-stack logstash-configuration

我有一个日志文件,其中包含一系列对象,如下所示:

[
  { "cate1": "data1a", "cate2": "data2a" },
  { "cate1": "data1b", "cate2": "data2b" },
  { "cate1": "data1c", "cate2": "data2c" }
]

我需要数组中的每个对象都是Elasticsearch中的一个单独的条目,并且每个对象都是#c;"成为一个领域。我当前的logstash.conf文件是:

input {
  tcp {
    port => 5000
  }
}

## Add your filters / logstash plugins configuration here

filter {
  json {
    source => "message"
    target => "event"
  }
  mutate {
    gsub => ["message","\]",""]
    gsub => ["message","\[",""]
  }
}

output {
  elasticsearch {
    hosts => "elasticsearch:9200"
  }
}

但它用" _jsonparsefailure"标记每一行。除了第一个条目,它也解析方括号。我将如何配置Logstash以正确执行此操作?

1 个答案:

答案 0 :(得分:1)

您应该考虑在输入中使用json codec,而不是使用json过滤器。它似乎完全符合你的要求:

  

此编解码器可用于解码(通过输入)和编码(通过输出)   完整的JSON消息。如果要发送的数据是其根目录下的JSON数组   将创建多个事件(每个元素一个)。

它看起来像这样:

input {
  tcp {
    port => 5000
    codec => json{ }
  }
}