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)?
任何帮助表示赞赏,我很乐意添加所需的任何信息!
如果你的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)