参考资料:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html
Jdbc input plugin
描述
使用jdbc input插件,可以将符合jdbc规范的数据库中的数据导入到logstash中。你可以使用cron语法来定期的导入数据,也可以只运行一次载入全部的数据。从数据库抽取的结果集(resultset)中的每一行(row)会转化成logstash的一个事件(event),而结果集中的每一列(column)会转化成为一个field。
驱动
该插件不包含任何的jdbc驱动包,需要在参数jdbc_driver_library 中配置相应的jar包路径。
调度
该插件可以根据设置的调度器定期的执行。配置调度的语法由 rufus-scheduler提供,该语法在cron语法的基础上进行了一些扩展(例如,时区支持).
示例:
* 5 * 1-3 * 从一月到三月,每天早上5点的每分钟都会执行
0 * * * * 每天每小时的第0分钟执行
0 6 * * * America/Chicago 每天的6:00am(UTC/GMT -5)执行
状态
该插件可以将sql_last_value对应的内容存储到相关的metadata文件中,存储的路径由last_run_metadata_path指定。当执行一个查询的时候,metadata文件会被更新成sql_last_value对应的值。等到下次执行该查询时,logstash会读取metadata文件,并更新sql_last_value。
处理大的结果集
一些jdbc驱动会使用fetch_size来限制从数据库服务端提前请求(pre-fetch)的数据量。可以修改jdbc_fetch_size 参数改变pre-fetch的数量。
示例
下面是一个从MySQL数据库中导入数据的例子。
input {
jdbc {
jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
jdbc_user => "mysql"
parameters => { "favorite_artist" => "Beethoven" }
schedule => "* * * * *"
statement => "SELECT * from songs where artist = :favorite_artist"
}}
配置SQL statement
每个input都需要一个sql statement。Sql statement可以按照字符串的形式传递给statement参数,也可以单独写到一个文件中,然后将文件路径传递给statement_filepath。当sql语句过长时,往往使用文件选项。
配置多个SQL statement
当需要从多个数据库或者多个表中查询数据时,可以配置多个sql statement。可以定义多个logstash配置文件,每个文件中配置一个SQL statement。也可以定义一个logstah配置文件,然后在一个文件中配置多个SQL statement。当在一个文件中定义多个SQL statement时,每个SQL statement要配置独立的jdbc input(包括jdbc驱动,connection string,以及其他的参数)。
注意如果多个sql statement使用到了sql_last_value,一定要为每一个sql statement配置其自己的last_run_metadata_path参数。如果不这么做,多个sql statement会修改同一个metadata文件,造成错误的运行结果。