如何在 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的记录(这意味着将再次获取最后一条记录)