本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
本文介紹如何通過日志服務控制臺創建Logtail采集配置來采集SQL Server查詢結果。
前提條件
已在服務器上安裝Linux Logtail 0.16.0及以上版本或Windows Logtail 1.0.0.8及以上版本。具體操作,請參見安裝Logtail(Linux系統)或安裝Logtail(Windows系統)。
重要請確保用于安裝Logtail的服務器可連接目標數據庫。
在SQL Server數據庫中,設置白名單為Logtail所在服務器的IP地址。
例如RDS SQL Server數據庫的白名單設置,請參見設置白名單。
原理
Logtail根據Logtail采集配置定期執行指定的SELECT語句,將查詢結果作為數據上傳到日志服務。
Logtail獲取到查詢結果時,會將結果中的CheckPoint字段保存到本地。當下次執行SELECT語句時,會將上一次保存的CheckPoint帶入到SELECT語句中,以此實現增量數據采集。
開啟CheckPoint時,需要在SELECT語句中對CheckPoint字段進行排序,否則會造成數據重復或其他問題。
功能
支持采集SQL Server數據庫的查詢結果。
支持分頁設置。
支持時區設置。
支持超時設置。
支持保存CheckPoint狀態。
支持限制每次最大采集數量。
應用場景
根據數據中的自增ID或時間等標識采集增量數據。
根據篩選條件自定義同步。
操作步驟
登錄日志服務控制臺。
在接入數據區域,選擇自定義數據插件。
- 選擇目標Project和Logstore,單擊下一步。
在機器組配置頁面,配置機器組。
根據實際需求,選擇使用場景和安裝環境。
重要無論是否已有機器組,都必須根據實際需求正確選擇使用場景和安裝環境,這將影響后續的頁面配置。
確認目標機器組已在應用機器組區域,單擊下一步。
已有機器組
從源機器組列表選擇目標機器組。
沒有可用機器組
單擊創建機器組,在創建機器組面板設置相關參數。機器組標識分為IP地址和用戶自定義標識,更多信息請參見創建用戶自定義標識機器組(推薦)或創建IP地址機器組。
重要創建機器組后立刻應用,可能因為連接未生效,導致心跳為FAIL,您可單擊重試。如果還未解決,請參見Logtail機器組無心跳進行排查。
在數據源設置頁簽中,設置配置名稱和插件配置,單擊下一步。
inputs為數據源配置,必選項。
重要一個inputs中只允許配置一個類型的數據源。
processors為處理配置,用于解析數據。可選項,您可以配置一種或多種處理方式。
如果當前的inputs配置無法滿足日志解析需求,您可以在插件配置中添加processors配置,即添加Logtail插件處理數據。例如提取字段、提取日志時間、脫敏數據、過濾日志等。更多信息,請參見使用Logtail插件處理數據。
{ "inputs": [ { "type": "service_mssql", "detail": { "Address": "rm-****.sqlserver.rds.aliyuncs.com", "User": "****", "Password": "*******", "DataBase": "****", "Limit": true, "PageSize": 100, "StateMent": "select * from LogtailTestTable where id > ? order by id", "CheckPoint": true, "CheckPointColumn": "id", "CheckPointStart": "0", "CheckPointSavePerPage": true, "CheckPointColumnType": "int", "IntervalMs": 1000 } } ] }
參數
類型
是否必選
說明
type
string
是
數據源類型,固定為service_mssql。
Address
string
否
SQL Server地址。例如
rm-****.sqlserver.rds.aliyuncs.com
。不配置時,默認使用127.0.0.1:1433。
User
string
否
用于登錄SQL Server數據庫的賬號名稱。
不配置時,默認使用root。
Password
string
否
用于登錄SQL Server數據庫的賬號密碼。不配置時,默認為空。
如果安全需求較高,建議將用戶名和密碼配置為
xxx
,待采集配置同步至本地機器后,在本地文件/usr/local/ilogtail/user_log_config.json找到對應配置進行修改。具體操作,請參見修改本地配置。重要如果您在控制臺上修改了此參數,同步至本地后會覆蓋當前本地的配置。
DataBase
string
否
SQL Server數據庫名稱。
DialTimeOutMs
int
否
連接SQL Server數據庫的超時時間,單位:ms。
不配置時,默認使用5000 ms。
ReadTimeOutMs
int
否
讀取SQL Server查詢結果的超時時間,單位:ms。
不配置時,默認使用5000 ms。
StateMent
string
否
SELECT語句。
設置CheckPoint為true時,StateMent中SELECT語句的where條件中必須包含CheckPoint列(CheckPointColumn參數),并將該列的值設置為?。例如:設置CheckPointColumn為id,設置StateMent為
SELECT * from ... where id > ?
。Limit
boolean
否
是否使用Limit分頁。
不配置時,默認使用false,表示不使用Limit分頁。
建議使用Limit進行分頁。設置Limit為true后,進行SQL查詢時,會自動在StateMent中追加LIMIT語句。
PageSize
int
否
分頁大小,Limit為true時必須配置。
MaxSyncSize
int
否
每次同步最大記錄數。
不配置時,默認使用0,表示無限制。
CheckPoint
boolean
否
是否使用CheckPoint。
不配置時,默認使用false,表示不使用CheckPoint。
CheckPointColumn
string
否
CheckPoint列名稱。
CheckPoint為true時必須配置。
警告該列的值必須遞增,否則可能會出現數據漏采集問題(每次查詢結果中的最大值將作為下次查詢的輸入)。
CheckPointColumnType
string
否
CheckPoint列類型,支持int和time兩種類型。int類型的內部存儲為int64,time類型支持SQL Server的date、datetime、time。
CheckPoint為true時必須配置。
CheckPointStart
string
否
CheckPoint列的初始值。
CheckPoint為true時必須配置。
CheckPointSavePerPage
boolean
否
是否每次分頁時保存一次CheckPoint。
true:每次分頁時保存一次CheckPoint。
false:每次同步完成后保存一次CheckPoint。
IntervalMs
int
是
同步間隔,單位:ms。
創建索引和預覽數據,然后單擊下一步。日志服務默認開啟全文索引。您也可以根據采集到的日志,手動創建字段索引,或者單擊自動生成索引,日志服務將自動生成字段索引。更多信息,請參見創建索引。
重要如果需要查詢日志中的所有字段,建議使用全文索引。如果只需查詢部分字段、建議使用字段索引,減少索引流量。如果需要對字段進行分析(SELECT語句),必須創建字段索引。
- 單擊查詢日志,系統將跳轉至Logstore查詢分析頁面。您需要等待1分鐘左右,待索引生效后,才能在原始日志頁簽中,查看已采集到的日志。更多信息,請參見查詢和分析日志。
修改本地配置
如果您沒有在插件配置中輸入真實的Address、User、Password等信息,可以在采集配置下發到本地后進行手動修改。
Linux系統
登錄Logtail所在服務器。
打開/usr/local/ilogtail/user_log_config.json文件,找到service_mssql關鍵字,修改Address、User、Password等字段。
執行以下命令重啟Logtail。
sudo /etc/init.d/ilogtaild stop; sudo /etc/init.d/ilogtaild start
Windows系統
登錄Logtail所在服務器。
打開C:\Program Files\Alibaba\Logtail\user_log_config.json文件,找到service_mssql關鍵字,修改Address、User、Password等字段。
Windows 64位操作系統和Windows 32位操作系統文件位置不同,具體請參見文件路徑。
執行以下命令重啟Logtail。
選擇
。在服務對話框中,選擇對應的服務。
如果是0.x.x.x版本,選擇LogtailWorker服務。
如果是1.0.0.0及以上版本,選擇LogtailDaemon服務。
右鍵選擇對應的操作,包括啟動、停止或重新啟動。
問題排查
使用Logtail采集日志后,如果預覽頁面或查詢頁面無數據,您可以參見Logtail采集日志失敗的排查思路進行排查。
數據庫表和日志樣例
SQL Server數據庫表結構樣例和Logtail采集到的日志樣例如下所示。
表結構樣例
IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = 'LogtailTest') BEGIN CREATE DATABASE [LogtailTest] END GO USE [LogtailTest] GO IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='LogtailTestTable' and xtype='U') BEGIN CREATE TABLE LogtailTestTable ( id INT PRIMARY KEY IDENTITY (1, 1), name NVARCHAR(50), quantity INT ) END GO INSERT INTO LogtailTestTable (name, quantity) values('banana', 1); INSERT INTO LogtailTestTable (name, quantity) values('banana', 2); INSERT INTO LogtailTestTable (name, quantity) values('banana', 3); INSERT INTO LogtailTestTable (name, quantity) values('banana', 4); SELECT * FROM LogtailTestTable; GO
日志樣例