Logstash配置多张表和多个数据源

配置多个数据源和不同的表访问多个配置
解决问题: 数据已经导入完成 logstash还一直循环导入数据(定时器设置时间有点短 )
同步数据两种方案:方案一 每一次同步都是从头同步的
1.clean_run =>true就好了
2.schedule => “* * * * " (根据你的业务需求看定多长时间比较合适) 要是想使用每分钟执行一次 schedule => "/1 * * * *” 表示每分钟执行一次
schedule => “1 * * * *” 表示每小时的第一分钟执行一次
Logstash配置多张表和多个数据源_第1张图片
方案一配置完成了 .sql文件不需要添加WHERE goods_id(tracking_column里面的列) > :sql_last_value

方案二 下面这种方式 (从上次导入的数据开始重新导入新的数据)但是有一个弊端就是 已经导入的数据不重新导入 如果数据库删除一部分已经导入过的数据的时候就会导致数据库中的数据和es中的数据不相同了
Logstash配置多张表和多个数据源_第2张图片
注意:要想配置从上次同步数据向后导入数据需要注意几点
1.clean_run => false(一定要是false)
2.use_column_value => true(表示使用数据库中的列作为标志)
3.tracking_column => 数据库中增量的列名 (数据库中的列 例如id 或者时间的列)
4. record_last_run => true(是否要记录上次导入数据的增量的数据)
5.last_run_metadata_path => “自己创建一个文件的地址” (作用使用来存储上次导入数据的位置)
jdbc.sql文件中需要添加 WHERE goods_id(tracking_column里面的列) > :sql_last_value
SELECT * from tb_goods WHERE goods_id > :sql_last_value

input {
    stdin {
    
    }
   jdbc{
   type => "tb_goodstest01"
    #jdbc sql server 驱动
    jdbc_driver_library => "D:/es/logstash-6.2.2/bin/bin/sqljdbc4-4.0.jar"
    #jdbc class 不同数据库有不同的 class 配置
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    #配置数据库连接 ip 和端口,以及数据库    
    jdbc_connection_string => "jdbc:sqlserver://127.0.0.1:1433;databaseName=test01"
    #配置数据库用户名
    jdbc_user => "sa"
    #配置数据库密码
    jdbc_password => "123456"
    
    # 定时器 多久执行一次SQL,默认是一分钟
    # schedule => 分 时 天 月 年  
    # schedule => * 22  *  *  * 表示每天22点执行一次

    schedule => "* * * * *"
    #是否清除 last_run_metadata_path 的记录,如果为true那么每次都相当于从头开始查询所有的数据库记录
    clean_run => false
    #是否需要记录某个column 的值,如果 record_last_run 为真,可以自定义我们需要表的字段名称,
    #此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.
    use_column_value => true
    #如果 use_column_value 为真,需配置此参数. 这个参数就是数据库给出的一个字段名称。当然该字段必须是递增的 可以是id 或者时间列(作用这个就是做为一个标识当下次执行同步操作的时候 根据这个列中的数据查起 )
    tracking_column =>  goods_id
    #是否记录上次执行同步操作数据结果 true表示记录上次操作到的位置  就是将tracking_column 中的数据写入到last_run_metadata_path 文件中
    record_last_run => true
    #这个文件需要自己创建出来 作用就是记录tracking_column(数据库中自增的列) 作为一个标识 下次执行同步数据库的操作的时候直接从这个标识查起  名字无所谓什么都是可以的
    last_run_metadata_path => "D:\es\logstash-6.2.2\bin\tb_goodstest01.txt"
    #是否将字段名称转小写。
    #这里有个小的提示,如果你这前就处理过一次数据,并且在Kibana中有对应的搜索需求的话,还是改为true,
    #因为默认是true,并且Kibana是大小写区分的。准确的说应该是ES大小写区分
    lowercase_column_names => false
    #你的SQL文件的位置,当然,你的SQL也可以直接写在这里。
    statement_filepath => "jdbc.sql"
    
    }
   jdbc{
    type => "tb_usertest02"

    jdbc_driver_library => "D:/es/logstash-6.2.2/bin/bin/sqljdbc4-4.0.jar"

    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"

    jdbc_connection_string => "jdbc:sqlserver://127.0.0.1:1433;databaseName=test02"

    jdbc_user => "sa"

    jdbc_password => "123456"
    

    schedule => "* * * * *"

    clean_run => true

    use_column_value => true

    tracking_column =>  userid

    record_last_run => true
 
    last_run_metadata_path => "D:\es\logstash-6.2.2\bin\tb_usertest02.txt"
   
    lowercase_column_names => false
   
    statement_filepath => "jbdctest02.sql"

    }
    
}
#在数据库导入到es中的数据的时候 es会自动创建出一些字段就是下面的这几个字段  要是不想要这几个字段就添加过滤器
filter { 
         mutate { 
             remove_field => ["@timestamp","@version","create_time","update_time"]
         }
    }

output {
 if[type]=="tb_goodstest01"{
    elasticsearch {
        # ES的IP地址及端口
        hosts => ["127.0.0.1:9200"]
        # 索引名称 可自定义
        index => "tb_goods_test01x"
        # 需要关联的数据库中有有一个id字段,对应类型中的id
        document_id => "%{goods_id}"
         "document_type" => "%{type}"

      }
    }
if[type]=="tb_usertest02"{
    elasticsearch {
      
        hosts => ["127.0.0.1:9200"]
     
        index => "tb_goods_test02x"
      
        document_id => "%{userid}"
         "document_type" => "%{type}"
         
      }
    }
    stdout {
        # JSON格式输出
        codec => json_lines
    }
}

要是想配置一个库一个表的话就删除一个jdbc{ }
和if 这一层好了

 elasticsearch {
        hosts => ["127.0.0.1:9200"]
        index => "tb_goods_test02x"
        document_id => "%{userid}"
        "document_type" => "%{type}"
      }

大家有想互相分享工作经验的,或者了解更多的,可以加群,一起进步
Logstash配置多张表和多个数据源_第3张图片

你可能感兴趣的:(Logstash配置多张表和多个数据源)