首页 > 解决方案 > 需要澄清 Logstash 配置中使用的 sql_last_value

问题描述

大家好,我正在使用下面的代码将数据从 MSSql 服务器索引到 elasticsearch,但我不清楚这个 sql_last_value。

input {
jdbc {
jdbc_driver_library => ""
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_connection_string => "jdbc:sqlserver://xxxx:1433;databaseName=xxxx;"
jdbc_user => "xxxx"
jdbc_paging_enabled => true
tracking_column => modified_date
tracking_column_type => "timestamp"
use_column_value => true
jdbc_password => "xxxx"
clean_run => true
schedule => "*/1 * * * *"
statement => "Select * from [dbo].[xxxx] where modified_date >:sql_last_value"
}
}

filter {
if [is_deleted] {
        mutate {    
            add_field => {
                "[@metadata][elasticsearch_action]" => "delete"
            }
        }
        mutate {
            remove_field => [ "is_deleted","@version","@timestamp" ]
        }
    } else {
        mutate {    
            add_field => {
                "[@metadata][elasticsearch_action]" => "index"
            }
        }
        mutate {
            remove_field => [ "is_deleted","@version","@timestamp" ]
        }
    } 
}

output {
elasticsearch {
hosts => "xxxx"
user => "xxxx"
password => "xxxx"
index => "xxxx"
action => "%{[@metadata][elasticsearch_action]}"
document_type => "_doc"
document_id => "%{id}"

}
stdout { codec => rubydebug }
}

这个 sql_last_value 存储在哪里以及如何在物理上查看它?是否可以为 sql_last_value 设置自定义值?

任何人都可以澄清上述问题吗?

标签: elasticsearchlogstashlogstash-configurationlogstash-jdbc

解决方案


sql_last_value存储在名为的文件中,.logstash_jdbc_last_run根据文档,它存储在$HOME/.logstash_jdbc_last_run. 文件本身包含上次运行的时间戳,可以设置为特定值。

您应该last_run_metadata_path为每个单独定义参数jdbc_input_plugin并指向更具体的位置,因为默认情况下所有正在运行的jdbc_input_plugin实例将共享同一个.logstash_jdbc_last_run文件,并可能导致不需要的结果。


推荐阅读