记录logstash同步mysql数据库数据到ES

安装和ES版本相同的logstash,然后在bin的同级目录创建一个文件夹,名字自起:

此文件夹中主要存放需要同步的文件:

 以下是jdbc1101.conf文件的数据:

input {
    stdin {
    }
    jdbc {
      # mysql 数据库链接
      jdbc_connection_string => "jdbc:mysql://IP:端口/数据库?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8"
      #oracle数据库
      #jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
      #jdbc_connection_string => "jdbc:oracle:thin:@192.168.1.11:1521:orcl"
      # 用户名和密码
      jdbc_user => "用户"
      jdbc_password => "密码"
      # 驱动
      jdbc_driver_library => "G:\elasticsearch\logstash-7.8.0\mysql\mysql-connector-java-8.0.20.jar"
      # 驱动类名
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      # 执行的sql 就是上一步创建的sql文件的绝对路径+文件名字
      #statement_filepath => "G:\elasticsearch\logstash-7.8.0\mysql\data.sql"
      #由于没有自增ID,避免重复数据
      statement => "SELECT *, UNIX_TIMESTAMP(UPDATETIME) AS unix_ts_in_secs FROM gb_1101 where (UNIX_TIMESTAMP(UPDATETIME)) > :sql_last_value AND UPDATETIME < NOW() order by UPDATETIME asc"
      
      # 是否需要记录某个column 的值,如果record_last_run为真,可以自定义我们需要 track 的 column 名称,此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.
      use_column_value => true

      # 如果 use_column_value 为真,需配置此参数. track 的数据库 column 名,该 column 必须是递增的. 一般是mysql主键
      tracking_column => "unix_ts_in_secs"
	  record_last_run => true
     
      #:sql_last_value执行后存放点
      last_run_metadata_path => "G:\elasticsearch\logstash-7.8.0\mysql\mysql_last_num.txt"
      tracking_column_type => "numeric"
      # 设置监听间隔  各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
      # 索引类型
      type => "js_name"
    }
    
}


filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
    
}


output {
   if [type]=="js_name" {
    elasticsearch {
        # ES的IP地址及端口
        hosts => ["localhost:9200"]
        # 索引名称
        index => "index_name"
        # 自增ID id必须是待查询的数据表的序列字段;或主键字段
        #document_id => "%{id/主键}"
    }
   }
    
    stdout {
       # JSON格式输出
        codec => json_lines
    }
}

input中个别字段详解:

   # 数据库重连尝试次数
    connection_retry_attempts => "3"
    # 数据库连接可用校验超时时间,默认3600S
    jdbc_validation_timeout => "3600"
    # 开启分页查询(默认false不开启);
    jdbc_paging_enabled => "true"
    # 单次分页查询条数(默认100000,若字段较多且更新频率较高,建议调低此值);
    jdbc_page_size => "500"
    # 如果sql较复杂,建议配通过statement_filepath配置sql文件的存放路径;
    statement_filepath => "/home/logstash-7.8.1/addStudent.sql"
    # 需要记录查询结果某字段的值时,此字段为true,否则默认tracking_column为timestamp的值;
    use_column_value => true
    # 是否将字段名转换为小写,默认true(如果有数据序列化、反序列化需求,建议改为false);
    lowercase_column_names => false
    # 需要记录的字段,用于增量同步,需是数据库字段
    tracking_column => sid
    # Value can be any of: numeric,timestamp,Default value is "numeric"
    tracking_column_type => numeric
    # record_last_run上次数据存放位置;
    record_last_run => true
    #上一个sql_last_value值的存放文件路径, 必须要在文件中指定字段的初始值
    last_run_metadata_path => "/home/logstash-7.8.1/config/station_parameter.txt"
    # 是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false;true则每次都从头开始查询所有的数据库记录,默认false
    clean_run => false

详细配置详见:https://www.jianshu.com/p/d127c3799ad1

进入bin文件夹下,执行同步:

logstash -f ../mysql/jdbc1101.conf

ps:摸着石头过河,走了不少弯路,由于需要同步的表中没有自增ID,所以找了很多栗子,经过多次测试,还是解决了重复数据的问题,详情见input中的片段,如果不是自增ID,把document_id注掉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值