跳至内容

如何监控 Amazon RDS 代理连接池并优化数据库连接?

3 分钟阅读
0

我想监控 Amazon Relational Database Services (Amazon RDS) 代理连接池并优化我的数据库连接。

解决方法

监控 RDS 代理和目标 RDS 数据库的指标

完成以下步骤:

  1. 打开 Amazon CloudWatch 控制台
  2. 在导航窗格中,选择 Metrics(指标),然后选择 All Metrics(所有指标)。
  3. Browse(浏览)选项卡上,选择 RDS,然后选择 Per-Proxy Metrics(每个代理的指标)。
  4. 搜索以下指标:
    ClientConnections 表示来自您的应用程序的传入连接数。
    MaxDatabaseConnectionsAllowed 表示允 RDS 代理允许的最大数据库连接数。
    DatabaseConnections 表示 RDS 代理与目标数据库建立的当前连接数。
  5. Browse(浏览)选项卡上,选择 RDS,然后选择 DBInstanceIdentifier
  6. 搜索 DatabaseConnections 指标以获取 RDS 代理与目标数据库建立的连接总数,以及与目标数据库的所有其他连接的总数。

最佳做法是以 1 分钟为粒度查看这些指标,并使用 Sum(总和)统计数据来获取有关连接使用模式的更多详细信息。

查看 RDS 代理日志事件

修改 RDS 代理以启用增强的日志记录,这样您就可以获取高级详细信息,例如开放连接数或关闭连接数。您还可以获取内部操作(如固定和借用)的详细信息。

**注意:**增强的日志记录会在 24 小时后自动关闭。

要查看 RDS 代理日志事件,请完成以下步骤:

  1. 打开 CloudWatch 控制台
  2. 在导航窗格中,选择 Logs(日志),然后选择 Log groups(日志组)。
  3. 为您的代理 /aws/rds/proxy/ 选择日志组。
  4. Log Streams(日志流)选项卡上,选择日志流以查看日志事件。

运行 CloudWatch Logs Insights 查询以检测异常

要访问 CloudWatch Logs Insights 中的查询编辑器,请完成以下步骤:

  1. 打开 CloudWatch 控制台
  2. 在导航窗格中,选择 Logs(日志),然后选择 Logs Insights

使用查询编辑器运行以下查询。在每个查询中,将 prx-000##### 替换为您的代理 ID。

要获取错误或警告,请运行以下查询:

fields @timestamp, @message  
| sort @timestamp asc  
| filter @logStream like 'prx-000#####'  
| filter @message like / ERROR: / or @message like / WARN: /

要确定客户端连接关闭的原因,请运行以下查询:

fields @message  
| sort @timestamp asc  
| filter @logStream like 'prx-000#####'  
| filter @message like /The client connection closed/ and @message like /CUSTOMER/  
| parse 'Reason: *' as reason  
| stats count() as reasonCount by reason  
| sort by reasonCount desc  
| limit 20

要确定数据库连接关闭的原因,请运行以下查询:

fields @message  
| sort @timestamp asc  
| filter @logStream like 'prx-000xxxxx'  
| filter @message like /The database connection closed/ and @message like /CUSTOMER/  
| parse 'Reason: *' as reason  
| stats count() as reasonCount by reason  
| sort by reasonCount desc  
| limit 20

修改 RDS 代理连接设置

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

MaxConnectionsPercent

如果您的数据库已达到最大连接设置,那么您会收到以下错误消息:

"The database connection closed.Reason: The pool reached the maximum connection setting, and a connection with different properties was required."

要解决此问题,请监控 DatabaseConnectionsMaxDatabaseConnectionsAllowed CloudWatch 指标。如果 DatabaseConnections 即将达到 MaxDatabaseConnectionsAllowed,则限制传入流量。或者,运行 modify-db-proxy-target-group AWS CLI 命令或 ModifyDBProxyTargetGroup API 操作以增加 MaxConnectionsPercent 设置。将 MaxConnectionsPercent 设置为至少比最近监控到的最大使用量高出 30%。

MaxIdleConnectionsPercent

如果池中存在过多空闲连接,那么您会收到以下消息:

"The database connection closed.Reason: There were too many idle connections in the connection pool.A new slot in the connection pool is now available."

要解决此问题,请监控 ClientConnectionsDatabaseConnections CloudWatch 指标。如果 ClientConnections 持续小于 DatabaseConnections,则表示目标数据库存在空闲连接。默认情况下,MaxIdleConnectionsPercent 设置为 MaxConnectionsPercent 值的 50%。要修改 MaxIdleConnectionsPercent,请运行 modify-db-proxy-target-group AWS CLI 命令或 ModifyDBProxyTargetGroup API 操作。保持较高比例的空闲数据库连接处于开放状态。对于稳定的工作负载,请使用较低的值以避免空闲资源占用。

IdleClientTimeout

如果您的数据库超过了客户端连接空闲超时时间,那么您会收到以下消息:

"The client connection closed.Reason: The idle timeout was exceeded."

要移除空闲连接,请减少 IdleClientTimeout。如果您的工作负载经常与代理建立连接,请增加 IdleClientTimeout,这样您就无需频繁建立连接。要修改 IdleClientTimeout,请运行 modify-db-proxy AWS CLI 命令或 ModifyDBProxy API 操作。

ConnectionBorrowTimeout

如果您收到超时错误,则表示 RDS 代理无法建立数据库连接。

要将 ConnectionBorrowTimeout 设置为低于连接超时的值,请运行 modify-db-proxy-target-group AWS CLI 命令或 ModifyDBProxyTargetGroup API 操作。

手动关闭开放连接

如果数据库连接的空闲时间超过 24 小时,那么您会收到以下错误消息:

"The database connection closed.Reason: The idle connection exceeded the maximum connection duration."

您无法修改 RDS 代理中空闲数据库连接的最大生命周期。最佳做法则是手动关闭应用程序不需要重用的连接。

相关信息

RDS 代理的概念和术语

使用 Amazon CloudWatch 监控 RDS 代理指标