我想做的是在每次执行log.conf
文件后保存sql_last_value
参数中行的最大版本,如下所示。
这是我的log.conf
为logstash:
input {
jdbc {
jdbc_connection_string => "jdbc:postgresql://postgres:5432/test"
jdbc_driver_library => "/home/postgresql-42.2.18.jar"
# last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run"
jdbc_driver_class => "org.postgresql.Driver"
jdbc_user => "postgres"
jdbc_password => "postgres"
parameters => { "sql_last_version" => 400 }
schedule => "*/5 * * * * *"
statement => "SELECT * FROM test where xmin::text::int >= :sql_last_version ORDER BY xmin::text::int "
}
}
filter{
}
output {
stdout {
codec => json_lines
}
}
例如,这是我的表:
test=# select *,xmin from test where xmin::text::int >= 400 order by xmin::text::int;
id | name | xmin
----+----------+------
1 | Robert | 300
2 | Jessica | 400
3 | Jennifer | 500
4 | Jack | 600
(4 rows)
我希望存储600作为last_version
参数。
我敢肯定,如果错误或没有,我没有想法在这里,请帮助。我对日志存储完全是个新手。
提前感谢。
该参数名为sql_last_value
,您可以这样使用它:
input {
jdbc {
jdbc_connection_string => "jdbc:postgresql://postgres:5432/test"
jdbc_driver_library => "/home/postgresql-42.2.18.jar"
# last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run"
jdbc_driver_class => "org.postgresql.Driver"
jdbc_user => "postgres"
jdbc_password => "postgres"
schedule => "*/5 * * * * *"
use_column_value => true
tracking_column => "xmin"
statement => "SELECT * FROM test where xmin::text::int >= :sql_last_value ORDER BY xmin::text::int "
}
}
以下是我所做的修改:
- 你不需要
parameters
设置 - 您缺少
use_column_value
设置 - 您缺少
tracking_column
设置 - SQL查询需要引用
sql_last_value
而不是sql_last_version
第一次运行后,600
将存储在sql_last_value
中,并在下一次调用中使用,仅检索xmin
值为>= 600的记录(这意味着将再次获取最后一条记录)