2016-05-02 3 views
1

Я новичок в поиске логсташа и elasticsearch. Я использую logstash для чтения обновлений db и хранения в elasticsearch для быстрого поиска. Ниже приведен мой файл конфигурации logstash (countries.conf).Выход Logstash неверен

input { 
     jdbc { 
     jdbc_driver_library => "/home/vagrant/postgresql-9.4-1201.jdbc4.jar" 
     jdbc_driver_class => "org.postgresql.Driver" 
     jdbc_connection_string => "jdbc:postgresql://192.168.10.123:5432/myDB" 
     jdbc_user => "myuser" 
     jdbc_password => "mypassword" 
     schedule => "* * * * *" 
     statement_filepath => "/home/vagrant/countries.sql" 
     last_run_metadata_path => "/home/vagrant/logstash/countries.log" 
     } 
    } 
    output { 
     elasticsearch { 
      index => "myIndex" 
      document_type => "countries" 
      document_id => "%{id}" 
      hosts => "localhost:9200" 
     } 
     stdout { codec => json_lines } 
    } 

И мой файл countries.sql выглядит следующим образом

SELECT json.id as id, 
    row_to_json(json.*) AS _source 
    FROM (
     SELECT id, created, modified, name, capital, iso_alpha2, iso_alpha3 
     FROM countries 
) as json 

бегаю конфигурационный файл, используя следующую команду

sudo /opt/logstash/bin/logstash -f /home/vagrant/countries.conf 

Вывод выше команды на стандартный вывод заключается в следующем: -

Settings: Default pipeline workers: 1 
Pipeline main started 
{"_id":6,"_source":{"type":"json","value":"{\"id\":6,\"created\":\"2013-02-07T10:11:00\",\"modified\":\"2016-04-29T11:15:40.329\",\"name\":\"Andorra\",\"capital\":\"Andorra la Vella\",\"iso_alpha2\":\"AD\",\"iso_alpha3\":\"AND\"}"},"@version":"1","@timestamp":"2016-05-02T10:08:00.931Z"} 

Как вы можете видеть i n выше output my json string в поле _source изменяется. В идеале это должно быть примерно

{"_id":6,"_source":{\"id\":6,\"created\":\"2013-02-07T10:11:00\",\"modified\":\"2016-04-29T11:15:40.329\",\"name\":\"Andorra\",\"capital\":\"Andorra la Vella\",\"iso_alpha2\":\"AD\",\"iso_alpha3\":\"AND\"},"@version":"1","@timestamp":"2016-05-02T10:08:00.931Z"} 

Logstash меняет мою строку json. Он добавляет тип: «json» дополнительное поле и добавление моего фактического json sting в значение поле. Я пересек чек в db. Мой SQL-запрос корректно возвращает строку json в формате, который мне нужен.

Может кто-нибудь, пожалуйста, сообщите мне, что мне не хватает? или Может вести меня в правильном направлении?

Спасибо заранее!

ответ

0

Проверьте журналы в поиске эластиков. Я думаю, в основном, когда вы используете codec => json_lines в stdout, вот почему добавляется type=>json. У записей Elasticsearch не будет поля типа.

Если журналы в elasticsearch также имеют тип => json, используйте mutate для удаления поля.

filter { 
    mutate { 
    remove_field => [ "type" ] 
    } 
} 
+0

Спасибо за ваш ответ. Я проверил данные индекса в elasticsearch. Он также имеет тип: json field. Я также использовал мутацию, но она не удаляется. Кроме того, я также удалил codec => json_lines в stdout. Но я все еще сталкиваюсь с аналогичной проблемой. – prashant

+0

Я тестировал то же самое. Но по умолчанию не добавлено поле типа, добавленное jdbc, и ни один из них не активирует добавление поля «type» в _source. –

+0

Проверьте, не используется ли какой-либо фильтр. –

Смежные вопросы