2015-05-01 20 views
5

Sto tentando di analizzare un messaggio di grandi dimensioni con Logstash utilizzando un input di file, un filtro JSON e un output elasticsearch. Il 99% delle volte funziona correttamente, ma quando uno dei miei messaggi di registro è troppo grande, ottengo errori di analisi JSON, in quanto il messaggio iniziale è suddiviso in due flussi JSON invalidi parziali. La dimensione di questi messaggi è lunga circa 40.000 caratteri. Ho cercato di vedere se ci sono informazioni sulla dimensione del buffer o su una lunghezza massima che dovrei provare a stare sotto, ma non ho avuto fortuna. Le uniche risposte che ho trovato relative all'input di udp e alla possibilità di modificare la dimensione del buffer.Logstash: gestione di messaggi di grandi dimensioni

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

Questo potrebbe anche essere simile a questa domanda, ma non c'erano mai eventuali risposte o suggerimenti: Logstash Json filter behaving unexpectedly for large nested JSONs

Per aggirare il problema, ho voluto dividere il mio messaggio in più messaggi, ma Non sono in grado di farlo, poiché ho bisogno che tutte le informazioni siano nello stesso record in Elasticsearch. Non credo che ci sia un modo per chiamare l'API di aggiornamento da logstash. Inoltre, la maggior parte dei dati si trova in un array, quindi mentre posso aggiornare l'array di un record Elasticsearch usando uno script (Elasticsearch upserting and appending to array), non posso farlo da Logstash.

I set di dati simile a questa:

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

Qualcuno sa di un modo per avere processo Logstash questi grandi messaggi JSON, o un modo che io possa dividere e li hanno finiscono nella stesso record Elasticsearch (utilizzando Logstash)?

Qualsiasi aiuto è apprezzato e sono felice di aggiungere qualsiasi informazione necessaria!

risposta

2

Se il elasticsearch uscita ha una serie document_id, si aggiornerà il documento (l'azione predefinita in logstash è quello di index i dati - che aggiornerà il documento se esiste già)

Nel tuo caso, si Dovrei includere alcuni campi unici come parte dei tuoi messaggi JSON e quindi fare affidamento su di esso per fare l'unione in elasticsearch. Per esempio:

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

E poi hanno un elasticsearch uscita come:

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