利用Logstash插件进行Elasticsearch与Mysql的数据

Logstash与Elasticsearch的安装就不多说了,我之前有两篇文章写的比较详细了ElasticSearch + Logstash + Kibana 搭建笔记Filebeat+Logstash+ElasticSearch+Kibana搭建Apache访问日志解析平台

Mysql Connector没有包含在ELK的包中,需要自己下载

配置文件

最主要的配置文件是 Logstash 的配置,我们命名为 mysql.conf 样例如下

input {
    stdin {

    }
    jdbc {
        # 数据库地址  端口  数据库名
        jdbc_connection_string => "jdbc:mysql://localhost:3306/shen"
        # 数据库用户名
        jdbc_user => "root"
        # 数据库密码
        jdbc_password => "rootroot"
        # mysql java驱动地址
        jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-5.1.43-bin.jar"
        # 驱动类的名称
        jdbc_driver_class => "com.mysql.jdbc.Driver"

        jdbc_paging_enabled => "true"

        jdbc_page_size => "50000"
        statement => "SELECT * FROM TABLE"
        # sql 语句文件,对于复杂的查询,可以放在文件中。
        # statement_filepath => "filename.sql"
        # 设置监听间隔,语法与Linux系统Cron相同
        schedule => "* * * * *"
    }
}
output {
     stdout {
        codec => json_lines
    }
   elasticsearch {
        hosts  => "localhost:9200"
        index => "contacts"
     document_type => "contact"
        document_id => "%{id}"
    }
}

进行数据同步

进行数据同步只需要将 Logstash 启动,并且通过-f参数指定我们创建的 mysql.conf 配置文件即可,可以通过终端中输出的信息查看同步是否成功。

./bin/logstash -f mysql.conf

本例是对一个数据库表进行同步,如果需要同步多个表的数据,可以创建多个配置文件,也可以在一个配置文件中指定多个 jdbc input。配置中的所有项目都必须重新复制一遍。

增量更新

这个例子中的SQL执行的全量更新,如果需要进行增量更新,就需要对SQL进行一些修改。

input {
    stdin {

    }
    jdbc {
        # 数据库地址  端口  数据库名
        jdbc_connection_string => "jdbc:mysql://localhost:3306/shen"
        # 数据库用户名
        jdbc_user => "root"
        # 数据库密码
        jdbc_password => "rootroot"
        # mysql java驱动地址
        jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-5.1.43-bin.jar"
        # 驱动类的名称
        jdbc_driver_class => "com.mysql.jdbc.Driver"

        jdbc_paging_enabled => "true"
        jdbc_page_size => "50000"

        #是否记录上次运行的结果
        record_last_run => true
        #记录上次运行结果的文件位置
        last_run_metadata_path => ""
        #是否使用数据库某一列的值,
        use_column_value => true
        tracking_column => "id"
        #numeric或者timestamp
        tracking_column_type => "numeric"

        #如果为true则会清除 last_run_metadata_path 的记录,即重新开始同步数据
        clean_run => false

        #sql_last_value根据tracking类型,默认为0或者1970-1-1
        statement => "SELECT * FROM TABLE WHERE id > :last_sql_value"
        # sql 语句文件,对于复杂的查询,可以放在文件中。
        # statement_filepath => "filename.sql"
        # 设置监听间隔,语法与Linux系统Cron相同
        schedule => "* * * * *"
    }
}
output {
     stdout {
        codec => json_lines
    }
   elasticsearch {
        hosts  => "localhost:9200"
        index => "contacts"
     document_type => "contact"
        document_id => "%{id}"
    }
}

增量更新会忽略对历史数据的更新,如果业务中历史数据经常发生变化,则可以通过全量更新的方法。

重要参数说明

参数 类型 说明
clean_run boolean
jdbc_connection_string string
jdbc_driver_class string
jdbc_user string
jdbc_fetch_size number
jdbc_page_size number 默认值100000
jdbc_paging_enabled boolean
sequel_opts hash 可以传入到SQL中的参数

本文配置在 ELK 6.0 beta 环境下测试通过。

本文为作者原创,未经允许不得转载。如果您觉得本文对您有帮助,请随意打赏,您的支持将鼓励我继续创作。

参考资料:
1、Mysql Connector
2、ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步
3、logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
4、logstash input jdbc连接数据库
5、JDBC Plugin

时间: 2024-08-01 03:08:54

利用Logstash插件进行Elasticsearch与Mysql的数据的相关文章

利用Highcharts插件制作动态图表

原文:利用Highcharts插件制作动态图表 向大家推荐一款js插件,用于绘制图表Highcharts,具体操作可参考官方网站:http://www.hcharts.cn/ 1.如下为本人制作的图形效果如下,当然其效果远不止这些,大家还可以深入研究!     2.下面我来讲解下是如何制作的 首先需要下载并引入 highcharts.js 文件  <script src="../../Scripts/highcharts.js" type="text/javascrip

Linux集群和自动化维1.5.2 利用tuning-primer脚本来调优MySQL数据库

1.5.2 利用tuning-primer脚本来调优MySQL数据库 MySQL在线上稳定运行一段时间后,就可以调用MySQL调优脚本tuning-primer.sh来检查参数的设置是否合理,该脚本的下载地址为: http://www.day32.com/MySQL/tuning-primer.sh. 该脚本使用"SHOW STATUS LIKE-"和"SHOW VARIABLES LIKE-"命令获得MySQL的相关变量和运行状态.然后根据推荐的调优参数对当前的M

开发kettle插件,可以找到Mysql数据库中的表,但无法将数据插入。

问题描述 开发kettle插件,可以找到Mysql数据库中的表,但无法将数据插入. 在kettle二次开发时基于java,已经可以找到表中的各个列名,在运行转换时无法将数据插入. 解决方案 http://blog.csdn.net/feng19821209/article/details/8257648

VUEJS实战之利用laypage插件实现分页(3)_javascript技巧

前言 在上两章的工作中,我们顺利的实现了首页的渲染,但是,只是渲染了一页数据而已.我们可能需要渲染更多的数据,这时候,我们就有必要考虑分页了. 分页有很多种方式,比如异步加载的分页方式.然而对于没有太多使用前端模版框架的朋友来说,一上来就使用这种方式,可能稍微有点难度.因此,我们这章的分页实现,是基于普通的链接分页的方式完成的. 在我们有了更多的前端框架的使用经验之后,我们可以使用更加丰富的分页方法. 事实上,我们自己构建一个分页组件也不是不可以,在移动端我都是自己的代码实现的.但是,我这里要推

利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)_jquery

  <body> <div class="container demo"> <div class="big"> <p class="instructions">大图预览</p> <div class="bigframe"> <img width="300" height="300" src="imag

mysql的数据修改后实时更新到elasticsearch的问题

问题描述 mysql的数据修改后实时更新到elasticsearch的问题 最近在研究elasticsearch,mysql中新增和修改的数据已经能够自动的同步到elasticsearch中了,但是删除的数据无法自动的从elasticsearch中删除,请问各位大神改怎么做才行? 解决方案 我们放弃使用river基于canal(mysql增量订阅组件)开发同步服务,几乎达到实时同步哦

利用jQuery插件imgAreaSelect实现获得选择域的图像信息_jquery

还是先来分析一下: (以下的值,如何获得,以后在具体的实现中再来分析,现在只谈宏观的) 如何获得选择域的图像信息?  其实就是要我们如何获得这个选择区域,在图像中的那个位置,并且这个区域的大小是多少? 把位置和大小告诉了计算机,它就知道我们是要获取那一块的图像信息了. (我们的选择区域,是在一个平面当中,而且是一个规则的图形,正方形,或都矩形(通俗:长方形)) 大小: 这个区域的宽度,高度值,两值相乘,就是这个区域的面积,即大小.(这个应该不难) 位置: 1.假设我们只告诉计算机,这个选择区域一

PSD转HTML实例教程——利用JQuery插件实现图片滑动效果

之前一段时间,翻译了一些国外的PS网页设计教程,这些教程中都有一些共性,例如包含网页LOGO.导航菜单栏.图片滑动栏.版权信息等.其中在多个教程中都提到了利用JQuery插件实现图片滑动栏.于是在网上搜索了一番,发现类似的插件千千万万,都有各自的特色.故本教程挑选了其中的一个插件,进行讲解,并在后面结合实例讲解如何在PS中切片,在导出的网页中完成图片滑动栏栏的制作.   插件网址:http://slidesjs.com/ 插件示例网址:http://slidesjs.com/examples/s

手把手教你编写Logstash插件

使用过Logstash的朋友都知道,它强大的插件生态几乎覆盖了所有的开源框架.从基本的http.tcp.udp.file,到强大的kafa.redis.ganglia,还有丰富的解析工具,比如date.json.grok.kv等等,有了它再也不用担心数据不好搜集了! 不过需求是无限的,如果这些框架都不满足怎么办呢? 没关系,十分佩服Logstash的作者,他以插件的方式组织每个部分,使得logstash本身具有超强的扩展性. Logstash基本组成 有过使用经验的都知道Logstash主要由输