最近接到一个任务,用ELK展示MySQL数据库中的数据。接到任务的时候,认为这就是小菜一碟,因为我已经做过类似的任务,从MySQL中取数据,用ELK展示数据。
将以前用过的logstash的conf文件简单修改一下,就应该没问题了:
jdbc {
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://192.168.0.141:3306/test"
jdbc_user => "user"
jdbc_password => "password"
schedule => "* * * * *"
clean_run => "false"
statement_filepath => "SQL\cr1top31.sql"
jdbc_paging_enabled => "true"
jdbc_page_size => "100000"
use_column_value => true
tracking_column => "Offload"
tracking_column_type => "numeric"
last_run_metadata_path => "meta\cr1top31"
type => "cr1top31"
}
运行之后,出现如下错误
[ERROR][logstash.inputs.jdbc ] Unable to connect to database. Tried 1 times {:error_message=>"Java::JavaSql::SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required"}
查了一下,网友们都是说由于JDBC版本过高导致的。于是查看了官方的JDBC8.0.11的说明:
https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8-0-11.html
里面确实只提到了它支持的MySQL版本为8.0, 5.7, 5.6, and 5.5:
于是从如下链接下载了一个5.0.8的JDBC:
https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.0.8
下载的jar包放在哪儿呢?
由于我之前的jdbc8.0.11已经存放在了默认的jar包文件夹logstash-7.3.1\logstash-core\lib\jars下面,所以新下载的JDBC就存放在自建文件夹 logstash-7.3.1\connector下,并且更改了logstash的配置文件:
jdbc {
jdbc_driver_library => "..\connector\mysql-connector-java-5.0.8.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://192.168.0.141:3306/test"
jdbc_user => "user"
jdbc_password => "password"
schedule => "* * * * *"
clean_run => "false"
statement_filepath => "SQL\cr1top31.sql"
jdbc_paging_enabled => "true"
jdbc_page_size => "100000"
use_column_value => true
tracking_column => "Offload"
tracking_column_type => "numeric"
last_run_metadata_path => "meta\cr1top31"
type => "cr1top31"
}
启动运行之后,故障依旧
[ERROR][logstash.inputs.jdbc ] Unable to connect to database. Tried 1 times {:error_message=>"Java::JavaSql::SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required"}
大神可能已经看出问题所在了,其实问题在于我的jdbc_driver_library设置的有问题。
jdbc_driver_library => "..\connector\mysql-connector-java-5.0.8.jar"
这个键值必须是以"/“而不是”\"进行文件夹层级分割,否则logstash就认为jdbc_driver_library键的设置无效,仍然去默认的Jar包文件夹里面去寻找JDBC,所以仍然找到的是JDBC8.0.11.
更改配置,用"/“替换”\":
jdbc_driver_library => "../connector/mysql-connector-java-5.0.8.jar"
问题解决。
总结:
Logstash的配置文件中,涉及到文件夹层级分割符的时候,要注意,因为有的键支持"\“作为分隔符,比如jdbc input plugin的
statement_filepath
last_run_metadata_path
但是有的键就只能用”/"作为分隔符,比如jdbc input plugin的jdbc_driver_library,file input plugin 的path键