2017-02-16 6 views
0

Я пытаюсь выяснить, как читать в JSON файл с Logstash, который содержит все события на одной строкеLogstash: Как читать однострочные JSON

Пример ввода:

{"metadata": {"metadata fields": "metadata data"},"results": [{"events":[{"event fields": "event data"}, {"event fields": "event data"}}],"field": {"more fields": "data"}} 

Expanded JSON:

{ 
    "metadata": { 
     "metadata fields": "metadata data" 
    }, 
    "results": [{ 
      "events": [{ 
        "event fields": "event data" 
       }, { 
        "event fields": "event data" 
       } 
      }], "field": { 
      "more fields": "data" 
     } 
    } 

Я пытался просто с помощью JSON-кодек, однако, когда я бегу Logstash зависает после печати успешно запущен. Еще одна вещь, которую я пробовал, чтобы заставить ее работать, заключается в добавлении новой строки в конце JSON, но это не будет работать в процессе производства, потому что я не могу контролировать источник журналов.

Есть ли у кого-нибудь предложения по правильному анализу этих журналов через Logstash? Ниже приведен файл конфигурации. Заранее спасибо!

Config

input { 
    file { 
     path => "C:/Folder/*.json" 
     sincedb_path => "C:\nul" 
     start_position => "beginning" 
     codec => "json" 
     type => "data" 
    } 
} 
output { 
    stdout { codec => rubydebug } 
} 
+0

Это недопустимо JSON. Возможно, причина, по которой это не работает. – Fairy

+0

Есть ли у вас какие-либо идеи, как я могу его разобрать? – Mielzus

+0

Некоторые сложные фильтры grock будет выполнять эту работу. – Fairy

ответ

0

Ваш вход отсутствует квадратные скобки, он должен иметь один:

{"metadata": {"metadata fields": "metadata data"},"results": [{"events":[{"event fields": "event data"}, {"event fields": "event data"} HERE ] }],"field": {"more fields": "data"}} 

Если отсутствующий квадратная скобка находится в передней части того же события во всех входных файлов, вы можете попробовать gsub.

Например:

filter { 
mutate { 
    gsub => [ "message", "\"}}\],\"field\"\:", "\"}\]}\],\"field\"\:" ] 
} 
} 

Это соответствует "}}]," поле ": шаблон и заменяет его на аналогичный, но с добавлением [ в нужном месте После этой мутации. вы можете использовать json-фильтр для сообщения.