Logstash JDBC跟踪列值不是最新时间戳 数据库

Logstash JDBC跟踪列值不是最新时间戳 数据库,logstash,logstash-jdbc,Logstash,Logstash Jdbc,给定以下PostgreSQL表test(省略了一些列,例如管道中使用的数据): 伐木场 给定Logstash 6.3.2(通过Docker)和以下管道(jdbc.*省略): 问题 当这个管道第一次运行时(或者使用clean_run=>true),我希望它处理两个数据库行(因为sql_last_value是1970-01-01 00:00:00.000000),并将中存储的跟踪列的值设置为。logstash_jdbc_last__run到2018-08-08 11:02:00.000000000

给定以下PostgreSQL表
test
(省略了一些列,例如管道中使用的
数据
):

伐木场 给定Logstash 6.3.2(通过Docker)和以下管道(
jdbc.*
省略):

问题 当这个管道第一次运行时(或者使用
clean_run=>true
),我希望它处理两个数据库行(因为
sql_last_value
1970-01-01 00:00:00.000000
),并将
中存储的跟踪列的值设置为
。logstash_jdbc_last__run
2018-08-08 11:02:00.000000000 Z
(=在时间戳处更新的所有
中最新的一个。它将被设置为
2018-08-07 15:30:00.000000000 Z
,这是两个给定时间戳中较早的一个。这意味着在第二次运行时,两行中的另一行将再次处理,即使它没有更改

这是预期的行为吗?我是否错过了控制此方面的其他配置

编辑 似乎将使用返回的最后一行的
updated_(在
处更新)
(只是尝试了更多行)。因此,我必须通过ASC的updated_
添加一个
顺序,我认为这在DB查询性能方面不是很好

原木等。
从上个月使用MySQL到ES,我遇到了同样的问题。但最终问题解决了。默认情况下,文件.logstash\u jdbc\u last\u run是在您的主目录中创建的。您可以通过设置last\u run\u metadata\u path config选项来更改此文件的路径。我使用的是UTC日期格式

第一次sql_last_值是1970-01-01 00:00:00.000000。它还在logstash_jdbc_last_run文件中设置了日期,这是MySQL返回的第一条记录。这就是为什么我在DESC使用order by update_。下面的代码对我有用

input {
    jdbc {
         jdbc_default_timezone => "UTC"
         statement => "SELECT id, data, DATE_FORMAT(updated_at, '%Y-%m-%d %T') as updated_at, FROM test WHERE updated_at > :sql_last_value order by update_at DESC"
         schedule => "* * * * * *"
         use_column_value => true
         tracking_column => "updated_at"
         tracking_column_type => "timestamp"
         last_run_metadata_path => /home/logstash_track_date/.logstash_user_jdbc_last_run" 
    }
}

filter {
    mutate { remove_field => "updated_at" }
}

output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "elasticsearch:9200"
        index => "test"
        document_id => "%{id}"
    }
}
input {
    jdbc {
        statement => "SELECT id, data, updated_at FROM test WHERE updated_at > :sql_last_value"
        schedule => "* * * * *"
        use_column_value => true
        tracking_column => "updated_at"
        tracking_column_type => "timestamp"
    }
}

filter {
    mutate { remove_field => "updated_at" }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        index => "test"
        document_id => "%{id}"
    }
}
sh-4.2$ cat .logstash_jdbc_last_run
cat: .logstash_jdbc_last_run: No such file or directory

[2018-08-09T14:38:01,540][INFO ][logstash.inputs.jdbc     ] (0.001254s) SELECT id, data, updated_at FROM test WHERE updated_at > '1970-01-01 00:00:00.000000+0000'
sh-4.2$ cat .logstash_jdbc_last_run
--- 2018-08-07 15:30:00.000000000 Z


[2018-08-09T14:39:00,335][INFO ][logstash.inputs.jdbc     ] (0.001143s) SELECT id, data, updated_at FROM test WHERE updated_at > '2018-08-07 15:30:00.000000+0000'
sh-4.2$ cat .logstash_jdbc_last_run
--- 2018-08-08 11:02:00.000000000 Z


[2018-08-09T14:40:00,104][INFO ][logstash.inputs.jdbc     ] (0.000734s) SELECT id, data, updated_at FROM test WHERE updated_at > '2018-08-08 11:02:00.000000+0000'
sh-4.2$ cat .logstash_jdbc_last_run
--- 2018-08-08 11:02:00.000000000 Z
input {
    jdbc {
         jdbc_default_timezone => "UTC"
         statement => "SELECT id, data, DATE_FORMAT(updated_at, '%Y-%m-%d %T') as updated_at, FROM test WHERE updated_at > :sql_last_value order by update_at DESC"
         schedule => "* * * * * *"
         use_column_value => true
         tracking_column => "updated_at"
         tracking_column_type => "timestamp"
         last_run_metadata_path => /home/logstash_track_date/.logstash_user_jdbc_last_run" 
    }
}

filter {
    mutate { remove_field => "updated_at" }
}

output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "elasticsearch:9200"
        index => "test"
        document_id => "%{id}"
    }
}