Skip to content

GaussDB 日志配置

日志配置参数

日志格式配置

log_destination

  • 日志输出目标
  • 可选值:stderr, csvlog, syslog, eventlog
  • 可以同时指定多个目标,用逗号分隔
log_destination = 'stderr,csvlog'

logging_collector

  • 是否启用日志收集器
  • 建议设置为 on
  • 启用后日志会写入文件
logging_collector = on

log_directory

  • 日志文件存储目录
  • 可以使用绝对路径或相对路径
  • 相对路径相对于数据目录
log_directory = 'pg_log'

日志轮转配置

log_filename

  • 日志文件名格式
  • 支持时间变量,如 %Y-%m-%d_%H%M%S
  • 影响日志文件的命名规则
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

log_rotation_age

  • 日志文件的最大保留时间
  • 超过该时间后自动创建新日志文件
  • 默认值为 1d(1天)
log_rotation_age = 1d

log_rotation_size

  • 单个日志文件的最大大小
  • 超过该大小后自动创建新日志文件
  • 默认值为 10MB
log_rotation_size = 10MB

log_truncate_on_rotation

  • 当日志文件名已存在时是否截断
  • 建议设置为 off
  • 设置为 on 时会覆盖同名日志文件
log_truncate_on_rotation = off

日志级别配置

log_min_messages

  • 控制日志消息的级别
  • 可选值:debug5, debug4, debug3, debug2, debug1, info, notice, warning, error, log, fatal, panic
  • 默认值为 warning
log_min_messages = warning

log_min_error_statement

  • 控制记录错误语句的级别
  • 可选值:debug5, debug4, debug3, debug2, debug1, info, notice, warning, error, log, fatal, panic
  • 默认值为 error
log_min_error_statement = error

log_min_duration_statement

  • 记录执行时间超过指定值的语句
  • 单位为毫秒
  • 设置为 0 时记录所有语句
  • 设置为 -1 时禁用
# 记录执行时间超过 1000 毫秒的语句
log_min_duration_statement = 1000

日志内容配置

连接日志

log_connections

  • 是否记录客户端连接信息
  • 建议设置为 on
  • 帮助跟踪连接来源和频率
log_connections = on

log_disconnections

  • 是否记录客户端断开连接信息
  • 建议设置为 on
  • 帮助分析连接持续时间
log_disconnections = on

SQL 语句日志

log_statement

  • 控制记录的 SQL 语句类型
  • 可选值:none, ddl, mod, all
  • none:不记录任何语句
  • ddl:记录数据定义语句
  • mod:记录数据修改语句
  • all:记录所有语句
log_statement = 'ddl'

log_duration

  • 是否记录语句执行时间
  • 建议设置为 off,使用 log_min_duration_statement 替代
  • 会产生大量日志,影响性能
log_duration = off

错误日志

log_error_verbosity

  • 错误日志的详细程度
  • 可选值:TERSE, DEFAULT, VERBOSE
  • VERBOSE 包含最详细的错误信息
log_error_verbosity = DEFAULT

log_line_prefix

  • 日志行前缀格式
  • 支持多种转义序列
  • 建议包含时间、用户、数据库等信息
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '

审计日志配置

审计日志启用

# 启用审计日志
audit_enabled = on

# 审计日志目录
audit_directory = 'pg_audit'

# 审计日志文件名格式
audit_filename = 'audit-%Y-%m-%d_%H%M%S.log'

审计日志级别

# 审计日志级别
audit_level = 1

# 审计日志轮转大小
audit_rotation_size = 10MB

# 审计日志轮转时间
audit_rotation_age = 1d

审计内容配置

# 审计 DDL 操作
audit_ddl_level = 1

# 审计 DML 操作
audit_dml_state = 1

# 审计 SELECT 操作
audit_select_state = 0

# 审计 COPY 操作
audit_copy_state = 1

日志管理最佳实践

日志存储管理

  • 将日志存储在独立的磁盘分区
  • 定期备份日志文件
  • 实现日志的异地存储
  • 配置合理的日志保留策略

日志轮转策略

  • 根据磁盘空间和业务需求配置轮转大小和时间
  • 建议将日志文件大小控制在 10-100MB 之间
  • 保留足够的历史日志用于故障排查
  • 定期清理过期日志

日志监控与告警

  • 配置日志监控工具,如 ELK Stack
  • 设置关键日志的告警规则
  • 定期分析日志内容,发现潜在问题
  • 建立日志分析和报告机制

常见问题(FAQ)

Q1: 如何配置慢查询日志?

A1: 配置慢查询日志的方法:

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

# 记录语句详情
log_statement = 'all'

# 确保日志收集器已启用
logging_collector = on

Q2: 日志文件过大怎么办?

A2: 可以通过以下方法控制日志文件大小:

  1. 减小 log_rotation_size 参数
  2. 缩短 log_rotation_age 参数
  3. 提高 log_min_messages 级别,减少日志量
  4. 调整 log_statement 参数,减少记录的语句类型

Q3: 如何查看当前日志配置?

A3: 使用以下方法查看日志配置:

sql
-- 查看所有日志相关参数
SELECT name, setting, unit, short_desc FROM pg_settings WHERE category LIKE '%Log%';

-- 查看特定日志参数
SHOW log_directory;
SHOW log_filename;

Q4: 如何实时查看日志?

A4: 可以使用以下方法实时查看日志:

bash
# 实时查看最新日志
tail -f $GAUSSDATA/pg_log/postgresql-$(date +%Y-%m-%d)_*.log

# 使用 gs_log 工具查看日志
gs_log -D $GAUSSDATA -f

Q5: 如何配置日志的归档?

A5: 配置日志归档的方法:

# 启用归档
archive_mode = on

# 归档命令
archive_command = 'cp %p /archive/path/%f'

# 归档超时时间
archive_timeout = 60

Q6: 日志配置修改后如何生效?

A6: 日志配置修改后,部分参数需要重启数据库才能生效,部分参数可以通过以下命令重载:

bash
# 重载配置文件
gs_ctl reload -D $GAUSSDATA

或者使用 SQL 命令:

sql
SELECT pg_reload_conf();