PostgreSQL的日志配置主要通過/etc/postgresql/{version}/main/postgresql.conf
文件完成,核心參數如下:
logging_collector
:設置為on
以啟用日志收集器(默認關閉),負責將日志輸出到文件而非標準錯誤。log_directory
:指定日志存儲目錄(如pg_log
,相對于數據目錄/var/lib/postgresql/{version}/main
),需確保PostgreSQL用戶對該目錄有寫入權限。log_filename
:定義日志文件命名模式(如postgresql-%Y-%m-%d_%H%M%S.log
),支持日期和時間占位符,便于按時間分割日志。log_min_messages
:設置日志記錄級別(可選debug5
到panic
),常用info
(記錄常規信息)或notice
(記錄重要事件)。log_min_duration_statement
:記錄執行時間超過指定毫秒數的SQL語句(如1000
表示記錄慢查詢,單位:毫秒),用于性能分析。log_statement
:記錄特定類型的SQL語句(如mod
記錄修改數據的SQL,all
記錄所有SQL),需謹慎使用以避免日志過大。修改配置文件后,需重啟PostgreSQL服務使更改生效:
sudo systemctl restart postgresql
默認情況下,日志文件存儲在/var/log/postgresql/
目錄下,文件名格式為postgresql-{version號}-{instance_name}.log
(如postgresql-15-main.log
)。
使用tail
命令實時查看日志文件的最后N行(如最后100行):
tail -n 100 /var/log/postgresql/postgresql-15-main.log
若需持續監控新增日志,可使用-f
參數:
tail -f /var/log/postgresql/postgresql-15-main.log
通過grep
命令過濾日志中的關鍵詞(如ERROR
、FATAL
、PANIC
),快速定位錯誤信息:
grep -i "error\|fatal\|panic" /var/log/postgresql/postgresql-15-main.log
若啟用了log_min_duration_statement
,可通過grep
提取慢查詢記錄:
grep "duration" /var/log/postgresql/postgresql-15-main.log
Debian系統默認使用logrotate
工具管理PostgreSQL日志輪轉,配置文件位于/etc/logrotate.d/postgresql
。示例配置如下:
/var/log/postgresql/postgresql-15-main.log {
daily # 每天輪轉一次
rotate 7 # 保留最近7天的日志
compress # 壓縮舊日志(使用gzip)
delaycompress # 延遲壓縮(避免壓縮當天日志)
missingok # 若日志文件不存在也不報錯
notifempty # 若日志為空則不輪轉
create 640 root adm # 創建新日志文件并設置權限
}
修改配置后,logrotate
會自動按計劃執行(通常每日一次),無需手動干預。
若需立即輪轉日志,可調用PostgreSQL的pg_rotate_logfile()
函數(需超級用戶權限):
SELECT pg_rotate_logfile();
pgBadger是一款強大的PostgreSQL日志分析工具,可生成HTML格式的詳細報告,幫助識別性能瓶頸、慢查詢等問題。
通過Debian包管理器安裝:
sudo apt-get install pgbadger
運行以下命令生成報告(假設日志文件為postgresql-15-main.log
):
pgbadger /var/log/postgresql/postgresql-15-main.log -o report.html
使用瀏覽器打開生成的report.html
文件,即可查看查詢統計、慢查詢、鎖等待等信息。
EXPLAIN ANALYZE
分析查詢計劃并添加索引。