docker-logstash同步mysql到elasticsearch(多数据源)

本文详细介绍了如何在Docker中安装Logstash,配置JDBC输入以从MySQL数据库同步数据,并根据不同类型(e-commerce和education)将其分发到Elasticsearch。务必确保先准备ES索引和字段映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker安装logstash后

mkdir -p /usr/logstash/config-dir
cd /usr/logstash/config-dir、
vi logstash.conf 

在文本编辑器编辑好配置文件并辅助到logstash.conf
参考配置:

input{
  jdbc{
    #the path to our downloaded jdbcdriver(上传自己对应的版本)
    jdbc_driver_library=>"/config-dir/mysql-connector-java-5.1.46.jar"
    #the name of the driver class for mysql
    jdbc_driver_class=>"com.mysql.jdbc.Driver"
    #mysql jdbc connection string to our backup database
    jdbc_connection_string=>"jdbc:mysql://ip:3306/数据库?characterEncoding=UTF8"
    #the user we wish to excute our statement as
    jdbc_user=>"root"
    #password
    jdbc_password=>"****"

    jdbc_paging_enabled=>"true"
    jdbc_page_size=>"50000"
    #默认时区
    #jdbc_default_timezone => "Asia/Shanghai"
    #需同步的数据执行的SQL
    statement=>""select 需求字段 from 表""
    #需同步的数据执行的SQL文件路径
    #statement_filepath => "/usr/local/logstash/bin/logstash_jdbc_test/jdbc_oracle.sql"
    #定时字段各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
    schedule=>"* * * * *"
    #字段名使用大写还是小写,默认true,使用小写,如果改成false,则使用大写
    lowercase_column_names =>"false"
    #添加自定义字段
    add_field => { "[@metadata][type]" => "e-commerce" } 
  }
  jdbc{
    #the path to our downloaded jdbcdriver
    jdbc_driver_library=>"/config-dir/mysql-connector-java-5.1.46.jar"
    #the name of the driver class for mysql
    jdbc_driver_class=>"com.mysql.jdbc.Driver"
    #mysql jdbc connection string to our backup database
    jdbc_connection_string=>"jdbc:mysql://ip:3306/数据库?characterEncoding=UTF8"
    #the user we wish to excute our statement as
    jdbc_user=>"root"
    #password
    jdbc_password=>"****"

    jdbc_paging_enabled=>"true"
    jdbc_page_size=>"50000"
    #默认时区
    #jdbc_default_timezone => "Asia/Shanghai"
    #需同步的数据执行的SQL
    statement=>"select 需求字段 from 表"
    #需同步的数据执行的SQL文件路径
    #statement_filepath => "/usr/local/logstash/bin/logstash_jdbc_test/jdbc_oracle.sql"
    #定时字段各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
    schedule=>"* * * * *"
    #字段名使用大写还是小写,默认true,使用小写,如果改成false,则使用大写
    lowercase_column_names =>"false"
    #添加自定义字段
    add_field => { "[@metadata][type]" => "education" } 
  }
}
output{
	if [@metadata][type] == "e-commerce" {
		#将结果输出到es中
		elasticsearch{
			#ES IP地址与端口
			hosts=>"esip:9200"
			#ES索引名称(自己定义的)
			index=>"ec"
			#使用哪个字段的值作为_id编号,如果不指定,则_id的值随机生成
			document_id=>"%{id}"
			#文档类型
			document_type=>"product"
		}
	}else if [@metadata][type] == "education"{
		#将结果输出到es中
		elasticsearch{
			#ES IP地址与端口
			hosts=>"esip:9200"
			#ES索引名称(自己定义的)
			index=>"education"
			#使用哪个字段的值作为_id编号,如果不指定,则_id的值随机生成
			document_id=>"%{id}"
			#文档类型
			document_type=>"education"
		}
	}
}	

创建容器:

docker run -id -v /usr/logstash/config-dir:/config-dir logstash:5.6.11 -f /config-dir/logstash.conf

即可等待mysql数据同步到elasticsearch

踩坑:要先运行自己的搜索服务,或先部署运行这个服务的jar包,让pojo对应的索引和filed字段在elasticsearch创建好,然后再运行logstash,不然会报字段不对应的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值