

# RDS 代理监控控制面板
<a name="rds-proxy-monitoring-dashboard"></a>

您可以在代理的“监控”选项卡下访问 RDS 代理监控控制面板。

![RDS 代理监控控制面板。](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/Proxy-monitoring-dashboard.png)


控制面板提供了一组预先配置的指标，这些指标按小部件排列，用于帮助您执行常见的可观测性和故障排除任务。如果某个指标在此控制面板中不可见，您可以使用控制面板上的链接在 CloudWatch 中查看所有指标。

您不能在默认控制面板上添加或删除指标。如果您希望为代理创建自定义监控视图，可以直接在 CloudWatch 中进行创建。有关更多信息，请参阅[使用 CloudWatch 控制面板](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

监控控制面板分为几个部分，使用预定义的聚合，按小部件分组指标。有关底层 RDS 代理指标的更多信息，请参阅[使用 CloudWatch 监控 RDS 代理指标](https://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/rds-proxy.monitoring.html)。

**Topics**
+ [概述](#rds-proxy-monitoring-dashboard-overview)
+ [延迟](#rds-proxy-monitoring-dashboard-latency)
+ [连接池](#rds-proxy-monitoring-dashboard-connection-pool)
+ [数据库连接利用率](#rds-proxy-monitoring-dashboard-db-connections-utilization-section)

## 概述
<a name="rds-proxy-monitoring-dashboard-overview"></a>

### 按角色划分的可用性百分比
<a name="rds-proxy-monitoring-dashboard-availability"></a>

目标在 `READWRITE` 和 `READ_ONLY` 角色中可用的时间百分比，基于 `AvailabilityPercentage` 指标的聚合。

可用性指标描述的是代理执行的数据库运行状况检查的成功率，这反映了目标数据库实例的运行状况。此小部件使用每个角色的 `Average` 统计数据，其计算结果受给定角色中的数据库实例数量（`READ_ONLY` 角色为一个，`READWRITE` 角色可能有多个）和代理中的节点数（由 RDS 代理基础设施决定）的影响。

**注意**  
RDS 代理会根据向它注册的数据库实例自动调整其容量。您无法直接控制代理中的节点数量，但可以使用可用性指标的 `sample count` 统计数据来检查当前节点数。有关 RDS 代理如何调整其容量的更多信息，请参阅[计划 IP 地址容量](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/rds-proxy-network-prereqs.html#rds-proxy-network-prereqs.plan-ip-address)。

**`READWRITE` 目标角色**只能包含一个数据库实例，可用性百分比按所有代理节点的平均运行状况检查成功率计算。例如，如果代理包含四个节点，在给定时间段内，其中一个节点未收到成功的运行状况检查响应，则该期间的读/写可用性将报告为 75%。与此类似，如果代理包含四个节点，并且在 1 分钟的时段内，所有节点都有 30 秒无法执行运行状况检查，则在这 1 分钟内，代理将报告 50% 的可用性。

**`READ_ONLY` 目标角色**可以包含多个数据库实例，例如 Aurora 集群中的多个副本。从各个 RDS 代理节点的角度来看，如果有任意目标实例通过运行状况检查，则认为只读角色可用。然后，系统对所有代理节点的可用性求平均值，最终数字将显示在小部件中。以包含四个节点的代理为例：
+ 每个代理节点都会对多个只读目标（数据库实例）执行运行状况检查，其中一些检查成功，一些检查失败。代理节点只要收到来自至少一个目标实例的成功运行状况检查响应，就会将只读角色报告为可用。
+ 四个代理节点对多个只读目标执行运行状况检查。三个代理节点可以连接到至少一个目标，但一个代理节点无法连接到任何目标。只读角色的可用性将根据代理节点报告的角色可用性的 `Average` 进行计算：`(100% + 100% + 100% + 0% )/ 4 = 75%`

**注意**  
Aurora 集群或带有两个可读备用数据库的 Amazon RDS Multi-AZ 数据库集群部署支持 RDS 代理 `READ_ONLY` 目标角色，但带有只读副本的 Amazon RDS 数据库实例部署不支持。如果代理不包含只读目标，则 `READ_ONLY` 角色的可用性可能会显示“零”。

角色可用性小部件在以下场景中非常有用：
+ 诊断连接错误，用于快速评测可用性是否因代理节点或目标数据库实例的运行状况而受到影响。
+ 诊断高流量事件，此时数据库没有出现明显的不可用情况，但根据代理的运行状况检查指标，可以合理地推断数据库出现过载。RDS 代理使用多个持久性连接，这些连接保留用于监控和运行状况检查任务，因此，如果数据库指标未显示存在停机时间，但代理的运行状况检查间歇性失败，则可能表明数据库负载过大。
+ 确定导致代理无法连接到目标实例的配置问题。例如，如果您看到代理可用性指标出现下降，但根据其他信号，目标实例似乎运行正常，则可能表明与代理子网关联的网络 ACL 存在问题，或者连接到目标数据库实例的安全组配置错误。

在诊断涉及 RDS 代理可用性指标的问题时，您还必须检查数据库本身的运行状况和利用率指标。代理的可用性计算受数据库响应运行状况检查的能力的影响，因此在得出结论之前，必须从两端收集信息。

### 按角色划分的数据库连接利用率百分比
<a name="rds-proxy-monitoring-dashboard-db-connections-utilization"></a>

 每个角色的代理连接池利用率百分比，计算方法为 `DatabaseConnections` 除以 `MaxDatabaseConnectionsAllowed`。

允许的最大数据库连接数是指由 `MaxConnectionsPercent` 设置控制的代理的最大池大小，这反过来又取决于数据库连接限制，例如 `max_connections` 参数。有关此设置的更多信息，请参阅 [RDS 代理连接注意事项](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/rds-proxy-connections.html)。

**注意**  
RDS 代理会保留一部分 `MaxConnectionsPercent` 配额用于内部监控连接。预留连接的总数不是常数，而是取决于内部代理节点的数量和目标数据库实例的数量。

我们建议，允许的连接数相比峰值负载期间预期的最大数据库连接数，应保留至少 30% 的余量。这种余量在出现意外工作负载激增时可以改善客户端体验，并帮助 RDS 代理在其内部基础设施中重新分配连接，以进行热管理和实现其他用途。为了帮助您遵循此建议，连接利用率小部件提供了一条固定的参考线，位于最大值的 70% 位置。

例如，假设您有一个 Aurora PostgreSQL 集群，其中包含一个写入器和两个读取器，每个实例的 `max_connections` 设置为 500，代理的 `MaxConnectionsPercent` 配置为 50：

1. RDS 代理保留了多个连接用于监控用途，这意味着每个实例的 `MaxDatabaseConnectionsAllowed` 连接数少于 250：`(max_connections=500 * MaxConnectionsPercent=50%) - reserved connections`

1. 对于包含一个写入器的 `READWRITE` 角色，代理连接池的最大大小将略小于 250（`50% * 500 - reserved_connections`），70% 的参考线将对应于少于 175 个连接（`70% * 250 - reserved connections`）。

1. 对于包含两个读取器的 `READ_ONLY` 角色，代理连接池的最大大小将略小于 500（`2 * 50% * 500 - reserved_connections`），70% 的参考线将对应于少于 350 个连接（`70% * 500 - reserved connections`）。

此小部件可用作连接利用率的一般指示器，在某些故障排除场景中可以作为非常有用的入手点。例如：
+ 连接利用率频繁出现剧烈的变化可能表明 `MaxIdleConnectionsPercent` 设置过低，您可以通过允许空闲连接在更长的时间内保持打开状态来减少连接流失。
+ 根据您的工作负载模式和客户端活动，您可能对在任何给定时间所使用的连接数量有更高的预期值。该小部件可以帮助您验证这些预期并检测潜在的客户端问题。请考虑这样一种情况：您的 `MaxIdleConnectionsPercent` 设置非常低，但连接利用率一直很高。这可能表明客户端很少处于空闲状态（这不一定是问题），但也可能意味着连接已被固定，因此不受空闲检查的约束。
+ 在固定或代理配置不存在问题的情况下，高数据库连接利用率可能表明着需要提高数据库的 `max_connections` 设置，对于只读角色，则可能表明集群可以使用更多的只读副本。

### 延迟细分
<a name="rds-proxy-monitoring-dashboard-latency-breakdown"></a>

连接借用和查询响应的延迟。


| 标签 | 说明 | 来源 | 
| --- | --- | --- | 
| DatabaseConnectionsBorrowLatency | 代理获取数据库连接所花费的时间，该连接可以是池中的现有连接，也可以是必须为数据库建立的新连接。 | RDS 代理，DatabaseConnectionsBorrowLatency 指标 | 
| QueryResponseLatency | 从获取查询请求到代理响应该请求的时间。 | RDS 代理，QueryResponseLatency 指标 | 
| QueryDatabaseResponseLatency | 数据库响应查询所花费的时间，包括代理与数据库之间的网络延迟。 | RDS 代理，QueryDatabaseResponseLatency 指标 | 

此小部件可帮助您了解查询的平均响应时间，以及代理层对总延迟的影响。借用延迟指标对于检测池拥塞特别有用，池拥塞是指由于池中没有足够的可用连接而导致客户端请求处于等待的状态。

只有当值大于零时，才会发布这些指标的数据点，这意味着在没有查询流量的时段内，小部件中可能会包含空缺值。

### 客户端连接
<a name="rds-proxy-monitoring-dashboard-client-connections"></a>

客户端与代理之间的连接数，按连接状态细分。


| 标签 | 说明 | 来源 | 
| --- | --- | --- | 
| ClientConnectionsReceived | 收到的客户端连接请求数。 | RDS 代理，ClientConnectionsReceived 指标 | 
| ClientConnectionsSetupSucceeded | 成功建立的客户端连接数。 | RDS 代理，ClientConnectionsSetupSucceeded 指标 | 
| ClientConnectionsSetupFailedAuth | 由于身份验证或 TLS 配置错误而失败的客户端连接尝试次数。 | RDS 代理，ClientConnectionsSetupFailedAuth 指标 | 
| ClientConnectionsClosed | 已关闭的客户端连接数。 | RDS 代理，ClientConnectionsClosed 指标 | 

此小部件可以在单个图表上显示多个客户端连接指标，从而帮助您评测客户端连接的吞吐量和状态。它可用于监控客户端连接的总体成功率，以及监视建立和关闭连接的速率。这有助于检测连接风暴和客户端活动在一段时间内的变化。

### 代理工作负载
<a name="rds-proxy-monitoring-dashboard-proxy-workload"></a>

基于 `QueryRequests` 代理指标的每个代理端点的查询请求数。

数据系列标签因端点而异：
+ 默认的读/写代理端点使用 `default` 标签。
+ 如果在通过 Amazon 管理控制台创建代理时，您启用了可选的只读端点，则此端点将使用 `read-only` 标签并以代理名称为前缀。对于名为 `my-proxy` 的代理，标签将是 `my-proxy-read-only`。
+ 其他代理端点使用端点名称作为标签，不带其他前缀。

此小部件可用于监控通过每个代理端点处理的工作负载量。

**重要**  
 对于使用扩展查询协议的 PostgreSQL 连接上的查询活动，目前不发出 `QueryRequests` 指标。

## 延迟
<a name="rds-proxy-monitoring-dashboard-latency"></a>

### 按目标划分的数据库响应延迟
<a name="rds-proxy-monitoring-dashboard-db-response-latency-by-target"></a>

基于 `QueryDatabaseResponseLatency` 代理指标的各目标（数据库实例）的数据库响应延迟。

在监控代理下每个数据库实例的数据库响应延迟时，尤其是在您将不同的数据库实例用于不同的工作负载或者实例大小不相同时，此小部件非常有用。考虑以下示例：
+ 一个数据库集群包含多个只读副本，所有这些副本都通过代理接收流量。此外，某些副本会绕过代理，直接从客户端接收流量。利用该小部件，您可以确定额外流量是否会影响通过代理处理的工作负载的查询延迟。
+ 数据库集群包含不同大小的副本，整个工作负载都通过代理处理，数据库实例使用默认连接配置，其中连接限制与实例大小成正比。代理遵循连接限制并按比例发送连接，较小的实例上的连接较少，但是由于这些实例的缓存和缓冲区也较小，因此可能会产生更高的延迟。该小部件可以帮助您确定是否出现了这种情况，以及小型实例的查询延迟是否与较大的实例持平。

## 连接池
<a name="rds-proxy-monitoring-dashboard-connection-pool"></a>

### 按角色划分的固定数据库连接百分比
<a name="rds-proxy-monitoring-dashboard-pinned-by-role"></a>

为每个角色固定的数据库连接的百分比，计算方法为将 `DatabaseConnectionsCurrentlySessionPinned` 除以 `DatabaseConnections`。

此小部件可用于监控工作负载中的连接固定。与其他小部件类似，此处使用相对值作为运行状况指标，这比固定连接的绝对数量更适用。理想值为零，但并非所有工作负载都完全可以避免连接固定。如果只有一小部分连接出现了固定并且不会对其他工作负载造成明显影响，您可能无需在意这种情况。但是，如果整个工作负载中有很大一部分遇到固定问题，则可能表明客户端行为存在问题，导致 RDS 代理无法实现连接的多路复用（在事务之间重复使用连接）。

要了解有关连接固定的更多信息，请参阅[避免固定 RDS 代理](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/rds-proxy-pinning.html)。

### 按角色划分的数据库连接设置指标
<a name="rds-proxy-monitoring-dashboard-setup-metrics-by-role"></a>

在代理与数据库之间设置的连接数，按设置结果和目标角色细分。该小部件显示每个角色的多个数据系列：


| 标签 | 说明 | 来源 | 
| --- | --- | --- | 
| DatabaseConnectionRequests | 创建数据库连接的请求数。 | RDS 代理，DatabaseConnectionRequests 指标 | 
| DatabaseConnectionsSetupSucceeded | 成功建立的数据库连接数。 | RDS 代理，DatabaseConnectionsSetupSucceeded 指标 | 
| DatabaseConnectionsSetupFailed | 失败的数据库连接请求数。 | RDS 代理，DatabaseConnectionsSetupFailed 指标 | 

只有当值大于零时，才会发布这些指标的数据点，这意味着在没有相关事件时段内，小部件中可能会包含空缺值。例如，如果在给定时间段内，客户端通过代理运行查询，并且代理可以通过重用现有的后端数据库连接（无需建立新连接）来处理全部流量，则您在该时间段内将看不到数据点。

此小部件对于监视代理与数据库之间的活动和连接流失非常有用。与**客户端连接**小部件上显示的信息结合起来，您可以使用它来评测代理内部的连接入池和多路复用的效率。

请记住，RDS 代理不会预先分配整个连接池的最大容量，并且会在数据库连接闲置一段时间后关闭这些连接。`DatabaseConnectionRequests` 大于零并在负载下波动是正常情况，但您可能需要注意 `DatabaseConnectionRequests` 与 `ClientConnectionsReceived` 的比率。例如：
+ 如果客户端与代理建立了一定数量的连接，而代理在每个时间段内建立的数据库连接数量几乎相同，则您可以推断代理由于固定或其他原因而无法重复使用连接。这种情况可能需要进一步调查，将重点放在阻止代理重复使用连接的客户端行为上。
+ 如果客户端与代理建立了一定数量的连接，但新数据库连接只是该数字的一小部分，则表明代理通过重用现有连接来处理绝大多数流量。这是连接池理想的正常状态。

### 按目标划分的数据库连接设置指标
<a name="rds-proxy-monitoring-dashboard-setup-metrics-by-target"></a>

相当于**按角色划分的数据库连接设置指标**，其数据按目标（数据库实例）细分。

## 数据库连接利用率
<a name="rds-proxy-monitoring-dashboard-db-connections-utilization-section"></a>

### 按目标划分的数据库连接利用率百分比
<a name="rds-proxy-monitoring-dashboard-utilization-by-target"></a>

每个目标（数据库实例）的代理连接池利用率百分比，计算方法为 `DatabaseConnections` 除以 `MaxDatabaseConnectionsAllowed`。

此小部件类似于**按角色划分的数据库连接利用率百分比**，但它提供每个数据库实例的连接利用率的精细视图。对于具有多个实例的数据库集群，在验证 `READ_ONLY` 角色中的公平连接分布时，该小部件非常有用。

例如，假设您的 Aurora 集群有两个读取器，每个读取器 500 个 `MaxDatabaseConnectionsAllowed`。如果第一个读取器的代理连接数为 100，第二个读取器上为 125，则小部件将显示第一个读取器的连接利用率为 20%，第二个读取器为 25%。

**注意**  
 RDS 代理尝试均衡每个副本上的客户端连接数，按数据库的连接限制加权。它不会根据 CPU 利用率等数据库指标对流量进行负载均衡，也不知道每个客户端会话在打开后会持续多长时间。因此，各个实例上的连接利用率略有不平衡是正常现象。

### 按 READWRITE/READ\_ONLY 角色划分的数据库连接使用情况
<a name="rds-proxy-monitoring-dashboard-usage-by-role"></a>

代理和数据库使用与允许的数据库连接数。此类型的小部件有两个：一个用于 `READWRITE` 角色，一个用于 `READ_ONLY` 角色。

仅当代理的数据库目标支持 `READ_ONLY` 角色（包括 Aurora 数据库集群和 Amazon RDS Multi-AZ 数据库集群部署）时，此小部件才可见。Amazon RDS 数据库实例部署不显示该小部件。

每个小部件都包含多个数据系列：


| 标签 | 说明 | 来源 | 
| --- | --- | --- | 
| Database Connections | 数据库中存在的连接数，连接可以由代理建立，也可以由客户端建立。 | 数据库，DatabaseConnections 指标 | 
| Database Connections: proxy | 代理与数据库之间存在的数据库连接数，不包括 RDS 代理用于数据库监控的内部连接。 | RDS 代理，DatabaseConnections 指标 | 
| MaxDatabaseConnectionsAllowed: Proxy | 代理允许的数据库连接最大数量，由 MaxConnectionsPercent 设置控制。 | RDS 代理，MaxDatabaseConnectionsAllowed 指标 | 

显示的数字是代理和底层数据库集群的总和（总计）。例如，假设数据库集群包含两个实例，每个实例允许 1000 个连接，并且代理的 `MaxConnectionsPercent` 配置为 `20`。在这种情况下，`MaxDatabaseConnectionsAllowed: Proxy` 将显示为 `2 * 1000 * 20% = 400` 减去 RDS 代理内部保留用于监控用途的连接数量。实际值将小于 `400`，并且会根据代理中的节点数量而有所不同。

此小部件在以下情况下尤为有用：
+ 监控代理和数据库所用连接的绝对数量。
+ 确定通过代理到达数据库的连接数与绕过代理的连接数。
+ 计算当前连接利用数量与允许的最大使用数量之间的差异。

**注意**  
 `DatabaseConnections` 的值将高于 `Database Connections: Proxy`，即使所有客户端连接都通过代理处理。RDS 平台和 RDS 代理基础设施始终维护着多个内部连接。数据库会计入这些连接的数量，但不反映在代理指标中。