热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用Logstash中的Jdbcinputplugin将mysql数据导入ES

1.在CentOS上安装logstash5.5:参考这篇文章。只是这文章比较久了,现在有些变化,我还是把过程写下来:1,下载logstash5.5.1curl-Ohttps:

1. 在CentOS上安装logstash5.5:

参考这篇文章。 只是这文章比较久了,现在有些变化,我还是把过程写下来:

1,下载logstash5.5.1

curl -O https://artifacts.elastic.co/downloads/logstash/logstash-5.5.1.tar.gz

2, 解压tar zxvf logstash-5.5.1.tar.gz

3, 进入logstash-5.5.1目录, 根据网上的帖子,还需要单独安装logstash-input-jdbc, 但是现在都已经集成在5.5.1的安装包i面了

  1. 参考官方的plugin说明文档, 在命令行中运行:
[root@VM_27_195_centos logstash-5.5.1]# bin/logstash-plugin list

该命令列出所有已安装的插件

bin/logstash-plugin list --verbose

这个命令列出所有已安装插件的名称和版本,截屏部分如下,你会发现logstash-input-jdbc(4.2.1)已经安装了:

这里写图片描述

2. 安装ElasticSearch

安装文档
根据安装好后,运行./bin/elasticsearch, 报内存不够,因为我的虚机只有1G的内存,运行’top’命令发现只有150M的可用内存,怎么办呢?修改/usr/local/es/elasticsearch-5.4.3/config目录下的jvm.options文件:

vim jvm.options

修改成128m:

################################################################
## IMPORTANT: JVM heap size
###
#############################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space




-Xms128m
-Xmx128m

ES不能用root用户启动,建立一个新的用户es, 切换到es:

su es

之后在ES的安装目录里执行:

./bin/elasticsearch

可以在命令行里用curl命令查看ES是否已经运行(默认端口9200),命令如下:

curl -XGET 'localhost:9200/?pretty'

系统会显示:

这里写图片描述

3. 安装Mysql, 情形和这个帖子描述的一样,最后还是装了又卸掉。

安装原生tar.gz包的官方指南
太麻烦,于是安装了MariaDB, 安装教程
配置MariaDB,root的密码是simon, 之后加了一个可以从远程访问的帐号:

MariaDB [(none)]> CREATE USER 'zoujia'@'%' IDENTIFIED BY 'simon';

并授予一切权利:

MariaDB [(none)]>  GRANT ALL PRIVILEGES ON *.* TO 'zoujia'@'%' WITH GRANT OPTION;

这样就能从NaviCat远程连接了。

4. 使用logstash的logstash-input-jdbc插件来将mysql数据库中的数据导入到ES, 根据这个官方说明操作

  1. 首先要在logstash目录下新建一个jdbc.conf文件:
input {
stdin {
}
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
# the user we wish to excute our statement as
jdbc_user => "simon"
jdbc_password => "simon"
# the path to our downloaded jdbc driver
jdbc_driver_library => "/opt/logstash-5.5.1/mysql-connector-java-5.1.36.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 {
hosts => ["127.0.0.1:9200"]
index => "mysql01"
document_id => "%{id}" }
stdout {
codec => json_lines
}
}
  1. 其中要上传一个’mysql-connector-java-5.1.36.jar’文件到logstash目录下,以对应配置文件中的:
jdbc_driver_library => "/opt/logstash-5.5.1/mysql-connector-java-5.1.36.jar"
  1. 在logstash目录下建立一个jdbc.sql文件:
select * from simontable

对应配置文件中:

 statement_filepath => "jdbc.sql"
``` 选项

4. 运行命令:





class="se-preview-section-delimiter">div>

[root@VM_27_195_centos logstash-5.5.1]# bin/logstash -f jdbc.conf


等上大约半分钟(没办法,买的虚机配置很低, 只有1G的内存), 开始工作:

![这里写图片描述](http://img.blog.csdn.net/20170802114003824?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2ltb25saW5iaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

系统会每一秒钟执行一次, 在elasticsearch里面执行:





<div class="se-preview-section-delimiter">div>

[root@VM_27_195_centos ~]# curl http://localhost:9200/mysql01/_search?pretty


会显示已经导入的记录:





<div class="se-preview-section-delimiter">div>

{
“took” : 120,
“timed_out” : false,
“_shards” : {
“total” : 5,
“successful” : 5,
“failed” : 0
},
“hits” : {
“total” : 7,
“max_score” : 1.0,
“hits” : [
{
“_index” : “mysql01”,
“_type” : “jdbc”,
“_id” : “5”,
“_score” : 1.0,
“_source” : {
“@timestamp” : “2017-08-02T03:11:00.220Z”,
“name” : “linzhongyue”,
“@version” : “1”,
“id” : 5,
“type” : “jdbc”,
“age” : 81
}
},
{
“_index” : “mysql01”,
“_type” : “jdbc”,
“_id” : “2”,
“_score” : 1.0,
“_source” : {
“@timestamp” : “2017-08-02T03:11:00.218Z”,
“name” : “wuraorao”,
“@version” : “1”,
“id” : 2,
“type” : “jdbc”,
“age” : 36
}
},
{
“_index” : “mysql01”,
“_type” : “jdbc”,
“_id” : “4”,
“_score” : 1.0,
“_source” : {
“@timestamp” : “2017-08-02T03:11:00.219Z”,
“name” : “zouwangbei”,
“@version” : “1”,
“id” : 4,
“type” : “jdbc”,
“age” : 5
}
},
{
“_index” : “mysql01”,
“_type” : “jdbc”,
“_id” : “6”,
“_score” : 1.0,
“_source” : {
“@timestamp” : “2017-08-02T03:11:00.220Z”,
“name” : “zouyong”,
“@version” : “1”,
“id” : 6,
“type” : “jdbc”,
“age” : 33
}
},
{
“_index” : “mysql01”,
“_type” : “jdbc”,
“_id” : “1”,
“_score” : 1.0,
“_source” : {
“@timestamp” : “2017-08-02T03:11:00.218Z”,
“name” : “simon”,
“@version” : “1”,
“id” : 1,
“type” : “jdbc”,
“age” : 43
}
},
{
“_index” : “mysql01”,
“_type” : “jdbc”,
“_id” : “7”,
“_score” : 1.0,
“_source” : {
“@timestamp” : “2017-08-02T03:11:00.223Z”,
“name” : “hanxiaodong”,
“@version” : “1”,
“id” : 7,
“type” : “jdbc”,
“age” : 44
}
},
{
“_index” : “mysql01”,
“_type” : “jdbc”,
“_id” : “3”,
“_score” : 1.0,
“_source” : {
“@timestamp” : “2017-08-02T03:11:00.219Z”,
“name” : “lingwangnan”,
“@version” : “1”,
“id” : 3,
“type” : “jdbc”,
“age” : 6
}
}
]
}
}

“`

测试结果: 增加和更改MariaDB中的原表,都可以在ES中反馈出来,但如果是删除了一条记录,但是在ES该记录仍然存在,只是他的@timestamp不再更行了,见下图:

这里写图片描述

第二条记录在MariaDB中已经删除了,你可以看到它的时间比上面的记录早3分钟。


[root@VM_27_195_centos ~]# curl http://localhost:9200/mysql01/_search?pretty

会显示已经导入的记录:


{
"took" : 120,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
}
,
"hits" : {
"total" : 7,
"max_score" : 1.0,
"hits" : [
{
"_index" : "mysql01",
"_type" : "jdbc",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2017-08-02T03:11:00.220Z",
"name" : "linzhongyue",
"@version" : "1",
"id" : 5,
"type" : "jdbc",
"age" : 81
}
},
{
"_index" : "mysql01",
"_type" : "jdbc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2017-08-02T03:11:00.218Z",
"name" : "wuraorao",
"@version" : "1",
"id" : 2,
"type" : "jdbc",
"age" : 36
}
},
{
"_index" : "mysql01",
"_type" : "jdbc",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2017-08-02T03:11:00.219Z",
"name" : "zouwangbei",
"@version" : "1",
"id" : 4,
"type" : "jdbc",
"age" : 5
}
},
{
"_index" : "mysql01",
"_type" : "jdbc",
"_id" : "6",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2017-08-02T03:11:00.220Z",
"name" : "zouyong",
"@version" : "1",
"id" : 6,
"type" : "jdbc",
"age" : 33
}
},
{
"_index" : "mysql01",
"_type" : "jdbc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2017-08-02T03:11:00.218Z",
"name" : "simon",
"@version" : "1",
"id" : 1,
"type" : "jdbc",
"age" : 43
}
},
{
"_index" : "mysql01",
"_type" : "jdbc",
"_id" : "7",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2017-08-02T03:11:00.223Z",
"name" : "hanxiaodong",
"@version" : "1",
"id" : 7,
"type" : "jdbc",
"age" : 44
}
},
{
"_index" : "mysql01",
"_type" : "jdbc",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2017-08-02T03:11:00.219Z",
"name" : "lingwangnan",
"@version" : "1",
"id" : 3,
"type" : "jdbc",
"age" : 6
}
}
]
}
}

测试结果: 增加和更改MariaDB中的原表,都可以在ES中反馈出来,但如果是删除了一条记录,但是在ES该记录仍然存在,只是他的@timestamp不再更行了,见下图:

这里写图片描述

第二条记录在MariaDB中已经删除了,你可以看到它的时间比上面的记录早3分钟。


推荐阅读
  • 在安装并配置了Elasticsearch后,我在尝试通过GET /_nodes请求获取节点信息时遇到了问题,收到了错误消息。为了确保请求的正确性和安全性,我需要进一步排查配置和网络设置,以确保Elasticsearch集群能够正常响应。此外,还需要检查安全设置,如防火墙规则和认证机制,以防止未经授权的访问。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 在处理大图片时,PHP 常常会遇到内存溢出的问题。为了避免这种情况,建议避免使用 `setImageBitmap`、`setImageResource` 或 `BitmapFactory.decodeResource` 等方法直接加载大图。这些函数在处理大图片时会消耗大量内存,导致应用崩溃。推荐采用分块处理、图像压缩和缓存机制等策略,以优化内存使用并提高处理效率。此外,可以考虑使用第三方库如 ImageMagick 或 GD 库来处理大图片,这些库提供了更高效的内存管理和图像处理功能。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 利用Jenkins与SonarQube集成实现高效代码质量检测与优化
    本文探讨了通过在 Jenkins 多分支流水线中集成 SonarQube,实现高效且自动化的代码质量检测与优化方法。该方案不仅提高了开发团队的代码审查效率,还确保了软件项目的持续高质量交付。 ... [详细]
  • Logstash安装配置
    阅读此文请先阅读上文:[大数据]-Elasticsearch5.3.1IK分词,同义词联想搜索设置,前面介绍了ES,Kiba ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 简短的问题是:是否可以从远程服务器中提取日志(在日志文件中)并将其提取到 ... [详细]
  • 优秀到卓越就差比他更快搭建elk集群架构上篇
    工作原理开源分布式搜索引擎,特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制 ... [详细]
  • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
    本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
author-avatar
xiaohigh
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有