全文搜索引擎 Elasticsearch (三)logstash-input-jdbc同步数据 到elasticsearch
参考链接:
1, 源码地址,官方介绍
3, 官网介绍例子,使用 logstash-input-jdbc 到 elasticsearch
一、安装 elastisearch, logstash
参考我的上一篇链接 :centos下 ELK部署文档
二、安装logstash-input-jdbc插件
logstash-input-jdbc插件是logstash 的一个个插件。
使用ruby语言开发。
下载插件过程中最大的坑是下载插件相关的依赖的时候下不动,因为国内网络的原因,访问不到亚马逊的服务器。
解决办法,改成国内的ruby仓库镜像。此镜像托管于淘宝的阿里云服务器上 :
1, 如果没有安装 gem 的话 安装gem
sudo yum install gem
替换淘宝
1,gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
2,gem sources -l *** CURRENT SOURCES *** https://ruby.taobao.org
# 请确保只有 ruby.taobao.org
如果 还是显示 https://rubygems.org/ 进入 home的 .gemrc 文件
sudo vim ~/.gemrc
手动删除 https://rubygems.org/
2, 修改Gemfile的数据源地址。步骤:
1, whereis logstash # 查看logstash安装的位置, 我的在 /opt/logstash/ 目录
2, sudo vi Gemfile #
修改 source 的值 为: "https://ruby.taobao.org"
3, sudo vi Gemfile.jruby-1.9.lock # 找到 remote 修改它的值为: https://ruby.taobao.org
或者直接替换源这样你不用改你的 Gemfile 的 source。
sudo gem install bundler $ bundle config mirror.https://rubygems.org https://ruby.taobao.org
安装logstash-input-jdbc
我一共试了三种方法,一开始都没有成功,原因如上,镜像的问题。一旦镜像配置成淘宝的了,理论上随便选择一种安装都可以成功,我用的是第三种。
第一种:
cd /opt/logstash/ sudo bin/plugin install logstash-input-jdbc 如果成功就成功了。
第二种:
1,进入源码地址的release页面logstash-input-jdbc
选择对应的版本。我的logstash版本是1.4.0,对应的插件版本是1.0.0
关于插件版本的选择 参考这里:这是ruby Gemfile所有插件的官方地址,参考logstash-core ,如果你的logstash版本跟他对应上,那么这个插件的版本就是你要的版本。
2,复制 1.0.0的下载地址
cd /opt/logstash
sudo wget https://github.com/logstash-plugins/logstash-input-jdbc/archive/v1.0.0.zip
sudo bin/plugin install v1.0.0.zip 如果成功了就成功了
3, 遗憾的是上两个步骤都没成功,我是手动装的。
参考 安装jdbc插件的问题, 这篇文章的最后 ,这为好心的姑娘,也建议改变gemgile里的镜像,我估计这姑娘是chinese。
$ cd /opt/logstash
$ wget https://github.com/logstash-plugins/logstash-input-jdbc/archive/v1.0.0.zip
$ unzip master.zip
$ cd logstash-input-jdbc-master 注意,有坑:
1, 修该 里面的 Gemfile
sudo vi Gemfile
修改 source 的值 为: "https://ruby.taobao.org" 2,修改 logstash-input-jdbc.gemspec
sudo vi logstash-input-jdbc.gemspec
找到
s.files = `git ls-files`.split($\)
改为:
s.files = [".gitignore", "CHANGELOG.md", "Gemfile", "LICENSE", "NOTICE.TXT", "README.md", "Rakefile", "lib/logstash/inputs/jdbc.rb", "lib/logstash/plugin_mixins/jdbc.rb", "logstash-input-jdbc.gemspec", "spec/inputs/jdbc_spec.rb"]
OK! 继续..... $ gem build logstash-input-jdbc.gemspec
(output:
fatal: Not a git repository (or any of the parent directories): .git
Successfully built RubyGem
Name: logstash-input-jdbc
Version: 1.0.0
File: logstash-input-jdbc-1.0.0.gem)
$ mv logstash-input-jdbc-1.0.0.gem /opt/logstash/
$ cd ..
$ bin/plugin install logstash-input-jdbc-1.0.0.gem 如果再不成功 我也没招了。
三、实现样例。
假如上面步骤都搞定了...重点来了 继续看...没搞定也可以接着看啦..hahahaha....实战......
目的 : 监听数据表的数据,当我有新增时增加到elasticsearch,当我修改时,update到elasticsearch。
第一 前提:
1, 我有mysql数据库,我有一张hotel 表, hotel_account表(此表里有hotel_id), 里面无数据。
2,已经启动 elasticsearch . 地址是 http://192.168.0.45 端口:9200.
3,已经安装 logstash, 地址在 /opt/logstash
第二 准备
两个文件: jdbc.conf
jdbc.sql 。名字随便起啦。
一个 mysql 的java 驱动包 : mysql-connector-java-5.1.36-bin.jar
jdbc.conf 内容:
注意 statement_filepath => "jdbc.sql" 这个名字要跟下面的sql文件的名字对应上。
重点字段说明:
schedule:设置监听间隔。可以设置每隔多久监听一次什么的。具体参考官方文档。
statement_filepath: 执行的sql 文件路径+名称
input {
stdin {
}
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://192.168.0.49:3306/dfb"
# the user we wish to excute our statement as
jdbc_user => "test"
jdbc_password => "test"
# the path to our downloaded jdbc driver
jdbc_driver_library => "/opt/logstash/mysql-connector-java-5.1.36-bin.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement_filepath => "jdbc.sql"
schedule => "* * * * *"
type => "jdbc"
}
} filter {
json {
source => "message"
remove_field => ["message"]
}
} output {
elasticsearch {
host => "192.168.0.199"
port => "9200"
protocol => "http"
index => "mysql01"
document_id => "%{id}"
cluster => "logstash-elasticsearch"
}
stdout {
codec => json_lines
}
}
jdbc.sql
select
h.id as id,
h.hotel_name as name,
h.photo_url as img,
ha.id as haId,
ha.finance_person
from
hotel h LEFT JOIN hotel_account ha on h.id = ha.hotel_id
where
h.last_modify_time >= :sql_last_start
第三: 启动 logstash
sudo bin/logstash -f jdbc.conf
如果一切顺利 应该如图:
现在 logstash 已经开始监听mysql 的表了。查询哪些表 就在jdbc.sql 写sql语句就行了。
现在 手动的 hotel, hotel_account 分别增加一条数据:
INSERT INTO hotel(hotel_name, photo_url) VALUES("马二帅酒店","images/madashuai.img");
找到 hotel 的id
INSERT INTO hotel_account(hotel_id, finance_person) VALUES(15627, "马二帅");
大约30秒的时候查看es
很好马二帅酒店已经增加进来了。
现在修改下 hotel_account
UPDATE hotel_account SET finance_person = "马二帅修改为马小帅" where id = 1601;
修改也能监听到哦。
OK到此为止,使用logstash-input-jdbc插件增量监听es就介绍完
全文搜索引擎 Elasticsearch (三)logstash-input-jdbc同步数据 到elasticsearch的更多相关文章
- elasticsearch -- Logstash实现mysql同步数据到elasticsearch
配置 安装插件由于这里是从mysql同步数据到elasticsearch,所以需要安装jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc.logstash-o ...
- 利用logstash从mysql同步数据到ElasticSearch
前面一篇已经把logstash和logstash-input-jdbc安装好了. 下面就说下具体怎么配置. 1.先在安装目录bin下面(一般都是在bin下面)新建两个文件jdbc.conf和jdbc. ...
- 使用Logstash同步数据至Elasticsearch,Spring Boot中集成Elasticsearch实现搜索
安装logstash.同步数据至ElasticSearch 为什么使用logstash来同步,CSDN上有一篇文章简要的分析了以下几种同步工具的优缺点:https://blog.csdn.net/la ...
- ElasticSearch(1)---Mysql同步数据到ElSearch
ElasticSearch同步Mysql 先讲项目需求:对于资讯模块添加搜索功能 这个搜索功能我就是采用ElasticSearch实现的,功能刚实现完,所以写这篇博客做个记录,让自己在记录下整个步骤和 ...
- logstash input jdbc连接数据库
示例 以下配置能够实现从 SQL Server 数据库中查询数据,并增量式的把数据库记录导入到 ES 中. 1. 查询的 SQL 语句在 statement_filepath => " ...
- Logstash使用jdbc同步MySQL中的数据
[--26T20::,][WARN ][logstash.inputs.jdbc ] Exception when executing JDBC query {:exception=>#< ...
- logstash采集与清洗数据到elasticsearch案例实战
原文地址:https://www.2cto.com/kf/201610/560348.html Logstash的使用 logstash支持把配置写入文件 xxx.conf,然后通过读取配置文件来采集 ...
- mysql 同步数据到 ElasticSearch 的方案
MySQL Binlog 要通过 MySQL binlog 将 MySQL 的数据同步给 ES, 我们只能使用 row 模式的 binlog.如果使用 statement 或者 mixed forma ...
- 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入
一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...
随机推荐
- bzoj千题计划125:bzoj1037: [ZJOI2008]生日聚会Party
http://www.lydsy.com/JudgeOnline/problem.php?id=1037 一个区间是否满足 任意连续的一段,男孩与女孩的数目之差不超过k, 取决于男孩与女孩数目之差的最 ...
- Linux基础实验
过滤,管道与重定向 过滤 管道 重定向 运维常用 给某目录设置权限 sudo chmod -R /var/www/html/
- soj1763.传球游戏
题目不算很难,dp的转移方程也很容易列出: 设dp[i][j] 代表第i次传球之后球回到j手中的传球数.易得: dp[i][j] = dp[i-1][j-1] + dp[i-1][j-1] 再处理一下 ...
- c++刷题(24/100)正则匹配与位运算
题目1:正则表达式匹配 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字 ...
- 天梯赛 L2-002. (模拟) 链表去重
题目链接 题目描述 给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点.即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留.同时,所有被删除的结点必须被保存 ...
- C# 安装部署Windows服务脚本
@echo off Installutil.exe 程序目录 F:\test\TestWindows.exe 服务程序目录 @sc start "服务名称" @sc config ...
- boost::bind的使用
最近在几经波折之后,终于对于boost::bind有点理解了.对于习惯了其他语言的人来说,boost::bind是个挺神奇的东西,它可以将你的方法适配成任何其他的方法.其实这得益于c++的模板以及操作 ...
- 原生的js实现jsonp的跨域封装
一.原理 jsonp是利用浏览器请求script文件时不受同源策略的限制而实现的,伪造一个script标签,将请求数据的url赋值给script的src属性,并将该标签添加到html中,浏览器会自动发 ...
- 一个不错的linux学习资料下载的网址
本文比较完整的讲述GNU make工具,涵盖GNU make的用法.语法.同时重点讨论如何为一个工程编写Makefile.作为一个Linux程序员,make工具的使用以及编写Makefile是必需的. ...
- aarch64_m1
MAKEDEV-3.24-18.fc26.aarch64.rpm 2017-02-14 08:46 99K fedora Mirroring Project MUMPS-5.0.2-8.fc26.aa ...