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