如何在 logstash 中将数据库版本控制保存为 sql_last_version 变量
how to save database versioning as a sql_last_version variable in logstash
我想做的是在每次执行后在 sql_last_value
参数中保存最大版本的行,如下所示在我的 log.conf
文件中。
这是我的 log.conf
for 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
}
}
例如,这是我的 table:
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
参数。
我确定我是否有误,我在这里没有想法,请帮助。我是 logstash 的新手。
提前致谢。
The parameter is called 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的记录(这意味着将再次获取最后一条记录)
我想做的是在每次执行后在 sql_last_value
参数中保存最大版本的行,如下所示在我的 log.conf
文件中。
这是我的 log.conf
for 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
}
}
例如,这是我的 table:
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
参数。
我确定我是否有误,我在这里没有想法,请帮助。我是 logstash 的新手。
提前致谢。
The parameter is called 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的记录(这意味着将再次获取最后一条记录)