PostgreSQL日誌配置記錄

日誌審計 sql

審計是值記錄用戶的登錄退出以及登錄後在數據庫裏的行爲操做,能夠根據安全等級不同設置不同級別的審計, 數據庫

此處涉及的參數文件有:安全

 

logging_collector      --是否開啓日誌收集開關,默認off,開啓要重啓DB網絡

log_destination    --日誌記錄類型,默認是stderr,只記錄錯誤輸出session

log_directory      --日誌路徑,默認是$PGDATA/pg_log, 這個目錄最好不要和數據文件的目錄放在一塊兒, 目錄須要給啓動postgres的操做系統用戶寫權限.post

log_filename       --日誌名稱,默認是postgresql-%Y-%m-%d_%H%M%S.log性能

log_file_mode   --日誌文件類型,默認爲0600spa

log_truncate_on_rotation  --默認爲off,設置爲on的話,若是新建了一個同名的日誌文件,則會清空原來的文件,再寫入日誌,而不是在後面附加。操作系統

log_rotation_age   --保留單個文件的最大時長,默認是1d,也有1h,1min,1s,我的以爲不實用插件

log_rotation_size  --保留單個文件的最大尺寸,默認是10MB

log_error_verbosity --默認爲default,verbose表示冗長的

log_connections    --用戶session登錄時是否寫入日誌,默認off

log_disconnections --用戶session退出時是否寫入日誌,默認off

 

 

【推薦的日誌配置】

logging_collector = on
log_destination = 'csvlog'
log_truncate_on_rotation = on
log_connections = off
log_disconnections = off
log_error_verbosity = verbose
log_statement = ddl
log_min_duration_statement = 60s
log_checkpoints = on
log_lock_waits = on
deadlock_timeout = 1s

 

1.記錄級別

記錄用戶登錄數據庫後的各類操做,postgres日誌裏分紅了3類,經過參數pg_statement來控制,默認的pg_statement參數值是none,即不記錄,能夠設置ddl(記錄create,drop和alter)、mod(記錄ddl+insert,delete,update和truncate)和all(mod+select)。

 

log_statement = ddl

 

通常的OLTP系統審計級別設置爲ddl就夠了,由於記錄輸出各類SQL對性能的影響仍是蠻大的,安全級別高一點的也能夠設置mod模式,有條件也能夠不在數據庫層面作,而是購買設備放在網絡層監控解析。

 

若是這裏設置爲none,在 log_min_duration_statement設置爲60s,那麼log_min_duration_statement也會生效,將執行時間超過60s的SQL打印到日誌。

 

按不一樣狀況進行配置審計級別:

1)審計用戶hm連到數據庫hm 的全部SQL.

alter role hm in database hm set log_statement='all';

2) 審計用戶hm 的全部SQL.

alter role hm set log_statement='all';

3) 審計任何用戶鏈接到數據庫hm 的全部SQL.

 alter database hm set log_statement='all';

 

 

2.定位慢查詢SQL 

能夠設置必定時長的參數(log_min_duration_statement),來記錄超過該時長的全部SQL,對找出當前數據庫的慢查詢頗有效。 好比log_min_duration_statement = 2s,記錄超過2秒的SQL,改完須要reload 

 

log_min_duration_statement = 2s

 

3.監控數據庫的checkpoint 

當數據庫進行一項大更新操做時,若是參數設置不當,會在日誌裏留下大量的告警信息,頻繁的作checkpoint會致使系統變慢,不用設置都會有。

可是不會記錄系統正常的checkpoint,若是你想看系統一天之類發生了多少次checkpoint,以及每次checkpoint的一些詳細信息,好比buffer,sync等,就能夠經過設置log_checkpoints,該參數默認值是off。

 

log_checkpoints = on 

 

4.監控數據庫的鎖 

數據庫的鎖一般能夠在pg_locks這個系統表裏找,但這只是當前的鎖表/行信息,若是你想看一天內有多少個超過死鎖時間的鎖發生,能夠在日誌裏設置並查看,log_lock_waits 默認是off,能夠設置開啓。這個能夠區分SQL慢是資源緊張仍是鎖等待的問題。

log_lock_waits=on

deadlock_timeout=1

還有一些Debug功能,適合修改源碼調試,通常的的系統上並不須要,暫時比較關注的就這些。

 

5.能夠在表上設置觸發器,來審計

 

6.可使用插件pg_log_userqueries 來作,沒有必要

 

【注意事項】

1. 超級用戶能夠修改這些配置項, 因此被審計的用戶最好是普通用戶. 不然用戶連上來能夠修改這些審計項.

2. 程序用的數據庫帳號和我的用的數據庫帳號分開, 對於程序用的數據庫帳號能夠只審計DDL操做, 而對於我的使用的數據庫帳號, 建議審計全部的SQL.

3. 變量優先級(事務>會話>database/role>啓動參數>配置文件) 

某些全局變量能夠動態修改,例如本文提到的log_statement。修改後reload以後,全部會話都會讀到最新的變量

相關文章
相關標籤/搜索