RDS for PostgreSQL 中的日志记录参数 - Amazon Relational Database Service

RDS for PostgreSQL 中的日志记录参数

您可以通过修改各种参数来自定义 RDS for PostgreSQL 数据库实例的日志记录行为。在下表中,您可以找到影响日志存储时间长度、何时轮换日志和是否以 CSV(逗号分隔值)格式输出日志的参数。您还可以找到发送到 STDERR 的文本输出以及其他设置。要更改可修改的参数的设置,请为以下项目使用自定义数据库参数组: RDS for PostgreSQL 实例。有关更多信息,请参阅Amazon RDS 数据库实例的数据库参数组如表中所述,无法更改 log_line_prefix

参数 默认值 描述

log_destination

stderr

设置日志的输出格式。原定设置为 stderr,但您也可以通过向设置中添加 csvlog 来指定逗号分隔值(CSV)。有关更多信息,请参阅 设置日志目标(stderr、csvlog)

log_filename

postgresql.log.%Y-%m-%d-%H

指定日志文件名的模式。除原定设置外,此参数还支持使用 postgresql.log.%Y-%m-%d 作为文件名模式。

log_line_prefix

%t:%r:%u@%d:[%p]:

为写入 stderr 的每个日志行定义前缀,以记录时间(%t)、远程主机(%r)、用户(%u)、数据库(%d)和进程 ID(%p)。您无法修改此参数。

log_rotation_age

60

此分钟数后,将自动轮换日志文件。您可以在 1 到 1440 分钟的范围内更改此值。有关更多信息,请参阅 设置日志文件轮换

log_rotation_size

日志自动轮换的大小(kB)。默认情况下,不使用此参数,因为日志是根据 log_rotation_age 参数轮换的。要了解更多信息,请参阅 设置日志文件轮换

rds.log_retention_period

4320

超过指定分钟数的 PostgreSQL 日志将被删除。默认值为 4320 分钟,表示系统将在 3 天后删除日志文件。有关更多信息,请参阅 设置日志保留期

要识别应用程序问题,您可以在日志中查找查询失败、登录失败、死锁和致命的服务器错误。例如,假设您将旧版应用程序从 Oracle 转换为 Amazon RDS PostgreSQL,但部分查询可能未正确转换。这些格式不正确的查询会生成错误消息,您可以在日志中找到这些错误消息以帮助识别问题。有关日志记录查询的更多信息,请参阅 为您的 RDS for PostgreSQL 数据库实例开启查询日志记录

在以下主题中,您可以找到有关如何设置各种参数(用于控制 PostgreSQL 日志的基本详细信息)的信息。

设置日志保留期

rds.log_retention_period 参数指定 RDS for PostgreSQL 数据库实例将其日志文件保留多长时间。原定设置为 3 天(4320 分钟),但您可以将此值设置为 1 天(1440 分钟)到 7 天(10080 分钟)之间的任意值。确保您的 RDS for PostgreSQL 数据库实例具有足够的存储空间,可将日志文件保留一段时间。

建议您将日志定期发布到 Amazon CloudWatch Logs,以便您可以在日志从 RDS for PostgreSQL 数据库实例中删除很久之后查看和分析系统数据。有关更多信息,请参阅 将 PostgreSQL 日志发布到 Amazon CloudWatch Logs

设置日志文件轮换

原定设置情况下,Amazon RDS 每小时都会创建新的日志文件。计时由 log_rotation_age 参数控制。此参数的原定设置值为 60(分钟),但您可以将其设置为 1 分钟到 24 小时(1440 分钟)之间的任意值。轮换时,系统将创建一个新的不同日志文件。该文件根据 log_filename 参数指定的模式命名。

也可以根据日志文件的大小进行轮换(如 log_rotation_size 参数指定)。此参数指定在日志达到指定的大小(以千字节为单位)时应轮换日志。对于 RDS for PostgreSQL 数据库实例,log_rotation_size 未设置,也就是说,未指定任何值。但是,您可以将该参数设置为 0-2097151KB(千字节)之间。

日志文件名基于在 log_filename 参数中指定的文件名模式。此参数的可用设置如下:

  • postgresql.log.%Y-%m-%d – 日志文件名的原定设置格式。在日志文件的名称中包括年、月和日。

  • postgresql.log.%Y-%m-%d-%H – 在日志文件名格式中包含小时。

有关更多信息,请参阅 PostgreSQL 文档中的 log_rotation_agelog_rotation_size

设置日志目标(stderrcsvlog

默认情况下,Amazon RDS PostgreSQL 以标准错误 (stderr) 格式生成日志。此格式是 log_destination 参数的原定设置。每条消息都使用在 log_line_prefix 参数中指定的模式作为前缀。有关更多信息,请参阅 了解 log_line_prefix 参数

RDS for PostgreSQL 也可以按 csvlog 格式生成日志。csvlog 用于将日志数据作为逗号分隔值(CSV)数据进行分析。例如,假设您使用 log_fdw 扩展将日志作为外部表处理。在 stderr 日志文件上创建的外部表包含一个列,其中包含日志事件数据。通过向 csvlog 参数添加 log_destination,可以获得 CSV 格式的日志文件,其中对外部表的多个列进行了分界。您现在可以更轻松地对日志进行排序和分析。要了解如何将 log_fdwcsvlog 结合使用,请参阅 使用 log_fdw 扩展通过 SQL 访问数据库日志

如果您为此参数指定 csvlog,请注意将同时生成 stderrcsvlog 文件。确保监控日志所占用的存储空间,同时考虑 rds.log_retention_period 以及影响日志存储和周转的其他设置。使用 stderrcsvlog 会使日志占用的存储空间增加一倍以上。

如果将 csvlog 添加到 log_destination 并想单独恢复到 stderr,则需要重置参数。为此,请打开 Amazon RDS 控制台,然后为您的实例打开自定义数据库参数组。选择 log_destination 参数,选择 Edit parameter(编辑参数),然后选择 Reset(重置)。

有关配置日志记录的更多信息,请参阅使用 Amazon RDS 和 Aurora PostgreSQL 日志:第 1 部分

了解 log_line_prefix 参数

stderr 日志格式将由 log_line_prefix 参数指定的详细信息作为每条日志消息的前缀,如下所示。

%t:%r:%u@%d:[%p]:t

您无法更改此设置。因此,发送到 stderr 的每个日志条目都包含以下信息。

  • %t – 日志条目的时间

  • %r – 远程主机地址

  • %u@%d – 用户名 @ 数据库名称

  • [%p] – 进程 ID(如果有)