采集PostgreSQL查詢結(jié)果
本文中含有需要您注意的重要提示信息,忽略該信息可能對(duì)您的業(yè)務(wù)造成影響,請(qǐng)務(wù)必仔細(xì)閱讀。
本文介紹如何通過(guò)日志服務(wù)控制臺(tái)創(chuàng)建Logtail采集配置來(lái)采集PostgreSQL查詢結(jié)果。
前提條件
已在服務(wù)器上安裝Linux Logtail 0.16.0及以上版本或Windows Logtail 1.0.0.8及以上版本。具體操作,請(qǐng)參見安裝Logtail(Linux系統(tǒng))或安裝Logtail(Windows系統(tǒng))。
重要請(qǐng)確保用于安裝Logtail的服務(wù)器可連接目標(biāo)數(shù)據(jù)庫(kù)。
在PostgreSQL數(shù)據(jù)庫(kù)中,設(shè)置白名單為L(zhǎng)ogtail所在服務(wù)器的IP地址。
例如RDS PostgreSQL數(shù)據(jù)庫(kù)的白名單設(shè)置,請(qǐng)參見設(shè)置白名單。
原理
Logtail根據(jù)Logtail采集配置定期執(zhí)行指定的SELECT語(yǔ)句,將查詢結(jié)果作為數(shù)據(jù)上傳到日志服務(wù)。
Logtail獲取到查詢結(jié)果時(shí),會(huì)將結(jié)果中的CheckPoint字段保存到本地。當(dāng)下次執(zhí)行SELECT語(yǔ)句時(shí),會(huì)將上一次保存的CheckPoint帶入到SELECT語(yǔ)句中,以此實(shí)現(xiàn)增量數(shù)據(jù)采集。
開啟CheckPoint時(shí),需要在SELECT語(yǔ)句中對(duì)CheckPoint字段進(jìn)行排序,否則會(huì)造成數(shù)據(jù)重復(fù)或其他問(wèn)題。
功能
支持采集PostgreSQL數(shù)據(jù)庫(kù)的查詢結(jié)果。
支持分頁(yè)設(shè)置。
支持時(shí)區(qū)設(shè)置。
支持超時(shí)設(shè)置。
支持保存CheckPoint狀態(tài)。
支持限制每次最大采集數(shù)量。
應(yīng)用場(chǎng)景
根據(jù)數(shù)據(jù)中的自增ID或時(shí)間等標(biāo)識(shí)采集增量數(shù)據(jù)。
根據(jù)篩選條件自定義同步。
操作步驟
在接入數(shù)據(jù)區(qū)域,選擇自定義數(shù)據(jù)插件。
- 選擇目標(biāo)Project和Logstore,單擊下一步。
在機(jī)器組配置頁(yè)面,配置機(jī)器組。
根據(jù)實(shí)際需求,選擇使用場(chǎng)景和安裝環(huán)境。
重要無(wú)論是否已有機(jī)器組,都必須根據(jù)實(shí)際需求正確選擇使用場(chǎng)景和安裝環(huán)境,這將影響后續(xù)的頁(yè)面配置。
確認(rèn)目標(biāo)機(jī)器組已在應(yīng)用機(jī)器組區(qū)域,單擊下一步。
已有機(jī)器組
從源機(jī)器組列表選擇目標(biāo)機(jī)器組。
沒(méi)有可用機(jī)器組
單擊創(chuàng)建機(jī)器組,在創(chuàng)建機(jī)器組面板設(shè)置相關(guān)參數(shù)。機(jī)器組標(biāo)識(shí)分為IP地址和用戶自定義標(biāo)識(shí),更多信息請(qǐng)參見創(chuàng)建用戶自定義標(biāo)識(shí)機(jī)器組(推薦)或創(chuàng)建IP地址機(jī)器組。
重要創(chuàng)建機(jī)器組后立刻應(yīng)用,可能因?yàn)檫B接未生效,導(dǎo)致心跳為FAIL,您可單擊重試。如果還未解決,請(qǐng)參見Logtail機(jī)器組無(wú)心跳進(jìn)行排查。
在數(shù)據(jù)源設(shè)置頁(yè)簽中,設(shè)置配置名稱和插件配置,單擊下一步。
inputs為數(shù)據(jù)源配置,必選項(xiàng)。
重要一個(gè)inputs中只允許配置一個(gè)類型的數(shù)據(jù)源。
processors為處理配置,用于解析數(shù)據(jù)。可選項(xiàng),您可以配置一種或多種處理方式。
如果當(dāng)前的inputs配置無(wú)法滿足日志解析需求,您可以在插件配置中添加processors配置,即添加Logtail插件處理數(shù)據(jù)。例如提取字段、提取日志時(shí)間、脫敏數(shù)據(jù)、過(guò)濾日志等。更多信息,請(qǐng)參見使用Logtail插件處理數(shù)據(jù)。
{ "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 } } ] }
參數(shù)
類型
是否必選
說(shuō)明
type
string
是
數(shù)據(jù)源類型,固定為service_pgsql。
Address
string
否
PostgreSQL地址。例如
pgm-****.pg.rds.aliyuncs.com
。不配置時(shí),默認(rèn)使用127.0.0.1:5432。
User
string
否
用于登錄PostgreSQL數(shù)據(jù)庫(kù)的賬號(hào)名稱。
不配置時(shí),默認(rèn)使用root。
Password
string
否
用于登錄PostgreSQL數(shù)據(jù)庫(kù)的賬號(hào)密碼。不配置時(shí),默認(rèn)為空。
如果安全需求較高,建議將用戶名和密碼配置為
xxx
,待采集配置同步至本地機(jī)器后,在本地文件/usr/local/ilogtail/user_log_config.json找到對(duì)應(yīng)配置進(jìn)行修改。具體操作,請(qǐng)參見修改本地配置。重要如果您在控制臺(tái)上修改了此參數(shù),同步至本地后會(huì)覆蓋當(dāng)前本地的配置。
DataBase
string
否
PostgreSQL數(shù)據(jù)庫(kù)名稱。
DialTimeOutMs
int
否
連接PostgreSQL數(shù)據(jù)庫(kù)超時(shí)時(shí)間,單位:ms。
不配置時(shí),默認(rèn)使用5000 ms。
ReadTimeOutMs
int
否
讀取PostgreSQL查詢結(jié)果的超時(shí)時(shí)間,單位:ms。
不配置時(shí),默認(rèn)使用5000 ms。
StateMent
string
否
SELECT語(yǔ)句。
設(shè)置CheckPoint為true時(shí),StateMent中SELECT語(yǔ)句的where條件中必須包含CheckPoint列(CheckPointColumn參數(shù)),并將該列的值設(shè)置為$1。例如:設(shè)置CheckPointColumn為id,設(shè)置StateMent為
SELECT * from ... where id > $1
。Limit
boolean
否
是否使用Limit分頁(yè)。
不配置時(shí),默認(rèn)使用false,表示不使用Limit分頁(yè)。
建議使用Limit進(jìn)行分頁(yè)。設(shè)置Limit為true后,進(jìn)行SQL查詢時(shí),會(huì)自動(dòng)在StateMent中追加LIMIT語(yǔ)句。
PageSize
int
否
分頁(yè)大小,Limit為true時(shí)必須配置。
MaxSyncSize
int
否
每次同步最大記錄數(shù)。
不配置時(shí),默認(rèn)使用0,表示無(wú)限制。
CheckPoint
boolean
否
是否使用CheckPoint。
不配置時(shí),默認(rèn)使用false,表示不使用CheckPoint。
CheckPointColumn
string
否
CheckPoint列名稱。
CheckPoint為true時(shí)必須配置。
警告該列的值必須遞增,否則可能會(huì)出現(xiàn)數(shù)據(jù)漏采集問(wèn)題(每次查詢結(jié)果中的最大值將作為下次查詢的輸入)。
CheckPointColumnType
string
否
CheckPoint列的數(shù)據(jù)類型,支持int和time。int類型的內(nèi)部存儲(chǔ)為int64,time類型支持PostgreSQL的時(shí)間類型。
CheckPoint為true時(shí)必須配置。
CheckPointStart
string
否
CheckPoint列的初始值。
CheckPoint為true時(shí)必須配置。
CheckPointSavePerPage
boolean
否
是否每次分頁(yè)時(shí)保存一次CheckPoint。
true:每次分頁(yè)時(shí)保存一次CheckPoint。
false:每次同步完成后保存一次CheckPoint。
IntervalMs
int
是
同步間隔,單位:ms。
創(chuàng)建索引和預(yù)覽數(shù)據(jù),然后單擊下一步。日志服務(wù)默認(rèn)開啟全文索引。您也可以根據(jù)采集到的日志,手動(dòng)創(chuàng)建字段索引,或者單擊自動(dòng)生成索引,日志服務(wù)將自動(dòng)生成字段索引。更多信息,請(qǐng)參見創(chuàng)建索引。
重要如果需要查詢?nèi)罩局械乃凶侄危ㄗh使用全文索引。如果只需查詢部分字段、建議使用字段索引,減少索引流量。如果需要對(duì)字段進(jìn)行分析(SELECT語(yǔ)句),必須創(chuàng)建字段索引。
- 單擊查詢?nèi)罩?/b>,系統(tǒng)將跳轉(zhuǎn)至Logstore查詢分析頁(yè)面。您需要等待1分鐘左右,待索引生效后,才能在原始日志頁(yè)簽中,查看已采集到的日志。更多信息,請(qǐng)參見查詢和分析日志。
修改本地配置
如果您沒(méi)有在插件配置中輸入真實(shí)的Address、User、Password等信息,可以在采集配置下發(fā)到本地后進(jìn)行手動(dòng)修改。
Linux系統(tǒng)
登錄Logtail所在服務(wù)器。
打開/usr/local/ilogtail/user_log_config.json文件,找到service_pgsql關(guān)鍵字,修改Address、User、Password等字段。
執(zhí)行以下命令重啟Logtail。
sudo /etc/init.d/ilogtaild stop; sudo /etc/init.d/ilogtaild start
Windows系統(tǒng)
登錄Logtail所在服務(wù)器。
打開C:\Program Files\Alibaba\Logtail\user_log_config.json文件,找到service_pgsql關(guān)鍵字,修改Address、User、Password等字段。
Windows 64位操作系統(tǒng)和Windows 32位操作系統(tǒng)文件位置不同,具體請(qǐng)參見文件路徑。
執(zhí)行以下命令重啟Logtail。
選擇
。在服務(wù)對(duì)話框中,選擇對(duì)應(yīng)的服務(wù)。
如果是0.x.x.x版本,選擇LogtailWorker服務(wù)。
如果是1.0.0.0及以上版本,選擇LogtailDaemon服務(wù)。
右鍵選擇對(duì)應(yīng)的操作,包括啟動(dòng)、停止或重新啟動(dòng)。
問(wèn)題排查
使用Logtail采集日志后,如果預(yù)覽頁(yè)面或查詢頁(yè)面無(wú)數(shù)據(jù),您可以參見Logtail采集日志失敗的排查思路進(jìn)行排查。
數(shù)據(jù)庫(kù)表和日志樣例
PostgreSQL數(shù)據(jù)庫(kù)表結(jié)構(gòu)樣例和Logtail采集到的日志樣例如下所示。
表結(jié)構(gòu)樣例
//創(chuàng)建表。 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) ); //插入數(shù)據(jù)。 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);
日志樣例