2016-05-02 21 views
1

logstashとelasticsearchの新機能です。私はdbstatを使ってdb updateを読み込み、高速検索のために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"} 

ご覧のとおり_sourceフィールドのmy json stringの出力が上になります。理想的には以下のようになります。

{"_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スティングを追加しています。私はdbをチェックインしました。私のSQLクエリは、私が必要とする形式でjson文字列を正しく返しています。

私が紛失しているものを正確に教えてもらえますか?または正しい方向に私を導くことができますか?

ありがとうございました!

答えて

0

elasticsearchのログを確認してください。私は主にあなたがstdoutでcodec => json_linesを使用していると思います。これがtype=>jsonが追加されている理由です。弾性検索レコードにはタイプフィールドがありません。

elasticsearchのログにもtype => jsonがある場合は、mutateを使用してフィールドを削除します。

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

ご返信ありがとうございます。インデックスデータをelasticsearchにチェックしました。また、型:jsonフィールドもあります。私もmutateを使用しましたが、削除されていません。また、stdoutでcodec => json_linesも削除しました。しかし、私はまだ同様の問題に直面しています。 – prashant

+0

私は同じことをテストしました。しかし、デフォルトではjdbcによって追加された "type"フィールドはなく、elasticseachは_sourceの "type"フィールドを追加しません。 –

+0

フィルタを使用しているかどうかを確認してください。 –

関連する問題