kafka结合mysql_logstash集成kafka,mysql实现数据采集

本文详细介绍了如何使用logstash配合mysql的jdbc驱动,从syslog和stdin采集日志,将数据发送到kafka,再从kafka读取数据并存储到mysql数据库中。内容包括logstash的环境准备、jdbc驱动安装、配置文件编写以及运行验证,展示了logstash作为数据采集工具的强大灵活性。
摘要由CSDN通过智能技术生成

logstash是一个非常灵活好用的数据采集框架工具,可以通过简单的配置满足绝大多数数据采集场景的需求。

采集数据一个非常典型的场景就是将数据先放到kafka队列里削峰,然后从kafka队列里读取数据到mysql或其他存储系统中进行保存。

0033fc1adad26db755c4dbaa92173529.png

本文通过一个简单的示例来演示从syslog采集日志到kafka然后在从kafka写到mysql数据库中。

默认已经安装好了kafka、mysql、logstash,并已经经过简单的验证。

准备logstash的环境

一、下载mysql的jdbc驱动包

二、安装logstash插件

logstash默认安装了kafka插件,但是mysql插件没有默认安装需要自己安装。

具体安装方法 /bin/logstash-plugin install logstash-output-jdbc ,这里应为要用到logstash写入mysql数据库,所以安装的插件是logstash-output-jdbc,如果要用到从mysql读数据,那么就要安装logstash-input-jdbc。安装方法类似。

因为安装时需要访问国外的源,安装进度很慢很慢,还经常安装不成功,所以需要更改国内的源。

也就是给 Ruby 换成国内的镜像站:https://gems.ruby-china.com/,替代https://rubygems.org。请注意:国内的镜像站从https://gems.ruby-china.org 换成了 https://gems.ruby-china.com !!! 现在很多网上的资料就都是写的https://gems.ruby-china.org,导致很多人换了镜像源也装不上。

具体方法如下:

1. 安装Gem并更新

# yum install -y gem

# gem -v

2.0.14.1

# gem update --system

# gem -v

2.7.7

2. 检查并修改镜像源

# gem sources -l

*** CURRENT SOURCES ***

https://rubygems.org/

# gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/

https://gems.ruby-china.org/ added to sources

https://rubygems.org/ removed from sources

# cat ~/.gemrc

---

:backtrace: false

:bulk_threshold: 1000

:sources:

- https://gems.ruby-china.org/

:update_sources: true

:verbose: true

请注意:国内的镜像站从https://gems.ruby-china.org 换成了 https://gems.ruby-china.com !!!现在很多网上的资料就都是写的https://gems.ruby-china.org,导致很多人换了镜像源也装不上。

3. 修改 logstash的 gem 镜像源

cd到logstach的安装目录,可以看到Gemfile文件

# vi Gemfile

# This is a Logstash generated Gemfile.

# If you modify this file manually all comments and formatting will be lost.

source "https://rubygems.org"

gem "logstash-core", :path => "./logstash-core"

......

更改默认的 https://rubygems.org 为https://gems.ruby-china.com

1f7116b7f3836dc16359334a329f0864.png

4. 安装 logstash-output-jdbc

#/bin/logstash-plugin install logstash-output-jdbc

Validating logstash-output-jdbc

Installing logstash-output-jdbc

Installation successful

5.查看插件是否安装成功

在logstash的bin目录下执行./logstash-plugin list 可以查看已经安装的插件,可以看到logstash-output-jdbc的插件已经装好。

d117a21091bb341f659d19b38bc98563.png

配置logstash

新建一个pipline.conf的配置文件

vi test-pipeline.conf

文件内容如下:

input {

stdin{ #用于测试标准控制台输入的数据

type => "test-log"

}

syslog{ #用于接收来自syslog的日志

type => "test-log"

port => 514

}

kafka {

bootstrap_servers => "172.28.65.26:9092" #kafka服务器地址

topics => "test1" #kafka订阅的topic主题

codec => "json" #写入的时候使用json编码,因为logstash收集后会转换成json格式

consumer_threads => 1

decorate_events => true

add_field => {

"logsource" => "kafkalog"

}

}

}

output

{

if ([type]=="test-log" and "kafkalog" not in [logsource]) {

kafka {

codec => json

topic_id => "test1"

bootstrap_servers => "172.28.65.26:9092"

batch_size => 1

}

}

if ([type] == "test-log" and "kafkalog" in [logsource]) {

jdbc {

driver_jar_path => "/opt/elk/logstash-7.6.0/vendor/jar/jdbc/mysql-connector-java-8.0.15.jar"

driver_class => "com.mysql.jdbc.Driver"

connection_string => "jdbc:mysql://172.28.65.32:3306/testdb?user=yourdbuser&password=yourpassword"

statement => [ "INSERT INTO test_nginx_log (message) VALUES(?)", "message"]

}

}

stdout {

codec => rubydebug

}

}

这个逻辑就是从stdin或syslog接收数据output到kafka,然后从kafka中取出数据加入了一个logsource的字标识是从kafka过来的数据,然后又output到 jdbc写到mysql中去。

如果没有这几个if的逻辑判断,那么就会是个死循环。从kafka读同样的数据又写到kafka中。如果在两台机器上装有logstash一台取数据放到kafka,一台从kafka中取数据放到mysql中就可以不用加这样的判断逻辑会单纯简单一些。

执行logstash并查看效果

通过在logstash安装目录下执行 bin/logstash -f test-pipeline.conf --config.test_and_exit 检查配置文件是否有问题,没有问题以后执行bin/logstash -f test-pipeline.conf --config.reload.automatic 运行logstash。

在控制台输入

this is a test!

效果:

从控制台输入信息,可以看到从stdin输入output到stdout的没有logsource标识,input从kafka订阅过来的信息加了一个logsource=>kafkalog的标识。

154a4be902181d8576e347edae7ca291.png

用kafka tool工具看到kafka收到了从stdin发过来的信息。

aa6fbe89f38f697e72aff4f03a6cf1c6.png

在看MySQL表里的数据,已经通过logstash从kafka中将数据采集到了MySQL的表中。

845540c8f69a21be9572401552b3e2cb.png

再来看从syslog采集日志的效果

从控制台看到的信息效果

d5acb39f5857b6e0e90d13b1e7ad5f47.png

从kafka tool看到的效果

76c265d6867aaefcd976e6e2ecf76351.png

从mysql 表中看到的效果。

1273a48418e3bf8f64aed04e5a757cd7.png

可以看到,logstash是一个非常灵活好用的数据采集框架工具,可以通过简单的配置就能满足绝大多数数据采集场景的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值