文档章节

[Logstash-input-jdbc] 使用详解

 张欢19933
发布于 2017/05/05 15:12
字数 867
阅读 667
收藏 1

1、logstash-input-jdbc 的同步原理是什么?
(1)、对于全量同步依据
配置文件jdbc.sql的sql语句的进行同步。
(2)、对于增量实时同步依据
1)设定的定时策略。
如最小更新间隔每分钟更新一次设定:schedule => “* * * * *”,目前最小更新间隔为1分钟,验证发现,不支持60s以内的秒级更新。
2)设定的sql语句。
如jdbc.sql, 决定同步哪些内容及同步更新的条件。

2、logstash-input-jdbc 只支持基于时间同步吗?
验证表名:同步更新除了支持根据时间同步外,还支持根据某自增列(如:自增ID)字段的变化进行同步。
上次举例只是举了同步时间变化的例子,设定条件:

[root@5b9dbaaa148a logstash_jdbc_test]# cat jdbc.sql_bak

select
        *
from
        cc
where   cc.modified_at > :sql_last_value

实际进一步研究发现,在配置文件中有use_column_value字段决定,是否需要记录某个column 的值,如果 record_last_run 为真,可以自定义我们需要 track 的 column 名称,此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.

举例:以下即是设定以id的变化作为同步条件的。

[root@5b9dbaaa148a logstash_jdbc_test]# cat jdbc_xm.sql
select
        *
from
        cc
where   cc.id >= :sql_last_value

我们可以指定文件,来记录上次执行到的 tracking_column 字段的值 比如上次数据库有 12 条记录,查询完后该文件中就会有数字 12 这样的记录,下次执行 SQL 查询可以从 13 条处开始.

我们只需要在 SQL 语句中 WHERE MY_ID > :last_sql_value 即可. 其中 :last_sql_value 取得就是该文件中的值(12).

last_run_metadata_path => “/etc/logstash/run_metadata.d/my_info”

[root@5b9 run_metadata.d]# cat /etc/logstash/run_metadata.d/my_info

--- 12

3、如何实现实时同步?

两个文件: 
jdbc.conf  
jdbc.sql 名字随便起啦。
一个 mysql 的java 驱动包  : mysql-connector-java-5.1.36-bin.jar

jdbc.conf 内容:
注意 statement_filepath => "jdbc.sql" 这个名字要跟下面的sql文件的名字对应上。

input {
  stdin {
  }
  jdbc {
  # mysql jdbc connection string to our backup databse  后面的test对应mysql中的test数据库
  jdbc_connection_string => "jdbc:mysql://192.168.1.1:3306/test"
  # the user we wish to excute our statement as
  jdbc_user => "root"
  jdbc_password => "******"
  # the path to our downloaded jdbc driver
  jdbc_driver_library => "/elasticsearch-jdbc-2.3.2.0/lib/mysql-connector-java-5.1.38.jar"
  # the name of the driver class for mysql
  jdbc_driver_class => "com.mysql.jdbc.Driver"
  jdbc_paging_enabled => "true"
  jdbc_page_size => "50000"
#以下对应着要执行的sql的绝对路径。
  statement_filepath => "/usr/local/logstash/bin/logstash_jdbc_test/jdbc.sql"
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
  schedule => "* * * * *"
#设定ES索引类型
  type => "cc_type"
  }
}

filter {
  json {
  source => "message"
  remove_field => ["message"]
  }
}

output {
  elasticsearch {
#ESIP地址与端口
  hosts => "192.168.1.1:9200"
#ES索引名称(自己定义的)
  index => "cc_index"
#自增ID编号
  document_id => "%{id}"
  }
  stdout {
#以JSON格式输出
  codec => json_lines
  }
}

参考 logstash-input-jdbc官方参考文档

jdbc.sql要执行的sql语句,选择哪些信息同步到ES中。

[root@5b9dbaaa148a logstash_jdbc_test]# cat jdbc.sql
select
  *
from cc
where cc.modified_at > :sql_last_value

cc.modified_at, 这个modified_at是我自己定义的更改时间字段,默认值default是now()当前时间。 
而 :sql_last_value如果input里面use_column_value => true, 即如果设置为true的话,可以是我们设定的字段的上一次的值。 
默认 use_column_value => false, 这样 :sql_last_value为上一次更新的最后时刻值。 
也就是说,对于新增的值,才会更新。这样就实现了增量更新的目的。

实操发现: logstash-input-jdbc 能较好的实现mysql的insert、update的操作的增量、全量数据同步更新到ES, 但delete操作的实时同步没有很好的解决方案。

© 著作权归作者所有

粉丝 47
博文 533
码字总数 244932
作品 0
海淀
私信 提问
加载中

评论(3)

张欢19933 博主

引用来自“fangshuyouqing”的评论

大牛很厉害啊,可是我是小白,可否指点一下logstash-input-jdbc是如何安装的呢?谢谢
我也是菜鸟,这个安装网上有http://blog.csdn.net/yeyuma/article/details/50240595#quote,你参考一下
f
fangshuyouqing
大牛很厉害啊,可是我是小白,可否指点一下logstash-input-jdbc是如何安装的呢?谢谢
f
fangshuyouqing
logstash-input-jdbc 怎么安装啊
ERROR: Installation aborted, verification failed for logstash-input-jdbc

./logstash-plugin install logstash-input-jdbc Validating logstash-input-jdbc Unable to download data from https://ruby.taobao.org - certificate verify failed (https://gems.ruby-......

cwftalus
2018/06/05
160
0
【elasticsearch】安装

安装java-1.8环境 下载tar包 解压 安装java 1.8 环境变量写入/etc/profile文件 启用配置使其生效 安装elasticsearch 安装elasticsearch,版本6.2.3.修改配置文件 修改配置项,使外部可以访问:...

落花时节又逢卿
2018/08/31
29
0
ES(elasticsearch)搜索引擎

ES(elasticsearch)搜索引擎 0、授人以渔,少走半年弯路! 死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招! 一、Elasitcsearch基础篇 1.1 Elasitcsearch基础认知 1、Elasticse...

Ocean_K
2018/09/11
1K
6
logstash 采集数据库数据

logstash 插件 配置文件 /etc/logstash/conf.d/sql.indexer.conf 参数说明 : jdbc mysql 驱动的路径,在上一步中已经下载 : 驱动类的名字,mysql 填 com.mysql.jdbc.Driver 就好了 : mysql ...

以谁为师
04/05
36
0
ElasticSearch Logstash数据采集工具---从mysql自动采集

Logstash是ES下的一款开源软件,它能够同时从多个来源采集数据、转换数据,然后将数据发送到Eleasticsearch中创建索引。 一、下载Logstash 注意下载的logstash版本最好要和你使用的ElasticSe...

edison_kwok
05/01
41
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
33分钟前
2
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
1
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
2
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
2
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部