本文介紹如何通過Log Service控制台建立Logtail採集配置來採集PostgreSQL查詢結果。
前提條件
已在伺服器上安裝Linux Logtail 0.16.0及以上版本或Windows Logtail 1.0.0.8及以上版本。具體操作,請參見安裝Logtail(Linux系統)或安裝Logtail(Windows系統)。
重要請確保用於安裝Logtail的伺服器可串連目標資料庫。
在PostgreSQL資料庫中,設定白名單為Logtail所在伺服器的IP地址。
例如RDS PostgreSQL資料庫的白名單設定,請參見設定白名單。
原理
Logtail根據Logtail採集配置定期執行指定的SELECT語句,將查詢結果作為資料上傳到Log Service。
Logtail擷取到查詢結果時,會將結果中的CheckPoint欄位儲存到本地。當下次執行SELECT語句時,會將上一次儲存的CheckPoint帶入到SELECT語句中,以此實現增量資料擷取。
開啟CheckPoint時,需要在SELECT語句中對CheckPoint欄位進行排序,否則會造成資料重複或其他問題。
功能
支援採集PostgreSQL資料庫的查詢結果。
支援分頁設定。
支援時區設定。
支援逾時設定。
支援儲存CheckPoint狀態。
支援限制每次最大採集數量。
應用情境
根據資料中的自增ID或時間等標識採集增量資料。
根據篩選條件自訂同步。
操作步驟
在接入資料地區,選擇自訂資料外掛程式。
選擇目標Project和Logstore,單擊下一步。
在機器組配置頁面,配置機器組。
根據實際需求,選擇使用情境和安裝環境。
重要無論是否已有機器組,都必鬚根據實際需求正確選擇使用情境和安裝環境,這將影響後續的頁面配置。
確認目標機器組已在應用機器組地區,單擊下一步。
已有機器組
從源機器組列表選擇目標機器組。
沒有可用機器組
單擊建立機器組,在建立機器組面板設定相關參數。機器組標識分為IP地址和使用者自訂標識,更多資訊請參見建立使用者自訂標識機器組(推薦)或建立IP地址機器組。
重要建立機器組後立刻應用,可能因為串連未生效,導致心跳為FAIL,您可單擊重試。如果還未解決,請參見Logtail機器組無心跳進行排查。
在資料來源設定頁簽中,設定配置名稱和外掛程式配置,單擊下一步。
inputs為資料來源配置,必選項。
重要一個inputs中只允許配置一個類型的資料來源。
processors為處理配置,用於解析資料。可選項,您可以配置一種或多種處理方式。
如果當前的inputs配置無法滿足日誌解析需求,您可以在外掛程式配置中添加processors配置,即添加Logtail外掛程式處理資料。例如提取欄位、提取日誌時間、脫敏資料、過濾日誌等。更多資訊,請參見使用Logtail外掛程式處理資料。
{ "inputs": [ { "type": "service_pgsql", "detail": { "Address": "pgm-****.pg.rds.aliyuncs.com", "User": "****", "Password": "*******", "DataBase": "****", "Limit": true, "PageSize": 100, "StateMent": "select * from specialalarmtest where id > $1 order by id", "CheckPoint": true, "CheckPointColumn": "id", "CheckPointStart": "0", "CheckPointSavePerPage": true, "CheckPointColumnType": "int", "IntervalMs": 1000 } } ] }
參數
類型
是否必選
說明
type
string
是
資料來源類型,固定為service_pgsql。
Address
string
否
PostgreSQL地址。例如
pgm-****.pg.rds.aliyuncs.com
。不配置時,預設使用127.0.0.1:5432。
User
string
否
用於登入PostgreSQL資料庫的帳號名稱。
不配置時,預設使用root。
Password
string
否
用於登入PostgreSQL資料庫的帳號密碼。不配置時,預設為空白。
如果安全需求較高,建議將使用者名稱和密碼配置為
xxx
,待採集配置同步至本地機器後,在本地檔案/usr/local/ilogtail/user_log_config.json找到對應配置進行修改。具體操作,請參見修改本地配置。重要如果您在控制台上修改了此參數,同步至本地後會覆蓋當前本地的配置。
DataBase
string
否
PostgreSQL資料庫名稱。
DialTimeOutMs
int
否
串連PostgreSQL資料庫逾時時間,單位:ms。
不配置時,預設使用5000 ms。
ReadTimeOutMs
int
否
讀取PostgreSQL查詢結果的逾時時間,單位:ms。
不配置時,預設使用5000 ms。
StateMent
string
否
SELECT語句。
設定CheckPoint為true時,StateMent中SELECT語句的where條件中必須包含CheckPoint列(CheckPointColumn參數),並將該列的值設定為$1。例如:設定CheckPointColumn為id,設定StateMent為
SELECT * from ... where id > $1
。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類型支援PostgreSQL的時間類型。
CheckPoint為true時必須配置。
CheckPointStart
string
否
CheckPoint列的初始值。
CheckPoint為true時必須配置。
CheckPointSavePerPage
boolean
否
是否每次分頁時儲存一次CheckPoint。
true:每次分頁時儲存一次CheckPoint。
false:每次同步完成後儲存一次CheckPoint。
IntervalMs
int
是
同步間隔,單位:ms。
建立索引和預覽資料,然後單擊下一步。Log Service預設開啟全文索引。您也可以根據採集到的日誌,手動建立欄位索引,或者單擊自動產生索引,Log Service將自動產生欄位索引。更多資訊,請參見建立索引。
重要如果需要查詢日誌中的所有欄位,建議使用全文索引。如果只需查詢部分欄位、建議使用欄位索引,減少索引流量。如果需要對欄位進行分析(SELECT語句),必須建立欄位索引。
單擊查詢日誌,系統將跳轉至Logstore查詢分析頁面。您需要等待1分鐘左右,待索引生效後,才能在原始日誌頁簽中,查看已採集到的日誌。更多資訊,請參見查詢和分析日誌。
修改本地配置
如果您沒有在外掛程式配置中輸入真實的Address、User、Password等資訊,可以在採集配置下發到本地後進行手動修改。
Linux系統
登入Logtail所在伺服器。
開啟/usr/local/ilogtail/user_log_config.json檔案,找到service_pgsql關鍵字,修改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_pgsql關鍵字,修改Address、User、Password等欄位。
Windows 64位作業系統和Windows 32位作業系統檔案位置不同,具體請參見檔案路徑。
執行以下命令重啟Logtail。
選擇
。在服務對話方塊中,選擇對應的服務。
如果是0.x.x.x版本,選擇LogtailWorker服務。
如果是1.0.0.0及以上版本,選擇LogtailDaemon服務。
右鍵選擇對應的操作,包括啟動、停止或重新啟動。
相關文檔
Log Service為Linux系統提供Logtail自動診斷工具,可以根據工具提示快速定位並解決問題。請參見如何使用Logtail自動診斷工具。
使用Logtail採集日誌後,如果預覽頁面為空白或查詢頁面無資料,請按照Logtail採集日誌失敗的排查思路進行排查。
在使用Logtail採集日誌時,可能遇到正則解析失敗、檔案路徑不正確、流量超過Shard服務能力等錯誤。查看Logtail採集錯誤的步驟,請參見如何查看Logtail採集錯誤資訊。採集資料常見的錯誤類型請參見Log Service採集資料常見的錯誤類型。
預設情況下,一個記錄檔只能匹配一個Logtail配置。如果同一份日誌需要被採集多份,請參見如何?檔案中的日誌被採集多份。
將企業內網伺服器日誌採集到Log Service,請參見採集企業內網伺服器日誌。
不同伺服器上的日誌的儲存路徑或檔案名稱相同,需要區分不同伺服器,請參見機器組Topic屬性。區分不同使用者或執行個體產生的日誌資料,請參見檔案路徑正則。
資料庫表和日誌範例
PostgreSQL資料庫表結構範例和Logtail採集到的日誌範例如下所示。
表結構範例
//建立表。 CREATE TABLE IF NOT EXISTS specialalarmtest ( id BIGSERIAL NOT NULL, time TIMESTAMP NOT NULL, alarmtype varchar(64) NOT NULL, ip varchar(16) NOT NULL, COUNT INT NOT NULL, PRIMARY KEY (id) ); //插入資料。 insert into specialalarmtest (time, alarmtype, ip, count) values(now(), 'NO_ALARM', '10.10.***.***', 0); insert into specialalarmtest (time, alarmtype, ip, count) values(now(), 'NO_ALARM', '10.10.***.***', 1); insert into specialalarmtest (time, alarmtype, ip, count) values(now(), 'NO_ALARM', '10.10.***.***', 2); insert into specialalarmtest (time, alarmtype, ip, count) values(now(), 'NO_ALARM', '10.10.***.***', 3);
日誌範例