1. 程式人生 > >logstash jdbc input外掛

logstash jdbc input外掛

參考資料: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檔案,造成錯誤的執行結果。