Logstash:处理大型消息

pra*_*ddc 5 json elasticsearch logstash logstash-file

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

Logstash是否为每个事件消息设置了限制大小? https://github.com/elastic/logstash/issues/1505

这也可能类似于这个问题,但是从来没有任何回复或建议:Logstash Json过滤器对于大型嵌套JSON意外行为

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

数据记录看起来像这样:

{ "variable1":"value1", 
 ......, 
 "variable30": "value30", 
 "attachements": [ {5500 charcters of JSON}, 
                   {5500 charcters of JSON}, 
                   {5500 charcters of JSON}.. 
                   ...
                   {8th dictionary of JSON}]
 }
Run Code Online (Sandbox Code Playgroud)

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

任何帮助表示赞赏,我很乐意添加所需的任何信息!

Alc*_*zar 2

如果你的elasticsearch输出有一个document_id集合,它将更新文档(logstash 中的默认操作是index数据——如果文档已经存在,它将更新文档)

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

{"key":"123455","attachment1":"something big"}
{"key":"123455","attachment2":"something big"}
{"key":"123455","attachment3":"something big"}
Run Code Online (Sandbox Code Playgroud)

然后输出elasticsearch如下:

elasticsearch { 
  host => localhost
  document_id => "%{key}" 
}
Run Code Online (Sandbox Code Playgroud)