2017-01-01 5 views
1

logstashを使用してmysql dbからelasticsearchにインデックスを作成しようとしています。 Logstashはエラーなしで実行されていますが、問題はSELECTクエリから1行しか索引付けされていないことです。 以下は、私が使用しているソフトウェアのバージョンです:Logstashは、mysqlから弾性検索への選択クエリの1行のみをインデックスしています。

  • 弾性検索:2.4.1
  • logstash:5.1.1
  • のMySQL:5.7.17
  • jdbc_driver_libraryます。mysql-コネクタ - Javaベース5.1.40-bin.jar

これは、logstashとelasticsearchのバージョンが異なるためです。

以下は私のパイプライン構成である:outputであなたがjdbcプラグインで使用している

input { 
    jdbc { 
    jdbc_driver_library => "mysql-connector-java-5.1.40-bin.jar" 
    jdbc_driver_class => "com.mysql.jdbc.Driver" 
    jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb" 
    jdbc_user => "user" 
    jdbc_password => "password" 
    schedule => "* * * * *" 
    statement => "SELECT * FROM employee" 
    use_column_value => true 
    tracking_column => "id" 
    } 
} 
output { 
    elasticsearch { 
     index => "logstash" 
     document_type => "sometype" 
     document_id => "%{uid}" 
     hosts => ["localhost:9200"] 
    } 
} 

答えて

2

それはtracking_columnid)のように思えるとdocument_iduid)異なっています。何idですべてのレコードを取得し、より理解しやすい見える可能性があるだけでなく同じidを使用してESにそれらをプッシュするのは簡単だろうので、あなたが同じそれらの両方を持っている場合:

document_id => "%{id}" <-- make sure you've got the exact spellings 

も追加してみてください

tracking_column_type => "numeric" 

また、あなたがlogstashファイルを実行している際に、既存の.logstash_jdbc_last_runのファイルは同様に以下の行を含めていないことを確認する:

後のあなたの jdbc入力するには、この次の行
clean_run => true 

これはあなたのJDBC入力のようになります方法です。

jdbc { 
    jdbc_driver_library => "mysql-connector-java-5.1.40-bin.jar" 
    jdbc_driver_class => "com.mysql.jdbc.Driver" 
    jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb" 
    jdbc_user => "user" 
    jdbc_password => "password" 
    schedule => "* * * * *" 
    statement => "SELECT * FROM employee" 
    use_column_value => true 
    tracking_column => "id" 
    tracking_column_type => "numeric" 
    clean_run => true 
    } 
あなたはあなただけ更新したい場合 :sql_last_valueを持っているために喜んでいる場合を除きconfには、罰金のようだということ以外

データベーステーブルに新しく追加されたレコード。それが役に立てば幸い!

+0

返信いただきありがとうございます。私はいくつかのことではっきりしていません。スケジューラが実行されるたびに、すべての行と再インデックスを選択します(私はtracking_columnを持っているので、重複しないと理解しています)。たとえば、最初はテーブルに10行あり、それらはESで索引付けされています。次回スケジューラーが実行される前に、さらに5行が追加されます。スケジューラは15行または5行を選択しますか?私の理解は、次の場合です:選択クエリでsql_last _valueが使用された場合は5が選択され、それ以外の場合は15が選択されます。私の理解を明確にしてください。 –

+0

@MaruthiPodilaうん、そうです。 sql_last_valueが最後に更新されたIDを指している場合、スケジューラが再び実行されたときに追加された最後の5行が常に選択されます。 – Kulasangar

関連する問題