一、安装
1)下载地址:https://www.elastic.co/cn/downloads/past-releases#logstash
2)此次说明版本为:logstash-6.5.4
二、运行
1)运行一个单个脚本文件:
cd ../deploy/logstash-6.5.4/bin/
./logstash -f ../conf-test/tb_person.conf
2)运行多个脚本文件:
cd ../deploy/logstash-6.5.4/bin/
./logstash -f ../conf-test/
3)后台运行:
cd ../deploy/logstash-6.5.4/bin/
nohup ./logstash -f ../conf-test/ &
三、使用
1)目录介绍
a. config: 存放配置文件,暂时不用修改
b. conf-pro 和 conf-test 为自己新建目录,分别存放正式环境脚本文件和测试环境脚本 文件,脚本文件唯一不同的地方就是数据库连接不同,脚本文件详细说明,见第四点。
c. data存放数据文件,暂时不用修改,当提示“ Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the “path.data” setting.”,此时进入data文件执行 rm -f .lock
d. logs文件夹存放日志文件
e. metadatapath和metadatpro文件夹为自己新建文件夹,分别存放数据库最后记录的字段值,如果是以时间作为条件就是最后一条的时间,如果是以id作为条件,同理存放的就是最大的id
f. mysql文件夹为存放SQL脚本文件,和在项目里面写的脚本文件相同,唯一多的变量
“updatetime > :sql_last_value”,sql_last_value就是“metadatapath”中记录的值。
2)conf-pro 内脚本文件说明
input {
stdin {}
jdbc {
# 多表同步时,表类型区分,建议命名为“库名_表名”,每个jdbc模块需对应一个type;
type => "tb_person"
# 数据库连接地址
jdbc_connection_string => "数据库连接"
# 数据库连接账号密码;
jdbc_user => "用户名"
jdbc_password => "密码"
# oracle依赖包路径;
jdbc_driver_library => "../mysql/ojdbc6-11.2.0.3.jar"
# the name of the driver class for oracle
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
# 数据库重连尝试次数
connection_retry_attempts => "3"
# 判断数据库连接是否可用,默认false不开启
jdbc_validate_connection => "true"
# 数据库连接可用校验超时时间,默认3600S
jdbc_validation_timeout => "3600"
# 开启分页查询(默认false不开启);
jdbc_paging_enabled => "true"
# 单次分页查询条数(默认100000,若字段较多且更新频率较高,建议调低此值);
jdbc_page_size => "1000"
# statement为查询数据sql,如果sql较复杂,建议配通过statement_filepath配置sql文件的存放路径;
# sql_last_value为内置的变量,存放上次查询结果中最后一条数据tracking_column的值,此处即为updatetime;
statement_filepath => "../mysql/tb_person.sql"
# 是否将字段名转换为小写,默认true(如果有数据序列化、反序列化需求,建议改为false);
lowercase_column_names => true
# Value can be any of: fatal,error,warn,info,debug,默认info;
sql_log_level => warn
#
# 是否记录上次执行结果,true表示会将上次执行结果的tracking_column字段的值保存到last_run_metadata_path指定的文件中;
record_last_run => true
# 需要记录查询结果某字段的值时,此字段为true,否则默认tracking_column为timestamp的值;
use_column_value => true
# 需要记录的字段,用于增量同步,需是数据库字段
tracking_column => "updatetime"
# Value can be any of: numeric,timestamp,Default value is "numeric"
tracking_column_type => timestamp
# record_last_run上次数据存放位置;
last_run_metadata_path => "../metadatapath-pro/tb_person.txt"
# 是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false;
clean_run => false
#
# 同步频率(分 时 天 月 年),默认每分钟同步一次;
schedule => "*/10 * * * * *"
}
}
output {
if [type] == "tb_person" {
elasticsearch {
hosts => ["localhost:9200"]
index => "tb_person"
document_id => "%{id}"
}
}
}
上面标注了准确的注释,这里强调下注意的点,当数据库字段里面有“type”字段的时候,一定要注意,此时的type与脚本最上面那个type是有冲突的,此时要给数据库脚本中的type重命名。这是我遇到的一个坑。。。需要同步多少个表,复制多少个脚本即可。