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文字列を正しく返しています。
私が紛失しているものを正確に教えてもらえますか?または正しい方向に私を導くことができますか?
ありがとうございました!
ご返信ありがとうございます。インデックスデータをelasticsearchにチェックしました。また、型:jsonフィールドもあります。私もmutateを使用しましたが、削除されていません。また、stdoutでcodec => json_linesも削除しました。しかし、私はまだ同様の問題に直面しています。 – prashant
私は同じことをテストしました。しかし、デフォルトではjdbcによって追加された "type"フィールドはなく、elasticseachは_sourceの "type"フィールドを追加しません。 –
フィルタを使用しているかどうかを確認してください。 –