logstash同步数据到ES
logstash配置说明环境准备配置文件启动方式踩过的坑
logstash配置说明
环境准备
在logstash目录中新建文件夹driver;把数据库驱动包复制到driver文件夹下(ojdbc6.jar);
配置文件
新建配置文件jdbc.conf;该配置文件的内容如下:
input{
jdbc{
# 数据库驱动包存放路径
jdbc_driver_library => "D:\logstash-5.6.9\lib\ojdbc6.jar"
# 数据库驱动器;
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
# 数据库连接方式
jdbc_connection_string => "jdbc:oracle:thin:@192.168.1.1:1521:test"
# 数据库用户名
jdbc_user => "admin"
# 数据库密码
jdbc_password => "admin"
# 数据库重连尝试次数
connection_retry_attempts => "3"
# 判断数据库连接是否可用,默认false不开启
jdbc_validate_connection => "true"
# 数据库连接可用校验超时时间,默认3600s
jdbc_validation_timeout => "3600"
# 开启分页查询(默认false不开启)
jdbc_paging_enabled => "true"
# 单次分页查询条数(默认100000,若字段较多且更新频率较高,建议调低此值)
jdbc_page_size => "500"
# statement为查询数据sql,如果sql较复杂,建议通过statement_filepath配置sql文件的存放路径
# statement_filepath => "D:\logstash-5.6.9\config\jdbc.sql"
# sql_last_value为内置的变量,存放上次查询结果中最后一条数据tracking_column的值,此处即为rowid
statement => "select t.*, t.rowid from test t where rowid > :sql_last_value"
# 是否将字段名转换为小写,默认true(如果有数据序列化、反序列化需求,建议改为false);
lowercase_column_names => false
# 是否记录上次执行结果,true表示会将上次执行结果的tracking_column字段的值保存到last_run_metadata_path指定的文件中
record_last_run => true
# 需要记录查询结果某字段的值时,此字段为true,否则默认tracking_column为timestamp的值
use_column_value => true
# 查询结果某字段的数据类型,仅包括numeric和timestamp,默认为numeric
tracking_column_type => numeric
# 需要记录的字段,用于增量同步,需是数据库字段
tracking_column => "rowid"
# 记录上次执行结果数据的存放位置
last_run_metadata_path => "D:\logstash-5.6.9\logs\last_id.txt"
# 是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false
clean_run => false
# 同步频率(分 时 天 月 年),默认每分钟同步一次
schedule => "* * * * *"
# ES索引的type
type => "test_type01"
}
# 如果同步多个表,可以在复制一个jdbc{}块,修改相应的地方即可
}
output{
elasticsearch{
# ES地址,集群中多个地址可用数组形式:hosts => ["192.168.1.1:9200", "192.168.1.2:9200", "192.168.1.3:9200"]
hosts => "localhost:9200"
# 索引名称
index => "elasticsearch"
数据唯一索引(建议同数据库表的唯一ID对应)
document_id => "%{rowid}"
}
# 同步多个表时的写法
# if [type] == "test_type01" {
# elasticsearch{}
# }
# if [type] == "test_type02" {
# elasticsearch{}
# }
}
启动方式
cd到logstash的bin目录下,logstash.bat -f #配置文件jdbc.conf所在的路径#
踩过的坑
数据库驱动jdbc_driver_class前面少了Java::,导致启动报错:oracle.jdbc.driver.OracleDriver not loaded. Are you sure you’ve included the correct jdbc driver in :jdbc_driver_library?数据库驱动jdbc_driver_class前面写成了java::,导致启动报错:oracle.jdbc.driver.OracleDriver not loaded. Are you sure you’ve included the correct jdbc driver in :jdbc_driver_library?