我有一个日志存储正在运行从postgresql中提取记录并在弹性搜索中创建文档,但每当我尝试更新postgres中的记录时,弹性搜索中都没有反映出来,这是我的INPUT& OUTPUT配置让我知道我在这里遗漏了什么,
input {
jdbc {
# Postgres jdbc connection string to our database, mydb
jdbc_connection_string => "jdbc:postgresql://127.0.0.1:5009/data"
# The user we wish to execute our statement as
jdbc_user => "data"
jdbc_password=>"data"
# The path to our downloaded jdbc driver
jdbc_driver_library => "/postgresql-9.4.1209.jar"
# The name of the driver class for Postgresql
jdbc_driver_class => "org.postgresql.Driver"
#sql_log_level => "debug"
jdbc_paging_enabled => "true"
jdbc_page_size => "5000"
schedule => "* * * * *"
# our query
clean_run => true
last_run_metadata_path => "/logstash/.test_metadata"
#use_column_value => true
#tracking_column => id
statement => "SELECT id,name,update_date from data where update_date > :sql_last_value"
}
}
output {
elasticsearch{
hosts => ["127.0.0.1"]
index => "test_data"
action => "index"
document_type => "data"
document_id => "%{id}"
upsert => ' {
"name" : "%{data.name}",
"update_date" : "%{data.update_date}"
} '
}
}
答案 0 :(得分:0)
我认为您需要跟踪日期/时间戳列而不是id列。如果您的每个更新都有UPDATE_DATE
列,那就更好了。
您的SELECT语句只会获取新记录(即id > last_id
),如果您更新记录,其ID将不会更改,因此jdbc
将无法获取更新的记录下次运行时输入。