logstash mysql 回车,Docker安装Logstash并实现mysql与mysql之间的数据同步 | 梦溪博客

78a95752bec417639a851871ee942db3.png

背景

最近接到一个需求是定时将某mysql数据库的数据同步到到另一个mysql数据库中,当时第一个想法就是使用程序去写对应的同步逻辑,最后还是决定使用Logstash去进行数据库之间的同步工作,一是自己写程序同部数据工作量还是比较大的,二是扩展性并不是很理想,Logstash中安装对应的数据输入输出插件,简单的编写配置文件就可以轻松实现数据库之间的同步工作。既简单又方便。

Logstash简介

Logstash是一款集中、转换和存储数据的中间件,属于Elastic旗下的,ELK中的L。它具体有哪些功能呢?

输入、过滤器和输出

Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中派生出结构,从 IP 地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。

采集各种样式、大小和来源的数据

数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择,可以同时从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。

实时解析和转换数据

数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。

Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响:

利用 Grok 从非结构化数据中派生出结构

从 IP 地址破译出地理坐标

将 PII 数据匿名化,完全排除敏感字段

简化整体处理,不受数据源、格式或架构的影响

选择您的存储库,导出您的数据

尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。

Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。

以您自己的方式创建和配置管道

Logstash 采用可插拔框架,拥有 200 多个插件。您可以将不同的输入选择、过滤器和输出选择混合搭配、精心安排,让它们在管道中和谐地运行。

从自定义应用程序采集数据?没有看到所需的插件?Logstash 插件很容易构建。我们有一个极好的插件开发 API 和插件生成器,可帮助您开始创作并分享成果。

Docker安装Logstash

我们使用docker命令直接从远程仓库拉去Logstash镜像,这里笔者使用的是7.2.0

拉取完镜像后就可以编辑自定义conf文件了,Logstash默认加载/usr/share/logstash/config/目录下的logstash.yml文件 。

Logstash配置文件

这里我们可以在Logstash容器启动之前编辑好conf文件,然后在启动的时候指定对应的目录去挂载conf文件,当然如果使用的是mysql数据库的话,还需要对应的数据库链接JAR文件,可以同时放在挂载的目录下。

mysql.conf

如上面的配置文件,input与output是配置文件必须配置的选项,即数据同步的输入与输出配置,stdin与stdout标识标准输入和输出,这里stout配置了在logstash日志中将最终结果以json形式输出到日志中。input与output标签中的jdbc标签表示为数据库的插件,值得注意的是这里必须要在logstaash中安装logstash-input-jdbc与logstash-output-jdbc的插件,否则在执行的时候会出错,下面我会想如何安装对应的插件。其实logstash中支持众多插件,只是这里我们的需求是mysql数据库之间的数据同步,如果换成其他存储引擎,必须安装其他的相关插件,比如es,kafka等等。jdbc里的配置参数,想必大家一看就明白,这里就不在多做赘述了。在input标签里的jdbc中schedule属性还可以配置cron表达式,定时跑数据。

如下图,如果没有安装jdbc则会报错

57004b84bd289a0a7fdbc02957cdddc7.png

启动Logstash容器

上面我们已经准备好配置文件了,当然还需要准备mysql的链接jar包,这里我使用的是mysql-connector-java-8.0.15.jar,如有需要大家可以去官网上下载。然后启动docker logstash容器,如下

如上启动命令,可以看到-v 指定当前物理机挂载目录,将tmp目录下的配置文件以及jar文件都挂载到容器的/usr/share/logstash/config目录下,以便使用。

041a3c5f695586194fb903ae1132cafc.png

可以看到tmp目录下的文件,这里需要注意的是,在该目录下需要指定一个logstash.yml配置文件,可以写个空文件,否则启动容器的时候会报错,找不到该文件。

安装logstash插件

到这里,进入logstash容器中

进入bin目录后,我们开始安装对应的插件,这里我们使用到了logstash-input-jdbc与logstash-output-jdbc,所以这两个必须都要安装

logstash-input-jdbc 插件相对来说比较好安装,在bin目录下执行 logstash-plugin install logstash-input-jdbc 即可。

如看到上述日志,则表示安装成功。

logstash-output-jdbc 这款插件是比较独立的,安装的时候会一直连接不上网络,因为被墙了,所以需要离线安装。

在使用 logstash-plugin install logstash-output-jdbc时一直出现如下错误

解决方案:

这里我选择了离线安装

下载离线包 https://github.com/theangryangel/logstash-output-jdbc,上传到服务器并解压,这里我们使用的是docker容器部署的,所以将文件直接docker cp到指定目录。

f0701e6eedf87da6622c99fb50052773.png

这里涉及到unzip解压,logstash7.2.0中并没有unzip等命令,这里我们使用 docker exec -u root -it logstash /bin/bash 命令用root用户进行登录,然后yum install zip unzip,安装完成后解压目录。

更改logstash根目录下的Gemfile文件,增加gem “logstash-jdbc-output”, :path => “你的插件zip解压后的全路径” 。

执行 bin/logstash-plugin install --no-verify logstash-output-jdbc,如果你的源不正确仍然会报错。但不用在意,往下执行。

bin/logstash-plugin list

423f725578880f4cbedc7bded9db5712.png

这里我们看到,两款jdbc相关插件都已经安装成功了。

执行logstash

最后在logstash/bin目录下,执行 ./logstash -f ../config/mysql.conf 命令,进行启动logstash.

执行完成后,就可以在对应的数据库中查找同步的数据是否已经插入。如果成功插入数据,表示通过logstash日志采集成功的同步数据了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值