springboot整合elasticsearch2.0+logstach-干货满满实战篇-下
一 背景
承接上篇: springboot整合elasticsearch2.0+logstach-干货满满实战篇-上
此篇功能: 使用logstash将mysql大批量数据导入es
二 环境搭建
1 安装logstach
1、下载logstash-6.6.0安装包,下载路径:logstash-6.6.0,然后解压之es的同级目录(方便管理);或直接在服务器上下载:
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.tar.gz
2、将安装包上次到服务器,然后解压安装包,例如解压到:/usr/local/
tar –zxvf logstash-6.6.0.tar.gz
2 编写执行脚本
进入conf目录
mkdir app
创建同步文件脚本
touch logstash-mysql-es-testIndexl-app.conf
3 logstash-mysql-es-testIndexl-app.conf
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://test.****/appstore"
jdbc_user => "数据库用户名"
jdbc_password => "数据库密码"
# 将数据库驱动拷贝到此目录
jdbc_driver_library => "/usr/****/elk/logstash-5.2.2/mysql-connector-java-5.1.36.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000000"
# 查询语句
statement => "select id, name,name namePinyin from app "
# 设置监听间隔 各字段含义(从左至右)分、时、天、月、年,全为*默认含义为每分钟都更新
# "*/5 * * * *" 每五分钟同步一次
# 每天2点更新
# schedule => "0 0 2 1/1 *"
# 每天2:00 执行一次与北京时间相差-13时区
schedule => "0 13 * * *"
# 是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
clean_run => true
# 数据库查询出来的字段转小写,默认为true
lowercase_column_names => false
# es文档type
type => "app"
#索引设置时区
jdbc_default_timezone => "Asia/Shanghai"
}
}
# 过滤器
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
# es集群 : 集群必须填写数组
hosts => ["172.0.0.1:9201","172.0.0.1:9202" ]
# 索引名称
index => "testIndexl"
# 数据库id与es的id同步
document_id => "%{id}"
template_overwrite => true
#document_type => "contact"
# 先删除原纪录,再创建新纪录 默认是update
#action => "delete"
doc_as_upsert => true
}
# 这里输出调试,正式运行时可以注释掉
stdout {
# codec => json_lines
}
}
4 执行线程
1 进入服务器 172.0.0.1
2 进入地址: cd /usr/local/server/elk/logstash-5.2.2
3 查看logstash是否开启: ps -ef | grep logstash
可查看带有如下两个信息的进程 cd /usr/local/server/elk/logstash-5.2.2/conf/test
logstash-mysql-es-testIndel-app.conf
如果为开启执行下一步
4 执行如下两条指令(分开执行,两条进程),开启之后不要终止进程.
bin/logstash -f ./conf/appstoreserver/logstash-mysql-es-testIndel-app.conf
出现 Successfully started Logstash API endpoint 即可