Skip to content

GaussDB 日志类型与位置

日志类型

GaussDB 提供多种类型的日志,用于记录数据库的不同活动和状态。主要包括以下几类:

1. 运行日志(Server Log)

运行日志记录数据库服务器的启动、关闭、配置变更、错误信息和警告等重要事件。运行日志是数据库运维中最常用的日志之一,用于监控数据库的运行状态和排查问题。

运行日志的主要内容包括:

  • 数据库启动和关闭信息
  • 配置参数变更记录
  • 错误和警告信息
  • 连接和断开连接记录
  • 资源使用情况

2. 事务日志(WAL Log)

事务日志(Write-Ahead Logging,简称 WAL)是 GaussDB 保证数据一致性和持久性的重要机制。事务日志记录所有数据修改操作,包括插入、更新、删除等,用于恢复和复制。

事务日志的主要特点:

  • 采用预写日志机制,先写日志后写数据
  • 记录数据修改的物理变化
  • 用于数据库恢复和主从复制
  • 可以配置日志保留策略

3. 审计日志(Audit Log)

审计日志记录数据库的安全相关事件,包括用户登录、权限变更、敏感操作等。审计日志用于满足合规要求和安全审计,帮助管理员追踪和分析数据库的安全事件。

审计日志的主要内容包括:

  • 用户登录和注销记录
  • 权限授予和回收记录
  • 数据访问和修改记录
  • 系统管理操作记录
  • 安全事件记录

4. 慢查询日志(Slow Query Log)

慢查询日志记录执行时间超过指定阈值的 SQL 语句。慢查询日志用于性能分析和优化,帮助管理员识别和优化慢查询语句。

慢查询日志的主要内容包括:

  • SQL 语句文本
  • 执行开始时间和结束时间
  • 执行时长
  • 扫描行数和返回行数
  • 执行计划信息

5. 告警日志(Alert Log)

告警日志记录数据库的告警信息,包括资源使用率过高、连接数过多、复制延迟过高等。告警日志用于实时监控数据库的异常情况,及时发现和处理问题。

告警日志的主要内容包括:

  • 告警级别和类型
  • 告警时间和描述
  • 告警源和影响范围
  • 建议处理措施

6. 备份日志(Backup Log)

备份日志记录数据库备份和恢复操作的详细信息,包括备份类型、备份时间、备份大小、恢复时间等。备份日志用于监控和管理备份恢复操作,确保备份数据的完整性和可用性。

备份日志的主要内容包括:

  • 备份和恢复操作的开始和结束时间
  • 备份类型和级别
  • 备份数据大小和位置
  • 恢复进度和结果
  • 错误和警告信息

日志位置

GaussDB 的日志文件默认存储在指定的目录中,不同类型的日志可能存储在不同的位置。以下是 GaussDB 日志的默认位置和配置方法:

1. 运行日志位置

运行日志的默认存储位置由 log_directory 参数指定,默认值为 pg_log,位于数据库实例的数据目录下。

配置运行日志位置:

sql
-- 查看当前运行日志位置
SHOW log_directory;

-- 修改运行日志位置
ALTER SYSTEM SET log_directory = '/path/to/log/directory';

运行日志的文件名格式为 postgresql-%Y-%m-%d_%H%M%S.log,例如 postgresql-2023-05-20_143000.log

2. 事务日志位置

事务日志的默认存储位置是数据库实例的数据目录下的 pg_wal 目录(在旧版本中称为 pg_xlog)。

事务日志的文件名由 24 个十六进制字符组成,例如 000000010000000000000001

3. 审计日志位置

审计日志的默认存储位置由 audit_directory 参数指定,默认值为 pg_audit,位于数据库实例的数据目录下。

配置审计日志位置:

sql
-- 查看当前审计日志位置
SHOW audit_directory;

-- 修改审计日志位置
ALTER SYSTEM SET audit_directory = '/path/to/audit/directory';

4. 慢查询日志位置

慢查询日志的存储位置与运行日志相同,默认存储在 log_directory 指定的目录中。

慢查询日志的文件名与运行日志相同,可以通过 log_filename 参数配置文件名格式。

5. 告警日志位置

告警日志的存储位置与运行日志相同,默认存储在 log_directory 指定的目录中。

6. 备份日志位置

备份日志的存储位置由备份工具指定,默认存储在备份目录中。例如,使用 gs_basebackup 工具进行备份时,可以通过 -l 参数指定备份日志的位置。

日志配置

1. 运行日志配置

主要配置参数:

sql
-- 启用运行日志
ALTER SYSTEM SET logging_collector = on;

-- 配置日志级别(debug5, debug4, debug3, debug2, debug1, info, notice, warning, error, log, fatal, panic)
ALTER SYSTEM SET log_min_messages = warning;

-- 配置日志格式(text, csvlog)
ALTER SYSTEM SET log_destination = 'stderr';

-- 配置日志文件名格式
ALTER SYSTEM SET log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log';

-- 配置日志轮转策略(按大小或时间)
ALTER SYSTEM SET log_rotation_size = 10MB;
ALTER SYSTEM SET log_rotation_age = 1d;

-- 配置日志保留天数
ALTER SYSTEM SET log_filename = 'postgresql-%Y-%m-%d.log';

2. 事务日志配置

主要配置参数:

sql
-- 配置 WAL 日志级别(minimal, replica, logical)
ALTER SYSTEM SET wal_level = replica;

-- 配置 WAL 日志大小
ALTER SYSTEM SET wal_segment_size = 16MB;

-- 配置 WAL 日志保留策略
ALTER SYSTEM SET wal_keep_size = 1GB;

-- 配置检查点间隔
ALTER SYSTEM SET checkpoint_timeout = 30min;
ALTER SYSTEM SET max_wal_size = 10GB;
ALTER SYSTEM SET min_wal_size = 80MB;

3. 审计日志配置

主要配置参数:

sql
-- 启用审计日志
ALTER SYSTEM SET audit_enabled = on;

-- 配置审计日志级别(0-3)
ALTER SYSTEM SET audit_level = 1;

-- 配置审计日志格式(text, csv)
ALTER SYSTEM SET audit_format = 'text';

-- 配置审计日志轮换策略
ALTER SYSTEM SET audit_rotation_size = 100MB;
ALTER SYSTEM SET audit_rotation_age = 1d;

4. 慢查询日志配置

主要配置参数:

sql
-- 启用慢查询日志
ALTER SYSTEM SET log_min_duration_statement = 1000; -- 单位:毫秒

-- 配置慢查询日志记录内容
ALTER SYSTEM SET log_statement = 'all';

-- 配置慢查询日志记录执行计划
ALTER SYSTEM SET log_executor_stats = on;
ALTER SYSTEM SET log_planner_stats = on;

日志管理

1. 日志查看

查看运行日志:

bash
# 使用 tail 命令实时查看运行日志
tail -f /path/to/log/directory/postgresql-$(date +%Y-%m-%d)_%H%M%S.log

# 使用 grep 命令搜索日志内容
grep -i error /path/to/log/directory/postgresql-*.log

查看事务日志:

bash
# 使用 pg_waldump 工具查看 WAL 日志内容
pg_waldump /path/to/pg_wal/000000010000000000000001

查看审计日志:

bash
# 查看审计日志内容
cat /path/to/audit/directory/audit.log

2. 日志归档

配置日志归档:

sql
-- 启用 WAL 日志归档
ALTER SYSTEM SET archive_mode = on;

-- 配置归档命令
ALTER SYSTEM SET archive_command = 'cp %p /path/to/archive/directory/%f';

-- 配置归档超时
ALTER SYSTEM SET archive_timeout = 60; -- 单位:秒

3. 日志清理

手动清理日志:

bash
# 删除指定日期之前的运行日志
find /path/to/log/directory -name "postgresql-*.log" -mtime +7 -delete

# 删除指定日期之前的审计日志
find /path/to/audit/directory -name "audit*.log" -mtime +30 -delete

自动清理日志:

sql
-- 配置自动清理运行日志
ALTER SYSTEM SET log_truncate_on_rotation = on;

-- 配置自动清理 WAL 日志
ALTER SYSTEM SET wal_keep_size = 1GB;

日志监控与分析

1. 日志监控工具

  • gs_logtool:GaussDB 自带的日志分析工具,可以分析运行日志、审计日志等。
  • pgBadger:第三方日志分析工具,可以生成可视化的日志报告。
  • ELK Stack:Elasticsearch + Logstash + Kibana,用于集中管理和分析日志。
  • Prometheus + Grafana:用于监控日志相关的指标和生成可视化报表。

2. 日志分析方法

  • 实时监控:使用工具实时监控日志,及时发现和处理异常情况。
  • 定期分析:定期分析日志,总结数据库的运行规律和问题趋势。
  • 关联分析:将不同类型的日志关联起来分析,全面了解数据库的运行状态。
  • 趋势分析:分析日志中的趋势变化,预测可能出现的问题。

日志安全管理

1. 日志访问控制

  • 限制日志文件的访问权限,只有授权用户才能查看和修改日志。
  • 使用加密传输日志,防止日志在传输过程中被窃取或篡改。
  • 定期备份日志,防止日志丢失或损坏。

2. 日志完整性保护

  • 对日志进行数字签名,确保日志的完整性和不可篡改性。
  • 定期验证日志的完整性,发现篡改及时处理。

3. 日志合规性

  • 根据法规要求,配置适当的日志级别和保留策略。
  • 定期审计日志,确保日志记录符合合规要求。
  • 建立日志管理的标准流程,确保日志的完整性和可用性。

常见问题(FAQ)

Q1: 如何配置 GaussDB 的运行日志级别?

A1: 可以通过修改 log_min_messages 参数来配置运行日志级别。例如,设置为 warning 级别将只记录警告及以上级别的日志:

sql
ALTER SYSTEM SET log_min_messages = warning;

Q2: 如何查看 GaussDB 的慢查询日志?

A2: 首先需要启用慢查询日志并配置阈值,然后查看运行日志文件:

sql
-- 启用慢查询日志,阈值为 1 秒
ALTER SYSTEM SET log_min_duration_statement = 1000;

然后查看运行日志文件,慢查询日志会记录在运行日志中。

Q3: 如何配置 GaussDB 的 WAL 日志保留策略?

A3: 可以通过 wal_keep_size 参数配置 WAL 日志的保留大小,通过 archive_modearchive_command 配置 WAL 日志的归档:

sql
-- 启用 WAL 日志归档
ALTER SYSTEM SET archive_mode = on;

-- 配置归档命令
ALTER SYSTEM SET archive_command = 'cp %p /path/to/archive/directory/%f';

-- 配置 WAL 日志保留大小
ALTER SYSTEM SET wal_keep_size = 1GB;

Q4: 如何管理 GaussDB 的日志文件大小?

A4: 可以通过以下参数配置日志文件大小和轮转策略:

  • log_rotation_size:配置运行日志的轮转大小
  • log_rotation_age:配置运行日志的轮转时间
  • audit_rotation_size:配置审计日志的轮转大小
  • audit_rotation_age:配置审计日志的轮转时间

Q5: 如何将 GaussDB 日志发送到外部日志系统?

A5: 可以通过以下方式将 GaussDB 日志发送到外部日志系统:

  • 使用 syslogsyslog_facility 参数配置将日志发送到 syslog 服务器
  • 使用日志转发工具(如 Logstash)将日志发送到 ELK Stack
  • 使用 GaussDB 自带的日志导出功能将日志导出到外部系统