环境安装
从官网下载你要部署环境的相应安装包,这里以linux系统为例。
选择与你的ES相同版本的logstash的tar.gz包,上传解压,进入解压目录下测试下。
使用bin/logstash -e 'input { stdin { } } output { stdout {} }'
,启动后输入任意内容后,如果有返回则表示安装成功
使用logstash-input-jdbc插件
先使用bin/logstash-plugin list
查看下已安装好的插件一般5.X以后的版本都会默认安装好此插件。
下面罗列一下,要实现增量同步需要的东西,以orcal为例:
- orcal连接jar包
- 能搜索新增值的sql
我的sql: :sql_last_value是上次同步的最后值
select *
from drc_policy_publish p
where record_no > :sql_last_value
order by record_no
接下类创建一个启动的conf文件,vi conf/orcal.conf
,里面配置如下
input {
jdbc {
jdbc_connection_string => "jdbc:oracle:thin:@//ip:1521/orcl"
# 用户名和密码
jdbc_user => "user"
jdbc_password => "password"
# 驱动,准备的连接jar包位置
jdbc_driver_library => "/opt/elk/logstash-5.6.8/orcal/ojdbc-6.jar"
# 驱动类名
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
#配置一次同步的最大数量
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# 执行的sql 文件路径+名称
statement_filepath => "/opt/elk/logstash-5.6.8/orcal/sql/policy.sql"
# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
schedule => "* * * * *"
# 是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
record_last_run => "true"
# 是否需要记录某个column 的值,如果record_last_run为真,可以自定义我们需要 track 的 column 名称,此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.
use_column_value => "true"
# 如果 use_column_value 为真,需配置此参数. track 的数据库 column 名,该 column 必须是递增的. 一般是mysql主键
tracking_column => "record_no"
#用于保存上次同步的最后值,先新建,输入0比较好,不然是使用null去比较
last_run_metadata_path => "/opt/elk/logstash-5.6.8/orcal/last_id"
# 是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
clean_run => "false"
# 是否将 字段(column) 名称转小写
lowercase_column_names => "true"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
hosts => "ip:9200"
index => "orcal"
document_type => "drc_polic_publish"
# 将"_id"的值设为数据库主键
document_id => "%{record_no}"
}
}
如果你的表数据中没有递增的列,那也可以使用默认的timestamp 值,不过你需要将es中_id的值也设置成timestamp的值。如果让es自己来创建_id,则会一直插入数据,因为它无法判断哪些是新值。
在启动前,你需要先在ES中创建好索引的映射,不然就都要使用默认映射了。
接下来启动使用bin/logstash -f config/orcal.conf
命令启动,可以看到两次的搜索参数是不同的
可以看到数据已经放进去了
也可以去Discover,把主键字段排下序,查看最新的同步数据是什么
上述的启动方式,会占用命令行,如果验证好自己的配置没有问题后,可以修改schedule参数,比如schedule => “* 8 * * *”,每八小时同步一次,然后使用nohup命令后台运行logstash nohup bin/logstash -f conf/orcal.conf &