2016-07-05 4 views
1

Я новичок в logstash, и у меня есть требование как текущее сценарий. У меня следующий формат журнала.Logstash Итерировать внутренние объекты и вставить в базу данных

{"library":"xyz","locations":["location1":"abc","location2":"mno"]} 

Затем мне нужно добавить эти данные в базу данных в следующем формате.

  • "место": "библиотека" (полей базы данных)
  • "ABC": "хуг"
  • "MnO": "хуг"

До сих пор я сделал извлечь json и поместить запись в базу данных. Но выше сценария мне нужно добавить две записи в базу данных. Мне нужно знать, как итерировать местоположение, и каждое место добавляет запись в базу данных. Ссылка на документацию или простой пример будет достаточно.

Это мой конф файл

input { 
file { 
    path=> "filePath" 
    start_position => beginning 
    sincedb_path => "/dev/null" 
} 
} 
filter { 

    grok{ 
     match => { "message" => "%{GREEDYDATA:request}"} 
    } 
    json{ 
      source => "request" 
      target => "parsedJson" 
    } 

    mutate { 
      add_field => 
      "locations" => "%{[parsedJson][locations]}" 
      "library" => "%{[parsedJson][library]}" 
      } 
      remove_field => ["request", "message", "@version", "host", "parsedJson"] 
    } 

} 
output { 
    stdout { 
    codec => rubydebug 
    } 
    mongodb{ 
      collection => "library" 
      database => "db" 
      uri => "mongodb://127.0.0.1:27017" 
    } 

} 
+0

Когда вы говорите базу данных, вы имеете в виду вывод в терминах elasticsearch? можете ли вы изменить свой вопрос и добавить в него свой конфигурационный файл? – pandaadb

+0

Привет @pandaadb i обновленный файл конфигурации. Спасибо за ваш комментарий. – Sajithv

+0

в порядке - поэтому я думаю, что это может быть невозможно в том виде, каким вы этого хотите. Выход только получает 1 событие и отправляет это событие. Если вы хотите, чтобы они были отдельными, вам необходимо либо (a) создать фильтр, который отделяет ваши поля и дает новые события (в настоящее время это возможно только с помощью настраиваемых фильтров), либо (b) создает собственный выходной плагин (на основе mongodb), который делает Правильно. – pandaadb

ответ

1

Вы можете быть в состоянии добиться того, что вы хотите с split filter, что создает отдельные события для каждого разделения поля. Если у вас было два места в разделенных запятыми массив можно использовать

split { 
    target => "field" 
    terminator => "," 
} 

Что бы создать отдельное событие для каждого значения, разделенные запятыми.