logstash同步数据库数据到ES中

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wgh_930708/article/details/90448519

logstash配置说明

环境准备

  1. 在logstash目录中新建文件夹driver;
  2. 把数据库驱动包复制到driver文件夹下(ojdbc6.jar);

配置文件

  1. 新建配置文件jdbc.conf;
  2. 该配置文件的内容如下:
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所在的路径#

踩过的坑

  1. 数据库驱动jdbc_driver_class前面少了Java::,导致启动报错:oracle.jdbc.driver.OracleDriver not loaded. Are you sure you’ve included the correct jdbc driver in :jdbc_driver_library?
  2. 数据库驱动jdbc_driver_class前面写成了java::,导致启动报错:oracle.jdbc.driver.OracleDriver not loaded. Are you sure you’ve included the correct jdbc driver in :jdbc_driver_library?
展开阅读全文

没有更多推荐了,返回首页