PostgreSQL在Ubuntu上的日志配置主要通过postgresql.conf文件实现,该文件通常位于/etc/postgresql/<版本号>/main/目录下(如/etc/postgresql/14/main/postgresql.conf)。以下是关键配置参数及说明:
off),设为on可捕获stderr和csvlog输出,生成结构化日志文件。pg_log,相对于$PGDATA),可设置为绝对路径(如/var/log/postgresql/pg_log)。postgresql-%Y-%m-%d_%H%M%S.log(按日期和时间生成唯一文件)。none(不记录)、ddl(仅数据定义语句,如CREATE/ALTER/DROP)、mod(DDL+数据修改语句,如INSERT/UPDATE/DELETE)、all(所有语句,生产环境慎用)。1000表示记录超过1秒的查询),用于慢查询排查。1d表示每天生成新文件),避免单个文件过大。100MB),达到后自动切割。修改配置文件:使用文本编辑器(如vim)打开postgresql.conf,调整上述参数。例如:
sudo vim /etc/postgresql/14/main/postgresql.conf
添加/修改以下内容:
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'mod'
log_min_duration_statement = 1000 # 记录慢查询(超过1秒)
log_rotation_age = 1d
log_rotation_size = 100MB
重启PostgreSQL服务:修改配置后,需重启服务使更改生效:
sudo systemctl restart postgresql
验证配置:通过psql命令行工具查看参数是否生效:
sudo -u postgres psql
SHOW logging_collector; -- 应返回'on'
SHOW log_directory; -- 应返回配置的目录路径
\q
查看日志文件位置:Ubuntu下PostgreSQL日志默认存储在/var/log/postgresql/目录下,文件名格式为postgresql-<版本号>-main.log(如postgresql-14-main.log):
ls /var/log/postgresql/
查看最新日志:使用tail命令查看日志文件末尾内容(如最后100行):
sudo tail -n 100 /var/log/postgresql/postgresql-14-main.log
实时监控日志:使用tail -f命令实时输出日志新增内容(按Ctrl+C停止):
sudo tail -f /var/log/postgresql/postgresql-14-main.log
搜索特定日志:使用grep命令过滤关键词(如“error”表示错误日志):
sudo grep "error" /var/log/postgresql/postgresql-14-main.log
为防止日志文件无限增长,需通过log_rotation_age和log_rotation_size参数控制切割周期和大小(已在配置步骤中说明)。Ubuntu系统还会自动调用logrotate工具管理PostgreSQL日志(默认配置位于/etc/logrotate.d/postgresql-common),无需额外设置。
pgBadger是一款强大的PostgreSQL日志分析工具,可生成HTML格式的详细报告(包含查询频率、执行时间、锁等待等信息)。
安装pgBadger:
sudo apt-get install pgbadger
生成报告:
pgbadger /var/log/postgresql/postgresql-14-main.log -o report.html
查看报告:用浏览器打开report.html,即可直观分析数据库活动(如慢查询、连接统计等)。
log_statement设为ddl或mod,避免all对性能造成影响。cron定时任务删除7天前的日志),释放磁盘空间。postgresql.conf中的lc_messages参数为UTF8:lc_messages = 'UTF8'