我有一个日志文件,它是一个对象数组,看起来像这样:
[
{ "cate1": "data1a", "cate2": "data2a" },
{ "cate1": "data1b", "cate2": "data2b" },
{ "cate1": "data1c", "cate2": "data2c" }
]
我需要数组中的每个对象都是Elasticsearch中的一个单独条目,每个"cate"都是一个字段。我当前的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才能正确执行此操作?
您应该考虑在输入中使用json
编解码器,而不是使用json
过滤器。它似乎正是你想要的:
该编解码器可用于解码(通过输入)和编码(通过输出)完整的JSON消息。如果正在发送的数据是位于其根的JSON数组将创建多个事件(每个元素一个)。
它看起来像这样:
input {
tcp {
port => 5000
codec => json{ }
}
}