在之前转载的一腾讯高级工程师《一文彻底了解Logstash》对logstach有这详细的介绍,这里我只说明一下,将mysql中的数据使用logstash导入到es中,如何操作,具体步骤见下方:
- 下载logstash
https://artifacts.elastic.co/downloads/logstash/logstash-7.3.2.zip - 解压的指定目录
- 在bin的同级目录中创建存放mysql驱动jar的文件夹mysql
- 拷贝mysql驱动jar包到3中的mysql文件夹中
- 在config或bin下创建配置文件logstash.conf【话虽这样说,不过我在config下并不成功】
- logstash.conf内容,详见配置文件
input {
# 多张表的同步只需要设置多个jdbc的模块就行了
jdbc {
# mysql 数据库链接,shop为数据库名
jdbc_connection_string => "jdbc:mysql://localhost:3306/spider?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC"
# 用户名和密码
jdbc_user => "root"
jdbc_password => "root"
# 驱动
jdbc_driver_library => "D:/es/logstash-7.3.2/mysql/mysql-connector-java-5.1.6-bin.jar"
# 驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_validate_connection => "true"
#是否分页
jdbc_paging_enabled => "true"
jdbc_page_size => "1000"
#时区
jdbc_default_timezone => "Asia/Shanghai"
#直接执行sql语句
statement => "select * from news where id >=:sql_last_value order by id asc"
# 执行的sql 文件路径+名称
# statement_filepath => "/hw/elasticsearch/logstash-6.2.4/bin/test.sql"
#设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
#每隔10分钟执行一次
#schedule => "*/10 * * * *"
#是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到last_run_metadata_path
record_last_run => true
#记录最新的同步的offset信息
last_run_metadata_path => "D:/es/logstash-7.3.2/logs/last_id.txt"
use_column_value => true
#递增字段的类型,numeric 表示数值类型, timestamp 表示时间戳类型
tracking_column_type => "numeric"
tracking_column => "id"
clean_run => false
# 索引类型
#type => "jdbc"
}
}
output {
elasticsearch {
#es的ip和端口
hosts => ["http://localhost:9200"]
#ES索引名称(自己定义的)
index => "spider"
#文档类型
document_type => "_doc"
#设置数据的id为数据库中的字段
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
- 启动logstash,进入bin文件夹下,执行:logstash -f logstash.conf