jdbc

  • 插件版本:v4.3.13
  • 发布于:2018-09-04
  • 更新日志

对于其他版本,请参阅 插件版本文档

帮助

有关插件的问题,请在 论坛 中创建一个主题。对于bug或功能请求,请在 Github 创建issue。有关Elastic支持插件的列表,请参阅 Elastic支持列表

说明

此插件可以从JDBC数据库中提取数据到Logstash中。您可以使用cron语法定期抽取(请参阅 schedule 设置),或运行查询将数据加载到Logstash中。结果集中的每一行都成为一个事件,将列转换为事件中的字段。

驱动

此插件未集成JDBC驱动库。必须配置 jdbc_driver_library 选项,并将所需的jdbc驱动库显式载入插件。

定时任务

设置此插件的输入根据特定时间表定期运行。此调度语法由 rufus-scheduler 提供支持。语法类似于cron,具有特定于Rufus的一些扩展(例如,时区支持)。

例子:

语法 说明
* 5 * 1-3 * 每年1-3月的每天上午5点,每分钟执行一次
0 * * * * 每天每小时的第0分钟执行
0 6 * * * America/Chicago UTC/GMT -5时区,每天上午6点执行

可以在此处找到描述此语法的 更多文档

状态

该插件将以元数据的格式持久化 sql_last_value 参数,存储在的 last_run_metadata_path 的文件中。执行查询时,将使用 sql_last_value 的当前值覆盖此文件中的参数。下次管道启动时,将通过读取文件来更新此值。如果 clean_run 设置为 true,则将忽略此值,并且sql_last_value 将设置为1970年1月1日,如果 use_column_value 为true,则为0,就好像没有执行任何查询一样。

大数据结果集

许多JDBC驱动程序使用 fetch_size 参数,来限制从游标到客户端缓存中一次预取的结果数,然后从结果集中检索更多结果。这是使用 jdbc_fetch_size 参数进行配置的。此插件默认情况下未设置提取大小,因此将使用指定驱动程序的默认大小。

用法

以下是设置插件以从MySQL数据库获取数据的示例。首先,我们将适当的JDBC驱动程序库放在当前路径中(这可以放在文件系统的任何位置)。在这个例子中,我们使用 user:mysql 连接到mydb数据库,并希望在songs表中输入与特定艺术家匹配的所有行。以下示例演示了可能的Logstash配置。此示例中的schedule选项将使插件每分钟执行此输入语句。

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

此输入需要sql语句。这可以通过字符串形式传入,也可以从文件(statement_filepath)读取。当SQL语句很大或很难在配置中提供时,通常使用文件选项。 文件选项仅支持一个SQL语句。该插件只接受其中一种形式。它无法同时从文件和语句配置参数中读取语句。

配置多个SQL

当需要从不同数据库表或视图中提取数据时,配置多个SQL语句非常有用。可以为每个语句定义单独的Logstash配置文件,也可以在单个配置文件中定义多个语句。在单个Logstash配置文件中使用多个语句时,必须将每个语句定义为单独的jdbc输入(包括jdbc驱动程序,连接字符串和其他必需参数)。

请注意,如果任何语句使用 sql_last_value 参数(例如,仅用于采集自上次运行以来的增量更改数据),则每个输入应定义其自己的 last_run_metadata_path 参数。如果不这样做所有输入都会将其状态存储到相同(默认)元数据文件中,会覆盖彼此的 sql_last_value,而导致意外的结果。

预定义参数

某些参数是内置的,可以在查询中使用。 如下:

sql_last_value :用于计算要查询的行的值。 在运行首次查询之前,其被设置为1970年1月1日星期四,如果 use_column_value 为true,并且设置了 tracking_column,则设置为0。 在后续查询运行后,它会相应更新。

例:

input {
  jdbc {
    statement => "SELECT id, mycolumn1, mycolumn2 FROM my_table WHERE id > :sql_last_value"
    use_column_value => true
    tracking_column => "id"
    # ... other configuration bits
  }
}

JDBC输入配置项

此插件支持以下配置选项以及稍后描述的 通用配置项

设置 输入类型 必须
clean_run boolean
columns_charset hash
connection_retry_attempts number
connection_retry_attempts_wait_time number
jdbc_connection_string string
jdbc_default_timezone string
jdbc_driver_class string
jdbc_driver_library string
jdbc_fetch_size number
jdbc_page_size number
jdbc_paging_enabled boolean
jdbc_password password
jdbc_password_filepath path
jdbc_pool_timeout number
jdbc_user string
jdbc_validate_connection boolean
jdbc_validation_timeout number
last_run_metadata_path string
lowercase_column_names boolean
parameters hash
record_last_run boolean
schedule string
sequel_opts hash
sql_log_level string,值包含 ["fatal", "error", "warn", "info", "debug"]
statement string
statement_filepath path
tracking_column string
tracking_column_type string,值包含["numeric", "timestamp"]
use_column_value boolean

另请参阅 通用配置项 以获取所有输入插件支持的选项列表。

clean_run
  • 值类型是 boolean
  • 默认值为false

是否应保留先前的运行状态

columns_charset
  • 值类型是 hash
  • 默认值为 {}

特定列的字符编码。此选项将覆盖指定列的:charset 选项。

例:

input {
  jdbc {
    ...
    columns_charset => { "column0" => "ISO-8859-1" }
    ...
  }
}

这只会将具有ISO-8859-1的column0转换为原始编码。

connection_retry_attempts
  • 值类型是 number
  • 默认值为 1

尝试连接数据库的最大次数

connection_retry_attempts_wait_time
  • 值类型是 number
  • 默认值为0.5

连接尝试之间休眠的秒数

jdbc_connection_string
  • 这是必需的设置。
  • 值类型是 string
  • 此设置没有默认值。

JDBC连接字符串

jdbc_default_timezone
  • 值类型是 string
  • 此设置没有默认值。

时区转换。SQL不允许时间戳字段中的时区数据。此插件将自动将SQL时间戳字段转换为Logstash时间戳,采用ISO8601格式的相对UTC时间。

使用此设置将手动分配指定的时区偏移量,而不是使用本地计算机的时区设置。例如,您必须使用规范时区, America/Denver

jdbc_driver_class
  • 这是必需的设置。
  • 值类型是 string
  • 此设置没有默认值。

如果您使用的是Oracle JDBC,则需要加载JDBC驱动程序类,例如"org.apache.derby.jdbc.ClientDriver" NB https://github.com/logstash-plugins/logstash-input-jdbc/issues/43 驱动(ojdbc6.jar)正确的 jdbc_driver_class"Java::oracle.jdbc.driver.OracleDriver"

jdbc_driver_library
  • 值类型是 string
  • 此设置没有默认值。

试图将JDBC逻辑抽象为mixin,以便在其他插件中进行重用(输入/输出)当有人包含此模块时调用此方法将这些方法添加到给定的基础。 JDBC驱动程序库到第三方驱动程序库的路径。如果需要多个库,您可以用逗号分隔它们。

如果没有提供,Plugin将在Logstash Java类路径中查找驱动程序类。

jdbc_fetch_size
  • 值类型是 number
  • 此设置没有默认值。

JDBC获取大小。如果没有提供,将使用相应的驱动程序默认值

jdbc_page_size
  • 值类型是 number
  • 默认值为 100000

JDBC页面大小

jdbc_paging_enabled
  • 值类型是 boolean
  • 默认值为 false

JDBC启用分页

这将导致sql语句被分解为多个查询。每个查询将使用限制和偏移来共同检索完整的结果集。限制大小使用 jdbc_page_size 设置。

请注意,查询顺序无法保证。

jdbc_password
  • 值类型是 password
  • 此设置没有默认值。

JDBC密码

jdbc_password_filepath
  • 值类型是 path
  • 此设置没有默认值。

JDBC密码文件名

jdbc_pool_timeout
  • 值类型是 number
  • 默认值为 5

连接池配置。在引发PoolTimeoutError之前等待获取连接的秒数(默认值为5)

jdbc_user
  • 这是必需的设置。
  • 值类型是 string
  • 此设置没有默认值。

JDBC用户

jdbc_validate_connection
  • 值类型是 boolean
  • 默认值为 false

连接池配置。使用前验证连接。

jdbc_validation_timeout
  • 值类型是 number
  • 默认值为 3600

连接池配置。验证连接的频率(以秒为单位)

last_run_metadata_path
  • 值类型是 string
  • 默认值为 "$HOME/.logstash_jdbc_last_run"

上次运行时文件的路径

lowercase_column_names
  • 值类型是 boolean
  • 默认值为 true

是否强制标识符字段的小写

parameters
  • 值类型是 hash
  • 默认值为 {}

查询参数的哈希值,例如 { "target_id" => "321" }

record_last_run
  • 值类型是 boolean
  • 默认值为 true

是否在 last_run_metadata_path 中保存状态

schedule
  • 值类型是 string
  • 此设置没有默认值。

以Cron格式定期运行语句的时间表,例如:" *"(每分钟执行查询)

默认情况下没有计划。如果没有给出计划,那么该语句只运行一次。

sequel_opts
  • 值类型是 hash
  • 默认值为 {}

一般/供应商特定的续集配置选项。

可选连接池配置示例 max_connections — 连接池的最大连接数

特定于供应商的选项的示例可以在本文档页面中找到:https://github.com/jeremyevans/sequel/blob/master/doc/opening_databases.rdoc

sql_log_level
  • 值类型是 string,值包含 ["fatal", "error", "warn", "info", "debug"]
  • 默认值为 "info"

记录SQL查询的日志级别,接受的值是常见的致命,错误,警告,信息和调试。默认值为info。

statement
  • 值类型是 string
  • 此设置没有默认值。

如果未定义,即使编解码器未使用,Logstash会提醒要执行的声明。

要使用参数,请使用命名参数语法。例如:

"SELECT * FROM MYTABLE WHERE id = :target_id"

此处,":target_id" 是一个命名参数。您可以使用 parameters 配置命名参数。

statement_filepath
  • 值类型是 path
  • 此设置没有默认值。

包含要执行的语句的文件路径

tracking_column
  • 值类型是 string
  • 此设置没有默认值。

如果 use_column_value 设置为 true,则要跟踪其值的列

tracking_column_type
  • 值类型是 string,值包含 numeric, timestamp
  • 默认值为 "numeric"

跟踪列的类型。目前只有 "numeric" 和 "timestamp"

use_column_value
  • 值类型是 boolean
  • 默认值为 false

设置为 true 时,使用定义的tracking_column 值作为 :sql_last_value。设置为 false 时,:sql_last_value 反映上次执行查询的时间。

通用配置项

所有输入插件都支持以下配置选项:

设置 输入类型 必须
add_field hash
codec codec
enable_metric boolean
id string
tags array
type string

详情

add_field
  • 值类型是 hash
  • 默认值为 {}

向事件添加字段

codec
  • 值类型是 codec
  • 默认值是 "plain"

用于输入数据的编解码器。输入编解码器是一种在输入之前解码数据的便捷方法,无需在Logstash管道中使用单独的过滤器。

enable_metric
  • 值类型是 boolean
  • 默认值为 true

默认情况下,禁用或启用此特定插件实例的度量记录,我们会记录所有的可用度量,但您可以禁用特定插件的度量收集。

id
  • 值类型是 string
  • 此设置没有默认值。

为插件配置添加唯一 ID。如果未指定ID,Logstash将生成一个ID。强烈建议在配置中设置此ID。当您有两个或更多相同类型的插件时,这尤其有用,例如,如果您有2个beat输入,添加命名ID将有助于使用API监视Logstash。

input {
  jdbc {
    id => "my_plugin_id"
  }
}
tags
  • 值类型是 array
  • 此设置没有默认值。

为您的活动添加任意数量的任意标签。

这有助于后续处理。

type
  • 值类型是 string
  • 此设置没有默认值。

type 字段添加到此输入处理的所有事件。

类型主要用于过滤器激活。

类型存储为事件本身的一部分,因此您也可以使用该类型在Kibana中搜索它。

如果您尝试在已有事件的事件上设置类型(例如,当您将事件从发运人发送到索引器时),则新输入将不会覆盖现有类型。发运人设置的类型即使在发送到另一个Logstash服务器时,仍会保留。

results matching ""

    No results matching ""