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