2015-05-01 60 views
5

我試圖用Logstash使用文件輸入,json過濾器和elasticsearch輸出來解析大型郵件。 99%的時間工作正常,但是當我的一條日誌消息太大時,我得到了JSON解析錯誤,因爲初始消息被分解爲兩個部分無效的JSON流。這些消息的大小約爲40,000多個字符。我查看過是否有關於緩衝區大小的任何信息,或者我應該嘗試保留的最大長度,但沒有任何運氣。我找到的唯一答案與udp輸入相關,並且能夠更改緩衝區大小。Logstash:處理大型郵件

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調用更新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)?

任何幫助表示讚賞,我很高興地添加所需的任何信息!

回答

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}" 
}