之前准备当然是要先安装 elasticsearch-7.7.0 kibana-7.7.0-linux-x86_64
MySQL与Elasticsearch 字段类型的对应
//首先需要创建索引和mapping
PUT /mytest
{
"mappings":{
"properties":{
"name":{
"type":"text"
},
"age":{
"type":"long"
}
}
}
}
1:首先下载和解压:
tar -zvxf logstash-7.7.0.tar.gz 进行解压
2:在 logstash-7.7.0/lib 路径下新创建jars文件夹.并且下载mysql-connector-java-8.0.15.jar
mkdir jars
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.15/mysql-connector-java-8.0.15.jar
mysql-connector-java-8.0.15.jar支持8.0 5.7 5.6版本的mysql
3: 在 logstash-7.7.0/config
此路径下把logstash-sample.conf复制一份并命名为my-logstash.conf
cp logstash-sample.conf my-logstash.conf
4: 设置my-logstash.conf 文件内容
vim my-logstash.conf
内容如下:
input {
jdbc {
type => "id"
#数据库连接信息
jdbc_connection_string => "jdbc:mysql://rdsiinfrfyqfa****.mysql.rds.aliyuncs.com:3306/ewj_market?&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true"
#设置时区
jdbc_default_timezone => "Asia/Shanghai"
#数据库用户名
jdbc_user => "to***er"
#数据库密码
jdbc_password => "Yo***650"
#数据库驱动路径
jdbc_driver_library => "./lib/jars/mysql-connector-java-8.0.15.jar"
#驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
#定时执行频率 每分钟
schedule => "* * * * *"
#使用字段追踪
#use_column_value => true
#追踪字段
#tracking_column => "updated_at"
#追踪字段类型
#tracking_column_type => "timestamp"
#是否记录上一次执行到的追踪字段的值
record_last_run => true
#上一次执行到的追踪字段的值存放路径 手动创建
last_run_metadata_path => "./logs/logstash_default_last_time.log"
#是否清除last_run_metadata_path记录,如果为true,每次都从头开始查询所有数据,增量更新设置为false
clean_run => false
#是否将字段强制转为小写
lowercase_column_names => false
#sql语句,可用 statement_filepath 参数代替,值为执行的sql文件,注意要查询追踪字段
statement => "SELECT * from mytest_user"
}
}
filter {
}
output {
if[type] == "id" {
elasticsearch {
#ES地址:端口
hosts => ["121.40.42.216:9200"]
#自定义索引
index => "mytest"
#设置自增主键ID
document_id => "%{id}"
#user => "elastic"
#password => "elasticCll"
}
}
stdout {
#以JSON格式输出
codec => json_lines
}
}
说明:
input中都是配置的一些数据库的一些内容
type=>一般都写成数据库中的主键
tracking_column=> 一般都是写表中的更新时间字段(注意这里是指mysql中的时间字段)像我这里就是写的updated_at字段,一般类型都是timestamp
output中都是配置es的内容
index => 表示将这个mysql表中的数据存储到es中的索引名称
document_id => 表示设置es中的_id的值,我这里直接取数据库中的主键id给它赋值
5:配置好,就可以启动了
./bin/logstash -f ./config/my-logstash.conf
如果启动logstash并没有一直处于运行,而是直接shut down了回到命令行这个表示启动失败,
可能是由于你.config文件中写的东西有误,或者是可能你写了些东西导致系统无法读取现有文件yml
如果启动logstash成功并没有直接shut down,查看es日志也没有报错,但是es中只存储有一条数据,这个可能是你的 document_id读取的字段有问题,可能它并不是唯一的,导致es读取了一个以后下一条读取的内容和之前一样无法继续赋值给_id,所以只存储了一条就没法继续存储了。
成功如下:每分钟更新一次
遗憾的是,只能检测增加和修改,不能检测到删除
查询结果如下:
get mytest/_search
{
"query":{
"match_all": {}
},
"sort":[{
"id":"desc"
}]
}