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

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,不然会报字段不对应的错误。

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页