使用7.4以上版本logstash将mysql中的数据同步到es,遇到种种坑,启动logstash直接shutdown,或者启动了es只有一条数据等等

为什么要这样同步到es查es而不直接去查mysql呢????其实原因很简单,就是为了减少mysql的压力,比如说我现在业务需要查一个看课历史,这个看课历史总是导致慢sql或者同一时间总是调用很多,导致mysql的cpu总是很高,这个时候就可以使用logstash将数据同步到es中,直接从es中查数据

废话不多说开始配置
1.首先使用以下命令安装logstash
brew install logstash

2.看网上有很多教程要下载安装logstash-input-jdbc,好像7.0.0版本以上的logstash都好像自带了这个,所以无需下载

3.进入安装目录配置logstash

/usr/local/Cellar/logstash/7.6.1/libexec/config

4.打开文件logstash-sample.conf

vim logstash-sample.conf

内容如图
在这里插入图片描述
5.我们将这个文件复制一份然后修改他

cp logstash-sample.conf  my-logstash.conf 
vim my-logstash.conf 

6.my-logstash.conf 的内容为下

input {
    jdbc {
        type => "id"
 
        #数据库连接信息
        jdbc_connection_string => "jdbc:mysql://www.xintujing.cn:33061/xtj_edu?&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true"
        
        #设置时区
        jdbc_default_timezone => "Asia/Shanghai"
 
        #数据库用户名
        jdbc_user => "root"

        #数据库密码
        jdbc_password => "qidaoyun1686806800@qdy"
 
        #数据库驱动路径
        jdbc_driver_library => "/Users/luziyuan/.m2/repository/mysql/mysql-connector-java/8.0.15/mysql-connector-java-8.0.15.jar"
 
        #驱动类名
        jdbc_driver_class => "com.mysql.jdbc.Driver"
           
        #定时执行频率 每分钟
        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 course_house"
    }
}
 
filter {
 
}
 
output {
    if[type] == "id" {
        elasticsearch {
            #ES地址:端口
            hosts => ["127.0.0.1:9200"]
        
            #自定义索引
            index => "house"
 
            #设置自增主键ID
            document_id => "%{id}"
                #user => "elastic"
    			#password => "changeme"
        }
    }
    stdout {
        #以JSON格式输出
        codec => json_lines
    }
}
 

说明:
input中都是配置的一些数据库的一些内容
type=>一般都写成数据库中的主键
tracking_column=> 一般都是写表中的更新时间字段(注意这里是指mysql中的时间字段)像我这里就是写的updated_at字段,一般类型都是timestamp

output中都是配置es的内容
index => 表示将这个mysql表中的数据存储到es中的索引名称
document_id => 表示设置es中的_id的值,我这里直接取数据库中的主键id给它赋值

7.配置好如上以后就可以启动了

./bin/logstash -f ./libexec/config/my-logstash.conf 

如果启动logstash并没有一直处于运行,而是直接shut down了回到命令行这个表示启动失败,
可能是由于你.config文件中写的东西有误,或者是可能你写了些东西导致系统无法读取现有文件yml

如果启动logstash成功并没有直接shut down,查看es日志也没有报错,但是es中只存储有一条数据,这个可能是你的 document_id读取的字段有问题,可能它并不是唯一的,导致es读取了一个以后下一条读取的内容和之前一样无法继续赋值给_id,所以只存储了一条就没法继续存储了。

猜你喜欢

转载自blog.csdn.net/qq_42584411/article/details/105297018
今日推荐