PostgreSQL教程FG074-PG日常运维:日志管理与级别配置
本文档风哥主要介绍PostgreSQL的日志管理与级别配置,包括日志的基础概念、生产环境规划、实施方案、实战案例和经验总结。风哥教程参考PostgreSQL官方文档Server Administration内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PostgreSQL日志的概念
PostgreSQL日志是记录数据库运行状态、错误信息、警告信息和其他重要事件的文件。日志对于数据库的监控、故障排查和性能优化非常重要。更多视频教程www.fgedu.net.cn
- 错误日志:记录数据库运行过程中的错误信息
- 警告日志:记录数据库运行过程中的警告信息
- 信息日志:记录数据库运行过程中的一般信息
- 调试日志:记录数据库运行过程中的详细调试信息
- 审计日志:记录数据库的访问和操作审计信息
1.2 PostgreSQL日志级别
PostgreSQL日志级别决定了哪些级别的信息会被记录到日志文件中。不同的日志级别对应不同的详细程度。
from oracle:www.itpux.com
– DEBUG5:最详细的调试信息
– DEBUG4:详细的调试信息
– DEBUG3:中等详细的调试信息
– DEBUG2:基本调试信息
– DEBUG1:最少的调试信息
– INFO:一般信息
– NOTICE:注意信息
– WARNING:警告信息
– ERROR:错误信息
– LOG:日志信息(由服务器内部使用)
– FATAL:致命错误信息
– PANIC:导致数据库服务器终止的严重错误
1.3 PostgreSQL日志格式
PostgreSQL支持多种日志格式,不同的日志格式适用于不同的场景。学习交流加群风哥微信: itpux-com
- stderr:标准错误输出格式
- csvlog:CSV格式,便于后续分析
- jsonlog:JSON格式,便于机器处理
- syslog:系统日志格式
Part02-生产环境规划与建议
2.1 PostgreSQL日志规划
PostgreSQL日志规划要点:
– 日志存储位置:建议单独挂载磁盘存储日志
– 日志存储容量:根据日志量和保留策略规划
– 日志文件系统:建议使用EXT4或XFS文件系统
– 日志权限:确保只有postgres用户可访问
# 日志配置规划
– 日志级别:风哥教程针对风哥教程针对风哥教程针对生产环境建议使用WARNING或ERROR
– 日志格式:建议使用csvlog或jsonlog格式
– 日志内容:根据监控需求配置需要记录的内容
– 日志轮转:配置合理的日志轮转策略
# 日志监控规划
– 实时监控:监控日志中的错误和警告信息
– 定期分析:定期分析日志,识别潜在问题
– 告警机制:设置日志告警,及时响应异常
2.2 PostgreSQL日志轮换策略
PostgreSQL日志轮换策略要点:
– 基于时间:按小时、按天轮换
– 基于大小:当日志文件达到一定大小时轮换
– 混合方式:结合时间和大小进行轮换
# 日志轮换配置
– log_rotation_age:日志文件的最大年龄
– log_rotation_size:日志文件的最大大小
– log_truncate_on_rotation:轮换时是否截断文件
# 日志轮换建议
– 生产环境:建议按天轮换,保留7-30天
– 测试环境:可以更频繁地轮换,保留时间较短
– 高负载系统:可能需要更频繁地轮换
2.3 PostgreSQL日志保留策略
PostgreSQL日志保留策略要点:
– 生产环境:建议保留7-30天
– 测试环境:建议保留3-7天
– 法规要求:根据行业法规要求调整保留时间
# 日志清理方式
– 自动清理:使用logrotate或自定义脚本
– 手动清理:定期手动清理过期日志
– 归档存储:将重要日志归档存储
# 日志压缩
– 建议对过期日志进行压缩,节省存储空间
– 可以使用gzip或bzip2进行压缩
– 压缩后的日志仍然可以被工具分析
Part03-生产环境项目实施方案
3.1 PostgreSQL日志配置
3.1.1 查看当前日志配置
$ psql -U pgsql
# 查看日志配置
postgres=# SHOW log_destination;
log_destination
—————–
stderr
(1 row)
postgres=# SHOW logging_collector;
logging_collector
——————-
on
(1 row)
postgres=# SHOW log_directory;
log_directory
—————
log
(1 row)
postgres=# SHOW log_filename;
log_filename
————–
postgresql-%Y-%m-%d_%H%M%S.log
(1 row)
postgres=# SHOW log_rotation_age;
log_rotation_age
——————
1d
(1 row)
postgres=# SHOW log_rotation_size;
log_rotation_size
——————-
10MB
(1 row)
3.1.2 修改日志配置
$ vi /postgresql/data/postgresql.conf
# 日志配置部分
log_destination = ‘csvlog’ # 日志格式
logging_collector = on # 启用日志收集器
log_directory = ‘log’ # 日志目录
log_filename = ‘postgresql-%Y-%m-%d.log’ # 日志文件名
log_rotation_age = ‘1d’ # 按天轮换
log_rotation_size = 100MB # 最大文件大小
log_truncate_on_rotation = on # 轮换时截断文件
log_timezone = ‘Asia/Shanghai’ # 日志时区
# 日志内容配置
log_min_messages = ‘warning’ # 最小日志级别
log_min_error_statement = ‘error’ # 错误语句的最小级别
log_error_verbosity = ‘verbose’ # 错误信息详细程度
log_statement = ‘ddl’ # 记录的语句类型
log_connections = on # 记录连接信息
log_disconnections = on # 记录断开连接信息
log_duration = on # 记录语句执行时间
# 重新加载配置
$ pg_ctl reload -D /postgresql/data
# 验证配置修改
postgres=# SHOW log_destination;
log_destination
—————–
csvlog
(1 row)
3.2 PostgreSQL日志级别配置
3.2.1 修改日志级别
$ vi /postgresql/data/postgresql.conf
# 日志级别配置
log_min_messages = ‘warning’ # 风哥教程针对风哥教程针对风哥教程针对生产环境建议
# log_min_messages = ‘info’ # 测试环境建议
# log_min_messages = ‘debug1’ # 调试时使用
# 重新加载配置
$ pg_ctl reload -D /postgresql/data
# 验证日志级别
postgres=# SHOW log_min_messages;
log_min_messages
——————
warning
(1 row)
3.2.2 测试日志级别
# 测试INFO级别
postgres=# SELECT pg_log_info(‘This is an info message’);
pg_log_info
————-
(1 row)
# 测试WARNING级别
postgres=# SELECT pg_log_warning(‘This is a warning message’);
pg_log_warning
—————-
(1 row)
# 测试ERROR级别
postgres=# SELECT 1/0;
ERROR: division by zero
LINE 1: SELECT 1/0;
^
# 查看日志文件
$ tail -n 10 /postgresql/data/log/postgresql-2026-04-02.log
2026-04-02 10:00:00.000 CST [12345] WARNING: This is a warning message
2026-04-02 10:00:00.000 CST [12345] ERROR: division by zero
2026-04-02 10:00:00.000 CST [12345] STATEMENT: SELECT 1/0;
3.3 PostgreSQL日志监控
3.3.1 实时监控日志
$ tail -f /postgresql/data/log/postgresql-2026-04-02.log
# 监控错误信息
$ tail -f /postgresql/data/log/postgresql-2026-04-02.log | grep -i error
# 监控警告信息
$ tail -f /postgresql/data/log/postgresql-2026-04-02.log | grep -i warning
# 监控连接信息
$ tail -f /postgresql/data/log/postgresql-2026-04-02.log | grep -i connect
3.3.2 日志分析工具
$ pgbadger /postgresql/data/log/postgresql-2026-04-02.log -o postgresql-report.html
# 使用logrotate管理日志
$ vi /etc/logrotate.d/postgresql
# 添加以下内容
/postgresql/data/log/postgresql-*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0600 pgsql pgsql }
# 手动执行日志轮换
$ logrotate -f /etc/logrotate.d/postgresql
Part04-生产案例与实战讲解
4.1 PostgreSQL日志配置案例
4.1.1 案例:为生产环境配置日志
# 1. 修改postgresql.conf文件
$ vi /postgresql/data/postgresql.conf
# 日志配置
log_destination = ‘csvlog’
logging_collector = on
log_directory = ‘log’
log_filename = ‘postgresql-%Y-%m-%d.log’
log_rotation_age = ‘1d’
log_rotation_size = 100MB
log_truncate_on_rotation = on
log_timezone = ‘Asia/Shanghai’
# 日志级别
log_min_messages = ‘warning’
log_min_error_statement = ‘error’
log_error_verbosity = ‘verbose’
# 日志内容
log_statement = ‘ddl’ # 记录DDL语句
log_connections = on # 记录连接信息
log_disconnections = on # 记录断开连接信息
log_duration = on # 记录语句执行时间
log_lock_waits = on # 记录锁等待
log_temp_files = 0 # 记录所有临时文件
# 2. 重新加载配置
$ pg_ctl reload -D /postgresql/data
# 3. 验证配置
postgres=# SHOW log_destination;
postgres=# SHOW log_min_messages;
postgres=# SHOW log_statement;
4.2 PostgreSQL日志分析案例
4.2.1 案例:分析慢查询日志
# 1. 启用慢查询日志
$ vi /postgresql/data/postgresql.conf
# 添加以下配置
log_min_duration_statement = 1000 # 记录执行时间超过1秒的语句
# 2. 重新加载配置
$ pg_ctl reload -D /postgresql/data
# 3. 查看慢查询日志
$ grep -A 5 “duration:” /postgresql/data/log/postgresql-2026-04-02.log | grep -v “statement:” | head -20
# 4. 使用pgBadger分析慢查询
$ pgbadger /postgresql/data/log/postgresql-2026-04-02.log -o slow-query-report.html
# 5. 分析报告
# 打开slow-query-report.html查看详细的慢查询分析
4.3 PostgreSQL日志轮换案例
4.3.1 案例:配置日志轮换和清理
# 1. 配置PostgreSQL日志轮换
$ vi /postgresql/data/postgresql.conf
# 日志轮换配置
log_rotation_age = ‘1d’ # 按天轮换
log_rotation_size = 100MB # 最大文件大小
log_truncate_on_rotation = on # 轮换时截断文件
# 2. 配置logrotate
$ vi /etc/logrotate.d/postgresql
# 添加以下内容
/postgresql/data/log/postgresql-*.log {
daily
rotate 14 # 保留14天
compress # 压缩
delaycompress # 延迟压缩
missingok # 忽略缺失文件
notifempty # 跳过空文件
create 0600 pgsql pgsql # 创建新文件的权限
postrotate
# 重新加载PostgreSQL配置
/postgresql/fgapp/bin/pg_ctl reload -D /postgresql/data
endscript
}
# 3. 测试logrotate
$ logrotate -f /etc/logrotate.d/postgresql
# 4. 验证日志轮换
$ ls -la /postgresql/data/log/
# 5. 配置定期清理脚本
$ vi /postgresql/scripts/cleanup_logs.sh
# 添加以下内容
#!/bin/bash
# 清理30天前的日志文件
# from:www.itpux.com.qq113257174.wx:itpux-com
# from:www.itpux.com.qq113257174.wx:itpux-com
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# web: `http://www.fgedu.net.cn`
# web: `http://www.fgedu.net.cn`
find /postgresql/data/log -name “postgresql-*.log*” -mtime +30 -delete
# 6. 设置定时任务
$ crontab -e
# 添加以下内容(每天凌晨执行)
0 0 * * * /postgresql/scripts/cleanup_logs.sh
Part05-风哥经验总结与分享
5.1 PostgreSQL日志管理最佳实践
PostgreSQL日志管理最佳实践:
- 日志配置:
- 风哥教程针对风哥教程针对风哥教程针对生产环境建议使用WARNING或ERROR级别
- 测试环境可以使用INFO级别
- 调试时使用DEBUG级别
- 根据监控需求配置日志内容
- 日志存储:
- 单独挂载磁盘存储日志
- 配置合理的日志轮换策略
- 对过期日志进行压缩
- 根据法规要求设置日志保留时间
- 日志监控:
- 实时监控日志中的错误和警告
- 定期分析日志,识别潜在问题
- 设置日志告警,及时响应异常
- 使用日志分析工具,提高分析效率
- 日志安全:
- 确保日志文件权限正确(0600)
- 避免在日志中记录敏感信息
- 定期备份重要日志
- 加密存储敏感日志
5.2 PostgreSQL日志管理常见问题
PostgreSQL日志管理常见问题及解决方案:
- 日志文件过大:配置合理的日志轮换策略,定期清理过期日志
- 日志级别过高:根据环境调整日志级别,避免过多的日志信息
- 日志存储不足:监控日志存储空间,及时扩容或清理
- 日志分析困难:使用日志分析工具,如pgBadger
- 敏感信息泄露:配置日志脱敏,避免记录敏感信息
5.3 PostgreSQL日志管理工具推荐
PostgreSQL日志管理常用工具:
- pgBadger:PostgreSQL日志分析工具,生成详细的HTML报告
- logrotate:系统日志轮换工具,管理日志文件
- ELK Stack:Elasticsearch, Logstash, Kibana,用于日志收集和分析
- Graylog:日志管理和分析平台
- Prometheus + Grafana:监控和可视化工具,可用于日志监控
- 自定义脚本:用于日志清理、分析和告警
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
