延用上篇ELK所需環境,新增logstash配置文件
需要數據庫鏈接驅動 Microsoft JDBC driver 6.2 for SQL Server
下載地址: https://www.microsoft.com/zh-CN/download/details.aspx?id=55539
在 logstash 的 bin 文件夾下 新增文件夾 jdbcconfig 以及如下文件
新增 Logstash 配置文件 jdbc.conf
input { jdbc { jdbc_driver_library => "D:\ELK_logs\logstash-6.3.2\bin\jdbcconfig\mssql-jdbc-6.2.2.jre8.jar" jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver" jdbc_connection_string => "jdbc:sqlserver://192.168.100.51:1433;DatabaseName=BTPreservation;" jdbc_user => "sa" jdbc_password => "Rl123456" # schedule => 分 時 天 月 年 # schedule => * 22 * * * //will execute at 22:00 every day schedule => "* * * * *" jdbc_paging_enabled => true jdbc_page_size => 1000 clean_run => false use_column_value => true #設置查詢條件的字段 tracking_column => FID record_last_run => true last_run_metadata_path => "D:\ELK_logs\logstash-6.3.2\bin\jdbcconfig\FID.txt" #設置列名小寫 lowercase_column_names => false statement_filepath => "D:\ELK_logs\logstash-6.3.2\bin\jdbcconfig\x_Loan_PreservationAdvanceList.sql" #索引的類型 type => "advancelist" } } output { elasticsearch { hosts => ["192.168.100.50:9200"] index => "advancelist" document_id => "%{FID}" } stdout { #codec => json_lines #設置輸出的格式 codec => line { format => "FID: %{[FID]} FPersonName: %{[FPERSONNAME]} FAddTime: %{[FADDTIME]}" } } }
- 這里是將最后一次查詢所得的最大ID 存儲下來,每次執行 同步是 將此ID 設置為查詢條件,獲取增量數據,如果我們使用最后更新時間作為判斷條件,則可以獲取整張表最新數據
FID.txt 存儲查詢條件 ,配置好后自動生成
x_Loan_PreservationAdvanceList.sql 需要同步數據執行的Sql
SELECT * FROM dbo.x_Loan_PreservationAdvanceList WHERE FID > :sql_last_value
注意:啟動時因為是同台機器運行多個logstash實例,所以需要指定不同的數據存儲目錄 path.Data
執行命令:
.\logstash -f .\jdbcconfig\jdbc.conf --path.data=/jdbcconfig/
執行后成功后,在 kibana 創建 索引
因為我們執行命令時,使用的時 cmd 窗口,當你向同步的數據庫表中新增數據是,會實時在 cmd 窗口看到同步情況
后面我們也可以使用 NSSM 工具將其安裝成服務運行
思考:如果我們要同步多張表該如何處理?,什么樣的場景需要這樣的同步。