Logstash安装记录(报错com.mysql.jdbc.Driver not loaded的解决)
Logstash是es官方标配的ELK中的“L”,它们三者的关系是这样:“E”指elasticsearch,用来提供核心的搜索服务;“L”指logstash,用来实现源数据到es索引库的收集、转换、入库;“K”指Kibana,用来通过丰富的图表化界面展示数据。安装这个logstash真的是比较坑,尤其是对于没接触过的人来说,安装过程好多问题都莫名其妙。
1、服务器上我测试的es版本与logstash版本均是7.5。首先安装logstash,去官网下载对应版本的zip包,下载后解压到目录即可:
2、在bin目录下新建一个配置文件sql2es.conf(文件名自定,但是扩展名得是conf),用来指定要从哪个数据库同步数据到es索引库。具体配置可自行百度,需要注意的是红框里的。jdbc_driver_library配置的是logstash要使用的jdbc驱动,你访问mysql就去下载mysql的驱动jar包,访问sqlserver就去下载sqlserver的驱动jar包,下载完毕后这里配置成本地jar包的位置就好。我使用的是mysql-connector-java-8.0.18.jar,对应下面一行的jdbc_driver_class要配置成“com.mysql.cj.jdbc.Driver”,否则会出错。原来老版本配置的是com.mysql.jdbc.Driver,这里要特别注意。我测试的配置是从本地的mysql数据库中的t_owner表同步数据到es索引testdata下,文档类型为owner。
3、cmd进入到logstash的斌目录下,运行一下看看行不行:logstash -f sql2es.conf:-f表示按照指定的配置文件来运行。这么顺利吗?果然还是出错了:报错:com.mysql.jdbc.Driver not loaded. Are you sure you've included the correct jdbc driver in :jdbc_driver_library? 上网一查说是本地logstash-input-jdbc没有安装好,但是要安装这个东东,需要去更新ruby的某些文件,因为logstash使用ruby语言写的。
4、修改logstash根目录下的Gemfile文件,把source改成“https://gems.ruby-china.com/”。这个东东是用来指定ruby源的,国内的源下载安装速度比较快。
5、运行logstash-plugin install logstash-input-jdbc。应该会提示安装成功。再运行一下logstash -f sql2es.conf看看行不行,然并卵,问题依旧。继续上网各种搜各种试,终于发现一篇帖子:https://www.jianshu.com/p/0e893f29ee05,有提到是这个版本有bug,需要升级(心中顿时万马奔腾...)。我本地的默认版本是4.3.16,不好使。
6、去github下载最新版(当前最新版本是4.3.19)zip包,下载后解压并在本地编译生成gem文件并安装。
运行gem build logstash-input-jdbc.gemspec,生成.gem文件:
运行logstash-plugin.bat install logstash-input-jdbc-4.3.19.gem,在本地安装最新版本:
7、再试试,运行logstash -f sql2es.conf。终于不报错了,但是报mysql的timezone时区错误。这个好办,去mysql里设置一下默认时区:
8、再次尝试,成功了!它终于开始干活了。满屏的数据滚动起来罗。
注意,如果本地没有安装ruby的话,前面步骤中的gem命令运行不起来。去官网下载一个最新版安装就好(可能需要重启服务器):https://rubyinstaller.org/downloads/