为您的 RDS for PostgreSQL 数据库实例开启查询日志记录
通过设置下表中列出的一些参数,您可以收集有关数据库活动的更多详细信息,包括查询、等待锁定的查询、检查点和许多其他详细信息。本主题重点介绍日志记录查询。
参数 | 默认值 | 描述 |
---|---|---|
log_connections | – | 记录每个成功的连接。 |
log_disconnections | – | 记录每个会话的结束及其持续时间。 |
log_checkpoints | 1 | 记录每个检查点。 |
log_lock_waits | – | 记录长锁定等待次数。原定设置情况下,不设置此参数。 |
log_min_duration_sample | – | 设置如超出则记录语句示例的最短执行时间(ms)。示例数量使用 log_statement_sample_rate 参数进行设置。 |
log_min_duration_statement | – | 任何至少运行指定时间或更长时间的 SQL 语句都会被记录下来。原定设置情况下,不设置此参数。开启该参数可帮助查找未优化的查询。 |
log_statement | – | 设置所记录的语句类型。原定设置情况下,未设置此参数,但您可以将其更改为 |
log_statement_sample_rate | – | 超过在 |
log_statement_stats | – | 向服务器日志写入累计性能统计数据。 |
使用日志记录查找执行缓慢的查询
您可以记录 SQL 语句和查询,以帮助查找执行缓慢的查询。您可以通过修改本节中概述的 log_statement
和 log_min_duration
参数的设置来开启此功能。在为 RDS for PostgreSQL 数据库实例开启查询日志记录之前,您应该了解日志中可能存在的密码泄露以及如何降低风险。有关更多信息,请参阅 降低使用查询日志记录时泄露密码的风险。
接下来,您可以了解有关 log_statement
和 log_min_duration
参数的参考信息。
log_statement
此参数指定应发送到日志的 SQL 语句的类型。默认值为 none
。如果您将此参数更改为 all
、ddl
或 mod
,请务必采取建议的操作来降低在日志中泄露密码的风险。有关更多信息,请参阅 降低使用查询日志记录时泄露密码的风险。
- all
-
记录所有语句。建议将此设置用于调试目的。
- ddl
-
记录所有数据定义语言(DDL)语句,例如 CREATE、ALTER、DROP 等。
- mod
-
记录所有可修改数据的 DDL 语句和数据操作语言(DML)语句,例如 INSERT、UPDATE 和 DELETE。
- none
-
不记录任何 SQL 语句。我们建议使用此设置,以避免在日志中泄露密码的风险。
log_min_duration_statement
任何至少运行指定时间或更长时间的 SQL 语句都会被记录下来。原定设置情况下,不设置此参数。开启该参数可帮助查找未优化的查询。
- –1–2147483647
-
如超过即记录语句的运行时间的毫秒数(ms)。
设置查询日志记录
这些步骤假设您的 RDS for PostgreSQL 数据库实例使用自定义数据库参数组。
将
log_statement
参数设置为all
。以下示例显示了使用此参数设置写入postgresql.log
文件的信息。2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: statement: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: QUERY STATISTICS 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:DETAIL: ! system usage stats: ! 0.017355 s user, 0.000000 s system, 0.168593 s elapsed ! [0.025146 s user, 0.000000 s system total] ! 36644 kB max resident size ! 0/8 [0/8] filesystem blocks in/out ! 0/733 [0/1364] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent ! 19/0 [27/0] voluntary/involuntary context switches 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:ERROR: syntax error at or near "ORDER" at character 1 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: ORDER BY s.confidence DESC; ----------------------- END OF LOG ----------------------
设置
log_min_duration_statement
参数。以下示例显示了参数设置为postgresql.log
时写入1
文件的信息。将记录超过在
log_min_duration_statement
参数中指定的持续时间的查询。下面是一个示例。您可以在 Amazon RDS 控制台中查看 RDS for PostgreSQL 数据库实例的日志文件。2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: statement: DROP table comments; 2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: duration: 167.754 ms 2022-10-05 19:08:07 UTC::@:[355]:LOG: checkpoint starting: time 2022-10-05 19:08:08 UTC::@:[355]:LOG: checkpoint complete: wrote 11 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=1.013 s, sync=0.006 s, total=1.033 s; sync files=8, longest=0.004 s, average=0.001 s; distance=131028 kB, estimate=131028 kB ----------------------- END OF LOG ----------------------
降低使用查询日志记录时泄露密码的风险
我们建议您将 log_statement
保持设置为 none
,以避免泄露密码。如果您将 log_statement
设置为 all
、ddl
或 mod
,我们建议您采取以下一个或多个步骤。
-
对于客户端,加密敏感信息。有关更多信息,请参阅 PostgreSQL 文档中的加密选项
。使用 ENCRYPTED
和UNENCRYPTED
语句的CREATE
(和ALTER
)选项。有关更多信息,请参阅 PostgreSQL 文档中的 CREATE USER。 对于您的 RDS for PostgreSQL 数据库实例,请设置并使用 PostgreSQL Auditing(pgAudit)扩展。此扩展编辑发送到日志的 CREATE 和 ALTER 语句中的敏感信息。有关更多信息,请参阅 使用 pgAudit 记录数据库活动。
-
限制对 CloudWatch Logs 的访问。
-
使用更强的身份验证机制,如 IAM。