之前准备当然是要先安装 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:首先下载和解压:

logstash 怎么把日志读到es中 logstash导出es数据_同步mysql数据到es

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 

logstash 怎么把日志读到es中 logstash导出es数据_logstash 怎么把日志读到es中_02

logstash 怎么把日志读到es中 logstash导出es数据_logStash_03

3: 在 logstash-7.7.0/config
  此路径下把logstash-sample.conf复制一份并命名为my-logstash.conf

cp logstash-sample.conf my-logstash.conf

logstash 怎么把日志读到es中 logstash导出es数据_ELK_04

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,所以只存储了一条就没法继续存储了。

成功如下:每分钟更新一次

logstash 怎么把日志读到es中 logstash导出es数据_logStash_05

logstash 怎么把日志读到es中 logstash导出es数据_mysql_06

 

 

遗憾的是,只能检测增加和修改,不能检测到删除

 

查询结果如下:

get mytest/_search
 {
   "query":{
     "match_all": {}
   },
   "sort":[{
     "id":"desc"
   }]
   
 }

logstash 怎么把日志读到es中 logstash导出es数据_mysql_07