0

jdbcプラグインの中にlogstash入力のようなMySQL文があります。ログスタッシュでsql_last_valueのテーブルのIDを使用していますか?

statement => "SELECT * from TEST where id > :sql_last_value" 

私のテーブルは、次のような任意のdatedatetimeフィールドがありません。だから、テーブルに新しい行が追加されたかどうかを確認するために、分単位でschedulerを使用してインデックスを更新しようとしています。

既存の値の変更を既存のレコードから更新するのではなく、新しいレコードのみを更新することができます。だから私はちょっとlogstash入力のこれを持っていますこれを行うために:私はインデックスを作成し、ドキュメントをアップロードするために、このlogstashファイルを実行するたびに

input { 
    jdbc { 
     jdbc_connection_string => "jdbc:mysql://myhostmachine:3306/mydb" 
     jdbc_user => "root" 
     jdbc_password => "root" 
     jdbc_validate_connection => true 
     jdbc_driver_library => "/mypath/mysql-connector-java-5.1.39-bin.jar" 
     jdbc_driver_class => "com.mysql.jdbc.Driver" 
     jdbc_paging_enabled => "true" 
     jdbc_page_size => "50000" 
     schedule => "* * * * *" 
     statement => "SELECT * from mytable where id > :sql_last_value" 
     use_column_value => true 
     tracking_column => id 
     last_run_metadata_path => "/path/.logstash_jdbc_last_run" 
     clean_run => true 
    } 
} 

ことだから、それはすべてでアップロードされません。ドキュメント数はゼロとして表示されます。私はlogstash confファイルを実行する前に.logstash_jdbc_last_runを削除したことを確認しました。 logstashコンソール出力の

パート:

[2016-11-02T16:33:00294] [INFO] [logstash.inputs.jdbc] (0.002000s)SELECT COUNT(*)FROM count AS t1 LIMIT 1

AS( ID> '2016年11月2日午前11時02分00秒' TEST SELECT * FROM)、これが正しいとする分単位で分をチェックして行くが、その後それはdoesnの上に保ちますレコードを取得する。どのように機能するのですか?

何か不足していますか?どんな助けでも感謝します。

+1

'jdbc'入力設定で' clean_run => true'を追加しようとしましたか? IDフィールドとの比較に使用された値が日付'2016-11-02 11:02:00'です。 – Val

+0

@Val私もそれを試しましたが、結果は同じです。 – Kulasangar

+0

'clean_run'は' .logstash_jdbc_last_run'ファイルを削除します。おそらく 'tracking_column_type => 'numeric'をデフォルトであるとして指定しようとします。 – Val

答えて

3

あなたはこのようなあなたのlogstashの設定を変更する必要があります

jdbc { 
    jdbc_connection_string => "jdbc:mysql://myhostmachine:3306/mydb" 
    jdbc_user => "root" 
    jdbc_password => "root" 
    jdbc_validate_connection => true 
    jdbc_driver_library => "/mypath/mysql-connector-java-5.1.39-bin.jar" 
    jdbc_driver_class => "com.mysql.jdbc.Driver" 
    jdbc_paging_enabled => "true" 
    jdbc_page_size => "50000" 
    schedule => "* * * * *" 
    statement => "SELECT * from TEST where id > :sql_last_value" 
    use_column_value => true 
    tracking_column => "id" 
    tracking_column_type => "numeric" 
    clean_run => true 
    last_run_metadata_path => "/mypath/.logstash_jdbc_last_run" 
} 

最後の5つの設定は、あなたの場合に重要です。 clean_run => trueでも、.logstash_jdbc_last_runファイルを削除してください。

関連する問題