PostgreSQL 常用日志

PostgreSQL 常用日志详解

PostgreSQL 提供了多种日志类型,用于监控数据库活动、排查问题和优化性能。以下是 PostgreSQL 中最常用的日志类型及其配置和使用方法。

一、主要日志类型

日志类型 文件位置 主要内容 用途
服务器日志 postgresql-<日期>.log 服务器运行状态、错误信息 监控服务器状态、排查错误
WAL 日志 pg_wal/ 目录 预写式日志 (Write-Ahead Logging) 崩溃恢复、时间点恢复
CSV 日志 postgresql-<日期>.csv 结构化日志数据 日志分析、自动化处理
审计日志 自定义位置 用户活动记录 安全审计、合规性检查

二、服务器日志配置

1. 基本配置 (postgresql.conf)

conf 复制代码
# 日志收集开关
logging_collector = on

# 日志文件位置
log_directory = 'pg_log'

# 日志文件名模式
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

# 日志文件大小限制
log_rotation_size = 100MB

# 日志保留天数
log_rotation_age = 1d

2. 日志级别控制

conf 复制代码
# 最小日志级别 (DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, PANIC)
log_min_messages = warning

# 客户端语句日志级别
log_min_error_statement = error

# 记录执行时间超过此值的语句 (毫秒)
log_min_duration_statement = 1000

三、常用日志分析场景

1. 查看慢查询

sql 复制代码
-- 查找执行时间最长的查询
SELECT query, total_time, calls, mean_time
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 10;

2. 错误日志分析

bash 复制代码
# 查找错误日志中的关键错误
grep -i "error" /var/lib/postgresql/data/pg_log/postgresql-*.log

# 查找特定时间段的日志
sed -n '/2023-10-01 14:00:00/,/2023-10-01 15:00:00/p' postgresql.log

3. 连接问题排查

bash 复制代码
# 查找连接失败记录
grep "could not connect" /var/lib/postgresql/data/pg_log/postgresql-*.log

# 查找连接过多警告
grep "too many clients already" /var/lib/postgresql/data/pg_log/postgresql-*.log

四、WAL 日志管理

1. 检查 WAL 日志状态

sql 复制代码
-- 查看当前WAL日志位置
SELECT pg_current_wal_lsn();

-- 查看WAL日志归档状态
SELECT * FROM pg_stat_archiver;

2. 清理 WAL 日志

sql 复制代码
-- 手动触发WAL日志清理
SELECT pg_switch_wal();

-- 设置WAL保留策略 (v13+)
ALTER SYSTEM SET wal_keep_size = '1GB';

五、审计日志配置

1. 使用 pgaudit 扩展

sql 复制代码
-- 安装扩展
CREATE EXTENSION pgaudit;

-- 配置审计规则
ALTER SYSTEM SET pgaudit.log = 'read, write, ddl';

-- 审计特定表
ALTER SYSTEM SET pgaudit.log_relation = 'on';

2. 查看审计日志

bash 复制代码
# 查找DDL操作
grep "DDL" /var/lib/postgresql/data/pg_log/postgresql-*.log

# 查找数据修改操作
grep "UPDATE\|INSERT\|DELETE" /var/lib/postgresql/data/pg_log/postgresql-*.log

六、日志维护最佳实践

  1. 定期轮转日志:配置合理的日志文件大小和保留时间
  2. 集中管理日志:考虑使用日志收集工具如 ELK Stack
  3. 监控关键指标:设置日志告警规则
  4. 安全存储:确保日志文件有适当权限
  5. 性能平衡:详细日志会影响性能,根据需求调整级别

七、常用日志相关命令

1. 实时查看日志

bash 复制代码
tail -f /var/lib/postgresql/data/pg_log/postgresql-*.log

2. 日志文件分析工具

bash 复制代码
# 使用pgBadger分析日志
pgbadger /var/lib/postgresql/data/pg_log/postgresql-*.log -o report.html

# 使用awk统计错误类型
awk '/ERROR:/ {count[$0]++} END {for (msg in count) print count[msg], msg}' postgresql.log | sort -nr

通过合理配置和分析这些日志,可以有效监控 PostgreSQL 数据库的健康状态,快速定位问题并优化性能。

相关推荐
用户03284722207014 小时前
如何搭建本地yum源(上)
运维
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神3 天前
三、用户与权限管理
数据库·mysql
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理