2015-05-01 19 views
5

Próbuję parsować dużą wiadomość z Logstash przy użyciu danych wejściowych pliku, filtra json i danych wyjściowych elasticsearch. 99% czasu to działa dobrze, ale gdy jeden z moich komunikatów jest zbyt duży, otrzymuję błędy analizy JSON, ponieważ początkowa wiadomość jest podzielona na dwa częściowe nieprawidłowe strumienie JSON. Rozmiar takich wiadomości ma około 40 000 znaków. Sprawdziłem, czy są jakieś informacje na temat rozmiaru bufora lub jakiejś maksymalnej długości, którą powinienem spróbować pozostać, ale nie miałem szczęścia. Jedyne odpowiedzi, które znalazłem, dotyczą wejścia udp i możliwości zmiany wielkości bufora.Logstash: Obsługa dużych wiadomości

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

To może być podobne do tego pytania, ale nigdy nie było żadnych odpowiedzi i sugestie: Logstash Json filter behaving unexpectedly for large nested JSONs

Jako obejście, chciałem podzielić moją wiadomość na wiele wiadomości, ale Nie mogę tego zrobić, ponieważ potrzebuję wszystkich informacji, aby znaleźć się w tym samym rekordzie w Elasticsearch. Nie wierzę, że istnieje sposób wywołania interfejsu API aktualizacji z logstash. Ponadto większość danych znajduje się w tablicy, więc mimo że mogę zaktualizować tablicę rekordu Elasticsearch za pomocą skryptu (Elasticsearch upserting and appending to array), nie mogę tego zrobić z Logstash.

rekordy danych wyglądać tak:

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

Czy ktoś zna sposób, aby proces Logstash te duże wiadomości JSON, lub sposób, że mogę podzielić je i je skończyć w ten sam rekord Elasticsearch (przy użyciu Logstash)?

Każda pomoc jest doceniana, a ja z radością dodaję wszelkie potrzebne informacje!

Odpowiedz

2

Jeśli wyjście elasticsearch ma document_id zestaw będzie aktualizować dokument (domyślna akcja w logstash jest index danych - co spowoduje uaktualnienie dokumentu, jeśli już istnieje)

W twoim przypadku, Potrzebne jest dołączenie jakiegoś unikalnego pola jako części wiadomości json, a następnie polegać na tym, aby dokonać scalenia w elastycznym wyszukiwaniu. Na przykład:

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

A potem mieć elasticsearch wyjście jak:

elasticsearch { 
    host => localhost 
    document_id => "%{key}" 
} 
Powiązane problemy