Linux环境下,Logstash连接mysql数据库

logstash同步数据库及其错误集锦

错误集锦

经历了6个多小时的排错,发现了几个小问题,问题也得到了解决,爽的一批!!!
我ELK用的是6.7.0版本

#1.现在老版本提供的都是错的了 https://ruby.taobao.org/ 已经不再维护更新了
gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
#说实话我也被坑到了,后来我查了下现在变成了
https://gems.ruby-china.org/
#更搞笑的是.org 已经不用了 现在又变了.com 查了1个小时白费了?你TMD在逗我?
#为了避免这个过期了 大家最好访问下这个网址
https://gems.ruby-china.com/

#下面会讲解怎么全部安装的,各位稍安勿躁 这里讲错误

#2.com.mysql.jdbc.Driver not loaded报错 
com.mysql.jdbc.Driver not loaded. Are you sure you've included the correct jdbc driver in :jdbc_driver_library?

#就是这里我被坑的最惨 花了3 4个小时 几乎把国内关于logstash连接mysql错误的问题翻了个底朝天,甚至有人说jdk版本的问题我也试过了,还是不行,数据库问题,我也换过数据库版本,JDBC连接包,通通都试过
总结:
1.JDK版本不兼容 
2.mysql问题 
3.logstash的plugin:logstash-input-jdbc (我就是在这里载了,因为网络延迟导致安装不全,这个要注意)

#上面的是6.x的 而7.x的有个bug 要把input-jdbc 升到4.3.18 不然也会出现第二条的错误

#3.Logstash 已经可以打印语句那些了 出现错误
javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
#解决方法
#把数据库连接后面加上?useSSL=false 如果前面有参数了把?改为&
jdbc_connection_string => "jdbc:mysql://localhost:3306/test?useSSL=false"

logstash同步数据库安装步骤

#安装 gem
yum install -y gem

# 添加ruby源 
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
# 查看源 是否是 https://gems.ruby-china.com/
gem sources -l

#进入logstash目录下,修改vi Gemfile的  source 的值  "https://gems.ruby-china.com"
vi Gemfile
#注意 没有=号
source "http://gems.ruby-china.com/"

#进入在bin目录下,
./logstash-plugin install logstash-input-jdbc
#查看所有插件
./logstash-plugin list


#在logstash bin目录中创建一份配置pipeline配置文件,比如test.conf
#以下是test.conf的内容
input {
        jdbc {
        # 数据库地址  端口  数据库名 如果出现时区问题可以加上
        #jdbc:mysql://localhost:3306/test?serverTimezone=UTC
        jdbc_connection_string => "jdbc:mysql://localhost:3306/test?useSSL=false"
        # 数据库用户名
        jdbc_user => "root"
        # 数据库密码
        jdbc_password => "123456"
        # mysql java驱动地址
        jdbc_driver_library => "/usr/local/elk/logstash-6.7.0/mysql-connector-java-8.0.14.jar"
        # 在 mysql-connector-java-8.0.14.jar 驱动类已经发生了变化
        # 注意 8.0 和 5.x 的写法不一样
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        jdbc_paging_enabled => "true"
        jdbc_page_size => "50000"
        #sql 语句
        statement => "select * from computer"
        #sql 文件 如果sql太长可以使用这个 注意这个路径 默认是当前的 最好搞个文件夹放
        #statement_filepath => "jdbc_test1.sql"
        #什么时间执行 具体可以去官网查看怎么使用
        schedule => "* * * * *"
            type => "computer"
    }
    #这个 jdbc的模块可以有多个 
     jdbc {
        # 如果要连其他机器的mysql 要打开防火墙
        jdbc_connection_string => "jdbc:mysql://elasticsearch02:3306/test_user?useSSL=false"
        jdbc_user => "root"
        jdbc_password => "123456"
        jdbc_driver_library => "/usr/local/elk/logstash-6.7.0/mysql-connector-java-8.0.14.jar"
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        jdbc_paging_enabled => "true"
        jdbc_page_size => "50000"
        #sql 语句
        statement => "select * from users"
        #statement_filepath => "jdbc_test1.sql"
        # 同步频率(分 时 天 月 年),默认每分钟同步一次;
        schedule => "* * * * *"
         # 数据唯一索引(建议使用数据库KeyID)
            type => "user"
    }

}
output {
        stdout {
        	#以json格式输出
                codec => json_lines
        }
        #如果type是 computer 执行下面的
        if[type] == "computer" {
        elasticsearch {
        	#指定端口号 加入数据 可以配置集群
            hosts => ["elasticsearch01:9200","elasticsearch02:9200"]
            #创建一个website名字的index 可加可不加 默认是当前日期
            index => "website"
            #下面的可加可不加
            document_id => "%{id}"
        }
    }
      #如果type是 user 执行下面的
        if[type] == "user" {
        elasticsearch {
            hosts => ["elasticsearch02:9200"]
            index => "user"
            document_id => "%{id}"
        }
    }

}

启动logstash

#进入logstash/bin下
#运行下面的命令检查配置文件语法是否正确:注意test.conf 存放的路径 默认是当前路径
./logstash -f test.conf --config.test_and_exit

#启动
#--config.reload.automatic,会自动重新加载配置文件的内容
./logstash -f test.conf --config.reload.automatic

你可能感兴趣的:(logstash,linux,mysql)