ELK整理(Logstash)使用详解和问题解决

一、Logstash增量同步,使用自增ID或last_update_time字段去控制同步

注:使用ID的话是没办法同步更新的数据,所以建议使用last_update_time字段去做增量同步。

使用方式:

input {
  jdbc {
    jdbc_driver_library => "xxxxx.jar"
    #jdbc驱动类全类名
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    #jdbc连接url
    jdbc_connection_string => "xxxx"
    #数据库用户名
    jdbc_user => "root"
    #数据库密码
    jdbc_password => "xxxxxx"
    #数据同步时间(都是*则每一分钟同步一次)
    schedule => "* * * * *"
    #jdbc分页查询开启
    jdbc_paging_enabled => true
    #查询每页显示数据条数
    jdbc_page_size => 1000
	#直接执行sql,其中:sql_last_value 这个是固定写法
	statement =>"select * from xxxx where update_time>= :sql_last_value"
    #上次更新位置标记文件路径
    last_run_metadata_path => "D:/logstash-7.12.0/mysql/statement.txt"
    #每次启动是否清除上一项配置文件中数据
	clean_run => false
    #开启所有字段名转成小写
	lowercase_column_names => true
	#解决中文乱码问题
	codec => plain { charset => "UTF-8"}
    #是否记录上次运行的记录
	record_last_run => true
	#是否使用其他字段判断进行数据库同步
	use_column_value => true
	#数据库中的增量指标字段名
	tracking_column => "update_time"
    #此处配置必须填写
	tracking_column_type => "timestamp"
  }
}

二、Logstash同步mysql多数据表时到elasticsearch时数据错乱

问题:同步两个表A、B时(或两个以上),可能会出现数据错乱,如将A数据放到B索引里面。

解决:在input->jdbc中添加type,且在output中添加if判断,如

input {
        jdbc {
                jdbc_driver_library => "xxxxx"
                jdbc_driver_class => "com.mysql.jdbc.Driver"
                jdbc_connection_string => "xxxxxx"
                jdbc_user => "root"
                jdbc_password => "xxxx"
                schedule => "* * * * *"
                ....
                type => "test1" # 定义type
        }
}

output {
    if [type] == "test1" { # 判断 type
        elasticsearch {
                index => "A"
                document_id => "%{id}"
                user => "logstash"
                password => "xxxx"
        }
    }
}

你可能感兴趣的:(Cx后端精品专区,elk,学习,elasticsearch)