Logstash起步增量更新(无需全量更新)配置 大赏

正好最近公司用ELK就琢磨了一些,也不算很全但是大概差不多使用的就这些
logstash是这样的和es kibana的配置文件不太一样,你需要自己创建
下载地址https://www.elastic.co/cn/downloads/past-releases#logstash
选择对应es的版本
解压后我们在bin目录创建文件mysql.conf (名字随便起)
下面是配置增量更新的内容-----------不过还是先要看下es和mysql的数据
主要在updateTime上mysql数据类型推荐时间dateTime类型增加精准度
因为增量更新是会保存这个数据,如果是date类型除非你数据一天更新一次
而实时更新的话就要再精准一点
在这里插入图片描述
在这里插入图片描述

我知道我很____不要说我

input {
    jdbc {
         #数据库驱动路径(linux写法:/home/mysql/mysql-connector-java-5.1.38.jar)
        jdbc_driver_library => "D:\Program Files\logstash-6.3.1\mysql-connector-java-5.1.38.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        #数据库连接相关配置()
        jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
        jdbc_user => "root"
        jdbc_password => ""
        #任务计划,多久执行一次,在此每分钟执行一次(每分钟开始,和cron位不一样"*/5 * * * *")
        schedule =>"* * * * *"
        #启用追踪,则需要指定tracking_column,默认是timestamp()
        use_column_value => true
        #指定追踪的字段,在此我设置的追踪的字段为updateTime(这个是es的对应字段不是sql)
        tracking_column => "updateTime"
        #追踪字段的类型,目前只有数字(numeric)和时间类型(timestamp),默认是数字类型()
        tracking_column_type => "timestamp"
        #是否将字段名称转小写,当字段已经为小写时,不用此项()
        lowercase_column_names => false
        #记录最后一次运行的结果()
        record_last_run => true
        #上面运行结果的保存位置(新建个文件,会把上次sql_last_value记录下来,也就是更新时间)
        last_run_metadata_path => "D:\Program Files\logstash-6.3.1\bin\jdbc-position.txt"
        #执行的语句,也可以通过statement_filepath指定sql的文件()
        #注意执行语句后的()where update_time>:sql_last_value
        #判断是否更新的主要环节会记录上次运行的时间并且下次执行时大于存储记录的时间则对mysql中该行读取进行更新()
        #对于设置id也就是数值型做更新字段的话并不适用于增量更新的逻辑尽量不去使用()
        statement => "SELECT id,name,update_time as updateTime FROM testdb where update_time >:sql_last_value"
        #我们设置的字段看下es mapping的说明()
        #使用sql文件来读取
        #statement_filepath => "/data/test.sql"
        #如果配置多个数据源需要用type来区分
        type => "testdb"
    }
}
#这部分我也不会()
filter {
}
output {
    #使用if语句判断type来指定输出的块()
    if[type]=="testdb"{
   		  #es输出块(当然logstach还有其他的输出)
		  elasticsearch{
		      #ES的ip地址和端口(也可以写成["",""]多个)
		      hosts => "http://localhost:9200"
		      #ES索引库名称()
		      index => "testdb"
		      #ES主键()
		      document_id => "%{id}"
		      #ESType()
		      document_type => "testdb"
		   }
    }    
    stdout {
        # JSON格式输出()
        codec => json_lines
    }
}

逻辑是这样的当我们mysql数据改变时一定要更新update_time字段,
而在logstach增量更新初始化时会记录时间1,
第二次跑时数据库时间变化则更新这条数据到es
在这里插入图片描述

##win 运行
进入bin目录

在这里插入图片描述
执行 .\logstash.bat -f .\mysql.conf

linux

bin目录下 nohup ./logstash -f sqlcslz-lin.conf &

查看进程 ps aux | grep logstach

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值