环境
版本:5.5.3
安装elasticsearch
elasticsearch运行需要jdk1.8,因此需先安装jdk
官网下载elasticsearch压缩包,解压到指定目录,使用默认的配置就好,
windows启动点击bin目录下的elasticsearch.bat文件。
安装kibana
官网下载安装包,解压到指定目录,修改kibana.yml配置文件
elasticsearch.url: “http://localhost:9200”
连接到elasticsearch
安装logstash
官网下载logstash压缩包,解压到指定目录。
Windows启动点击bin目录下的logstash.bat文件
安装logstash插件logstash-input-jdbc
修改logstash的Gemfile文件,
source “https://rubygems.org” 改为 source “http://rubygems.org”,去掉s 运行cmd,转到logstash解压后的bin目录,
运行命令 : logstash-plugin.bat install logstash-input-jdbc
等待安装完成
logstash-input-jdbc 插件配置文件:
在logstash的config目录新建MySQL文件夹,并添加如下文件
如上图所示,
mysql-connector-java-5.1.47.jar 是必须的,书写配置文件时需要用到该jar
logstash-mysql.config 文件为全量同步配置文件,内容如下:
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/demo"
jdbc_user => "****"
jdbc_password => "****"
jdbc_driver_library => "C:/software/logstash-5.5.3/config/MySQL/mysql-connector-java-5.1.47.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement => "select * from user"
schedule => "* * * * *"
type => "user"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "user"
document_id => "%{user_id}"
}
stdout {
codec => json_lines
}
}
在启动logstash时使用该配置文件启动命令如下:
logstash.bat -f C:\software\logstash-5.5.3\config\MySQL\logstash-mysql.config
该配置文件通常用于第一次初始化数据使用。
inr-logstash-mysql.config 配置文件为增量同步,内容如下:
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/demo"
jdbc_user => "root"
jdbc_password => "admin"
jdbc_driver_library => "C:/software/logstash-5.5.3/config/MySQL/mysql-connector-java-5.1.47.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
use_column_value => true
#追踪的字段
tracking_column => user_id
record_last_run => true
#上一个sql_last_value值的存放文件路径, 必须要在文件中指定字段的初始值
last_run_metadata_path => "C:\software\logstash-5.5.3\config\MySQL\user-inc-last-run-metadata.txt"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement => "select * from user"
schedule => "* * * * *"
type => "user"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "user"
document_id => "%{user_id}"
}
stdout {
codec => json_lines
}
}
user-inc-last-run-metadata.txt 文件为存放配置的user_id的最新值,创建该文件时给一个初始值,如:
--- 0
参数解读:
//是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
record_last_run => true
//是否需要记录某个column 的值,如果 record_last_run 为真,可以自定义我们需要 track 的 column 名称,此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.
use_column_value => true
//如果 use_column_value 为真,需配置此参数. track 的数据库 column 名,该 column 必须是递增的.比如:ID.
tracking_column => MY_ID
//指定文件,来记录上次执行到的 tracking_column 字段的值
//比如上次数据库有 10000 条记录,查询完后该文件中就会有数字 10000 这样的记录,下次执行 SQL 查询可以从 10001 条处开始.
//我们只需要在 SQL 语句中 WHERE MY_ID > :last_sql_value 即可. 其中 :last_sql_value 取得就是该文件中的值(10000).
last_run_metadata_path => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\station_parameter.txt"
//是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
clean_run => false
//是否将 column 名称转小写
lowercase_column_names => false
//存放需要执行的 SQL 语句的文件位置
statement_filepath => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\jdbc.sql"