Logstash:处理大型消息

时间:2015-05-01 21:59:34

标签: json elasticsearch logstash logstash-file

我正在尝试使用文件输入,json过滤器和elasticsearch输出使用Logstash解析大型消息。 99%的时间这个工作正常,但是当我的一条日志消息太大时,我得到JSON解析错误,因为初始消息被分解为两个部分无效的JSON流。此类消息的大小约为40,000+个字符。我看看是否有关于缓冲区大小的信息,或者我应该尝试留下的一些最大长度,但没有任何运气。我发现的唯一答案与udp输入有关,并且能够更改缓冲区大小。

Does Logstash has a limit size for each event-message? https://github.com/elastic/logstash/issues/1505

这也可能与此问题类似,但从来没有任何回复或建议:Logstash Json filter behaving unexpectedly for large nested JSONs

作为一种解决方法,我想将我的消息拆分成多条消息,但我无法做到这一点,因为我需要所有信息都在Elasticsearch的同一条记录中。我不相信有办法从logstash调用Update API。此外,大多数数据都在一个数组中,所以虽然我可以使用脚本(Elasticsearch upserting and appending to array)更新Elasticsearch记录的数组,但我无法从Logstash中做到这一点。

数据记录如下所示:

{ "variable1":"value1", 
 ......, 
 "variable30": "value30", 
 "attachements": [ {5500 charcters of JSON}, 
                   {5500 charcters of JSON}, 
                   {5500 charcters of JSON}.. 
                   ...
                   {8th dictionary of JSON}]
 }

有没有人知道让Logstash处理这些大型JSON消息的方法,或者我可以将它们拆分并让它们最终放在同一个Elasticsearch记录中的方式(使用Logstash)?

感谢任何帮助,我很乐意添加所需的任何信息!

1 个答案:

答案 0 :(得分:2)

如果您的elasticsearch输出设置了document_id,它将更新文档(logstash中的默认操作是index数据 - 如果文件已经更新,则会更新文档存在)

在您的情况下,您需要在json消息中包含一些唯一字段,然后依靠它来在elasticsearch中进行合并。例如:

{"key":"123455","attachment1":"something big"}
{"key":"123455","attachment2":"something big"}
{"key":"123455","attachment3":"something big"}

然后输出elasticsearch,如:

elasticsearch { 
  host => localhost
  document_id => "%{key}" 
}