Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

PostgreSQL 数据库日志文件

RDS PostgreSQL 生成查询和错误日志。我们将 auto-vacuum 信息和 rds_admin 操作写入错误日志。PostgreSQL 还会将连接、断开连接和检查点记录到错误日志中。有关更多信息,请参阅 PostgreSQL 文档中的错误报告和日志记录

可使用与数据库实例相关联的数据库参数组中的 rds.log_retention_period 参数设置系统日志的保留期。此参数的单位是分钟。例如,设置为 1440 会将日志保留一天。默认值为 4320 (三天)。最大值为 10080 (七天)。请注意,实例必须拥有足够的已分配存储容量来容纳保留的日志文件。

可为 PostgreSQL 数据库实例启用查询记录功能,方法是设置与数据库实例相关联的数据库参数组中的以下两个参数:log_statementlog_min_duration_statementlog_statement 参数控制需要记录的 SQL 语句。我们建议,在您的数据库实例中调试问题时,将此参数设置为 all 以记录所有语句。默认值为 none。此外,也可以将此值设置为 ddl 以记录所有数据定义语言 (DDL) 语句(CREATE、ALTER、DROP 等),或设置为 mod 以记录所有 DDL 和数据修改语言 (DML) 语句(INSERT、UPDATE、DELETE 等)。

log_min_duration_statement 参数设定需要记录的语句的限制 (以毫秒为单位)。所有运行时间长于该参数设置的 SQL 语句都会被系统记录。默认情况下,该参数处于禁用状态并设置为负 1 (-1)。启用该参数可帮助查找未优化的查询。

如果您是首次设置数据库参数组中的参数以及将该参数组与数据库实例相关联,请参阅 使用数据库参数组

以下步骤显示了如何设置查询日志记录:

  1. log_statement 参数设置为 all。以下示例显示了写入 postgres.log 文件的信息:

    2013-11-05 16:48:56 UTC::@:[2952]:LOG: received SIGHUP, reloading configuration files 2013-11-05 16:48:56 UTC::@:[2952]:LOG: parameter "log_min_duration_statement" changed to "1"

    在执行查询时,其他信息也会写入 postgres.log 文件。以下示例显示了查询后写入文件的信息类型:

    2013-11-05 16:41:07 UTC::@:[2955]:LOG: checkpoint starting: time 2013-11-05 16:41:07 UTC::@:[2955]:LOG: checkpoint complete: wrote 1 buffers (0.3%); 0 transaction log file(s) added, 0 removed, 1 recycled; write=0.000 s, sync=0.003 s, total=0.012 s; sync files=1, longest=0.003 s, average=0.003 s 2013-11-05 16:45:14 UTC:[local]:master@postgres:[8839]:LOG: statement: SELECT d.datname as "Name", pg_catalog.pg_get_userbyid(d.datdba) as "Owner", pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding", d.datcollate as "Collate", d.datctype as "Ctype", pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges" FROM pg_catalog.pg_database d ORDER BY 1; 2013-11-05 16:45:
  2. 设置 log_min_duration_statement 参数。以下示例显示了参数设置为 1 时写入 postgres.log 文件的信息:

    2013-11-05 16:48:56 UTC::@:[2952]:LOG: received SIGHUP, reloading configuration files 2013-11-05 16:48:56 UTC::@:[2952]:LOG: parameter "log_min_duration_statement" changed to "1"

    在执行持续时间超过参数设置的查询时,其他信息也会写入 postgres.log 文件。以下示例显示了查询后写入文件的信息类型:

    2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered, i.indisvalid, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true), pg_catalog.pg_get_constraintdef(con.oid, true), contype, condeferrable, condeferred, c2.reltablespace FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i LEFT JOIN pg_catalog.pg_constraint con ON (conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u','x')) WHERE c.oid = '1255' AND c.oid = i.indrelid AND i.indexrelid = c2.oid ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname; 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: duration: 3.367 ms 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '1255' ORDER BY inhseqno; 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: duration: 1.002 ms 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhrelid AND i.inhparent = '1255' ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text; 2013-11-05 16:51:18 UTC:[local]:master@postgres:[9193]:LOG: statement: select proname from pg_proc; 2013-11-05 16:51:18 UTC:[local]:master@postgres:[9193]:LOG: duration: 3.469 ms

将 PostgreSQL 日志发布到 CloudWatch Logs

您可以为 PostgreSQL 数据库实例配置 Amazon RDS,以将日志数据发布到 Amazon CloudWatch Logs 中的日志组。利用 CloudWatch Logs,可以对日志数据进行实时分析并使用 CloudWatch 创建警报和查看指标。您可以使用 CloudWatch Logs 在高持久性存储中存储日志记录。

注意

仅 PostgreSQL 版本 9.6.6 以及更高版本和 10.4 以及更高版本支持将日志文件发布到 CloudWatch Logs。

以下是可发布到 CloudWatch Logs(适用于 PostgreSQL 的 Amazon RDS)的日志类型。

  • Postgresql 日志

  • 升级日志

在完成配置后,Amazon RDS 将日志事件发布到 CloudWatch 日志组内的日志流。例如,PostgreSQL 日志数据存储在日志组 /aws/rds/instance/my_instance/postgresql 中。要查看您的 Amazon CloudWatch Logs,请打开 https://console.amazonaws.cn/cloudwatch/

AWS 管理控制台

使用控制台将 PostgreSQL 日志发布到 CloudWatch Logs

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Databases (数据库)

  3. 选择要修改的数据库实例,然后选择 Modify (修改)

  4. 日志导出部分中,选择要开始发布到 CloudWatch Logs 的日志。

  5. 选择继续,然后选择摘要页面上的修改数据库实例

AWS CLI

您可以使用 AWS CLI 来发布 PostgreSQL 日志。您可以调用带以下参数的 modify-db-instance 命令:

  • --db-instance-identifier

  • --cloudwatch-logs-export-configuration

注意

--cloudwatch-logs-export-configuration 选项进行的更改始终立即应用于数据库实例。因此,--apply-immediately--no-apply-immediately 选项没有影响。

您还可以通过调用以下 AWS CLI 命令来发布 PostgreSQL 日志:

通过以下选项运行上述一个 AWS CLI 命令:

  • --db-instance-identifier

  • --enable-cloudwatch-logs-exports

  • --db-instance-class

  • --engine

根据您运行的 AWS CLI 命令,可能需要其他选项。

修改实例以将日志发布到 CloudWatch Logs

以下示例修改现有的 PostgreSQL 数据库实例以将日志文件发布到 CloudWatch Logs。--cloudwatch-logs-export-configuration 值是 JSON 对象。此对象的键是 EnableLogTypes,其值是具有 postgresqlupgrade 的任意组合的字符串的数组。

针对 Linux、OS X 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql", "upgrade"]}'

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql","upgrade"]}'

创建实例以将日志发布到 CloudWatch Logs

以下示例将创建一个 PostgreSQL 数据库实例并将日志文件发布到 CloudWatch Logs。--enable-cloudwatch-logs-exports 值是 JSON 字符串数组。这些字符串可以是 postgresqlupgrade 的任意组合。

针对 Linux、OS X 或 Unix:

aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' \ --db-instance-class db.m4.large \ --engine postgres

对于 Windows:

aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' ^ --db-instance-class db.m4.large ^ --engine postgres
RDS API

您可以使用 RDS API 来发布 PostgreSQL 日志。您可以使用以下参数调用 ModifyDBInstance 操作:

  • DBInstanceIdentifier

  • CloudwatchLogsExportConfiguration

注意

CloudwatchLogsExportConfiguration 参数进行的更改始终立即应用于数据库实例。因此,ApplyImmediately 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 PostgreSQL 日志:

通过以下参数运行上述一个 RDS API 操作:

  • DBInstanceIdentifier

  • EnableCloudwatchLogsExports

  • Engine

  • DBInstanceClass

根据您运行的操作,可能需要其他参数。