logstash、elasticsearch、kibana安装略,这里用的版本为6.5.1:
# 安装jdbc插件 logstash5.X已经集成此插件
[root@localhost ~]# cd /usr/share/logstash/bin
# 查看是否安装jdbc插件
[root@localhost bin]# ./logstash-plugin list | grep jdbc
# 安装jdbc插件
[root@localhost bin]# ./logstash-plugin install logstash-input-jdbc
# 配置logstash,mysql数据同步到elasticsearch
1、创建logstash配置文件 mysql-sync-es.conf :
input { stdin { } jdbc { jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test" jdbc_user => "root" jdbc_password => "root" # 这里需要设置正确的mysql-connector-java jar包路径,从 https://search.maven.org/search?q=mysql-connector 可以下载 jdbc_driver_library => "/etc/logstash/mysql-connector-java-8.0.13.jar" jdbc_default_timezone =>"Asia/Shanghai" # the name of the driver class for mysql jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" # 最多取50000条更新的数据 jdbc_page_size => "50000" # 以下对应着要执行的sql的绝对路径 statement_filepath => "/etc/logstash/sql.sql" # 记录上一次运行的时间,用于sql中where条件过滤出新数据。 last_run_metadata_path => "/root/dockermount/last_value" # 定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新 schedule => "* * * * *" # 设定ES索引类型 type => "doc" } } output { elasticsearch { # ES IP地址与端口 hosts => "192.168.10.17:9200" # ES索引名称(自己定义的) index => "user" # 唯一列名,保证更新后的mysql数据同步到es时,es中不会出现重复数据,类似mysql中更新数据的where条件。 document_id => "%{id}" } stdout { # 以JSON格式输出到控制台 codec => json_lines } }
2、sql脚本,注意sql不能以分号结束:
SELECT * FROM `user` where `time` >= :sql_last_value
其中:sql_last_value的值就对应last_run_metadata_path => “/root/dockermount/last_value”这个参数的值。
3、最后启动logstash测试:
/usr/share/logstash/bin/logstash -f mysql-sync-es.conf
去kibana中添加user索引就可以查看同步过来的数据了。
测试结果:
logstash每分钟会执行一次sql脚本中的语句,其次logstash会计算下更新的数据条数是否超过配置文件中定义的值。
数据同步及数据更新功能测试通过。
参考过的资料:
http://hi.ktsee.com/697.html
https://blog.csdn.net/laoyang360/article/details/51747266
https://blog.csdn.net/laoyang360/article/details/51793301
https://blog.csdn.net/opera95/article/details/78553743
https://wenchao.ren/archives/393 # 数据重复问题 主键解决
原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/4232.html