

# 使用适用于 Amazon RDS 的 Amazon DevOps Guru 分析性能异常
<a name="devops-guru-for-rds"></a>

Amazon DevOps Guru 是一项完全托管式运营服务，可帮助开发人员和运营商提高应用程序的性能和可用性。DevOps Guru 卸下了与识别运营问题相关的任务，以便您可以快速实施改进应用程序的建议。有关更多信息，请参阅《Amazon DevOps Guru 用户指南》**中的[什么是 Amazon DevOps Guru？](https://docs.aws.amazon.com/devops-guru/latest/userguide/welcome.html)。

DevOps Guru 可检测、分析所有 Amazon RDS 数据库引擎的现有操作问题并提出建议。DevOps Guru for RDS 通过将机器学习应用于 RDS for PostgreSQL 数据库的性能详情指标，扩展了此功能。这些监控功能使得适用于 RDS 的 DevOps Guru 可以检测和诊断性能瓶颈，并建议具体的纠正措施。DevOps Guru for RDS 还可以在您的 RDS for PostgreSQL 数据库中出现问题状况之前检测出这些状况。

现在，您可以在 RDS 控制台中查看这些建议。有关更多信息，请参阅 [来自 Amazon RDS 的建议](monitoring-recommendations.md)。

以下视频是关于 DevOps Guru for RDS 的概览。

[![AWS Videos](http://img.youtube.com/vi/N3NNYgzYUDA/0.jpg)](http://www.youtube.com/watch?v=N3NNYgzYUDA)


有关此主题的深入分析，请参阅 [Amazon DevOps Guru for RDS 深入剖析](https://aws.amazon.com/blogs/database/amazon-devops-guru-for-rds-under-the-hood/)。

**Topics**
+ [DevOps Guru for RDS 的优势](#devops-guru-for-rds.benefits)
+ [适用于 RDS 的 DevOps Guru 的工作原理](#devops-guru-for-rds.how-it-works)
+ [设置适用于 RDS 的 DevOps Guru](#devops-guru-for-rds.configuring)

## DevOps Guru for RDS 的优势
<a name="devops-guru-for-rds.benefits"></a>

如果是您负责 RDS for PostgreSQL 数据库，则您可能不知道正在发生影响该数据库的事件或回归。当您了解这个问题时，您可能不知道为什么会发生这个问题，也不知道该怎么处理它。您可以遵循 DevOps Guru for RDS 的建议，而不是向数据库管理员 (DBA) 寻求帮助或依赖第三方工具。

从 DevOps Guru for RDS 的详细分析中，您可以获得以下优势：

**快速诊断**  
DevOps Guru for RDS 会持续监控和分析数据库遥测。性能详情、增强监控和 Amazon CloudWatch 会收集数据库实例的遥测数据。DevOps Guru for RDS 会使用统计和机器学习技术来挖掘这些数据并检测异常情况。要了解有关遥测数据的更多信息，请参阅《Amazon RDS 用户指南》**中的[在 Amazon RDS 上使用性能详情监控数据库负载](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html)和[使用增强监控来监控操作系统指标](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html)。

**快速解决方案**  
每个异常情况都会识别性能问题，并建议调查或纠正措施的途径。例如，DevOps Guru for RDS 可能会建议您调查特定的等待事件。或者，它可能建议您优化应用程序池设置以限制数据库连接的数量。根据这些建议，您可以比手动进行故障排除更快地解决性能问题。

**主动见解**  
DevOps Guru for RDS 使用资源中的指标来检测潜在的问题行为，以免其成为更大的问题。例如，此服务可以检测数据库何时使用越来越多的磁盘临时表，这可能会开始影响性能。然后，DevOps Guru 会提供建议以帮助解决问题，从而防止问题变成更大的问题。

**深入了解 Amazon 工程师和机器学习**  
为了检测性能问题并帮助您解决瓶颈，DevOps Guru for RDS 依赖于机器学习（ML）和高级数据公式。Amazon 数据库工程师为 DevOps Guru for RDS 结果的开发做出了贡献，该服务封装了多年来管理成千上万个数据库的经验。通过利用这些集体知识，适用于 RDS 的 DevOps Guru 可以教您最佳实践。

## 适用于 RDS 的 DevOps Guru 的工作原理
<a name="devops-guru-for-rds.how-it-works"></a>

DevOps Guru for RDS 从 Amazon RDS 性能详情中收集有关 RDS for PostgreSQL 数据库的数据。最重要的指标是 `DBLoad`。适用于 RDS 的 DevOps Guru 使用性能详情指标，使用机器学习对其进行分析，并将洞察发布到控制面板。

*洞察*是 DevOps Guru 检测到的相关异常的集合。

在 DevOps Guru for RDS 中，*异常*是一种与 RDS for PostgreSQL 数据库的正常性能有所偏差的模式。

### 主动见解
<a name="devops-guru-for-rds.how-it-works.insights.proactive"></a>

*主动见解*可以让您在问题发生之前了解问题行为。它包含异常情况以及建议和相关指标，可以帮助您解决 RDS for PostgreSQL 数据库中的问题，以免问题变得更严重。这些见解发布在 DevOps Guru 控制面板上。

例如，DevOps Guru 可能会检测到 RDS for PostgreSQL 数据库正在创建许多磁盘上的临时表。如果不加以解决，这种趋势可能会导致性能问题。每项主动见解都包含有关纠正行为的建议以及指向[使用 Amazon DevOps Guru 主动见解优化 RDS for PostgreSQL](PostgreSQL.Tuning_proactive_insights.md)中相关主题的链接。有关更多信息，请参阅《Amazon DevOps Guru 用户指南》**中的[在 DevOps Guru 中使用见解](https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html)。

### 被动见解
<a name="devops-guru-for-rds.how-it-works.insights.reactive"></a>

*被动见解*可在异常行为发生时识别此类行为。如果 DevOps Guru for RDS 发现您的 RDS for PostgreSQL 数据库实例中的性能问题，它会在 DevOps Guru 控制面板中发布被动见解。有关更多信息，请参阅《Amazon DevOps Guru 用户指南》**中的[在 DevOps Guru 中使用见解](https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-insights.html)。

#### 因果异常
<a name="devops-guru-for-rds.how-it-works.anomalies.causal"></a>

*因果异常*是被动见解内的一项顶级异常。**数据库加载（数据库加载）**是适用于 RDS 的 DevOps Guru 的因果异常。

异常情况通过分配严重性级别 **High**（高）、**Medium**（中）或 **Low**（低）来衡量性能影响。要了解详情，请参阅《*Amazon DevOps Guru 用户指南*》中的[适用于 RDS 的 DevOps Guru 的关键概念](https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-rds.overview.definitions.html)。

如果 DevOps Guru 检测到数据库实例上的当前异常情况，则会在 RDS 控制台的 **Databases**（数据库）页面中收到提示。控制台还会提示您注意过去 24 小时内发生的异常。要从 RDS 控制台转到异常页面，请选择警报消息中的链接。RDS 控制台还会在 RDS for PostgreSQL 数据库实例的页面中向您发出提示。

#### 上下文异常
<a name="devops-guru-for-rds.how-it-works.anomalies.contextual"></a>

*上下文异常*是**数据库负载（DB 负载）**内与被动见解相关的一项调查结果。每个上下文异常都描述了需要调查的特定 RDS for PostgreSQL 性能问题。例如，适用于 RDS 的 DevOps Guru 可能会建议您考虑增加 CPU 容量或调查导致数据库负载的等待事件。

**重要**  
我们建议您在修改生产实例之前在测试实例上测试所有更改。通过这种方式，您可以了解更改的影响。

要了解详情，请参阅《Amazon DevOps Guru 用户指南》**中的[分析 Amazon RDS 中的异常](https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-rds.analyzing.html)。

## 设置适用于 RDS 的 DevOps Guru
<a name="devops-guru-for-rds.configuring"></a>

要允许 DevOps Guru for Amazon RDS 发布 RDS for PostgreSQL 数据库的见解，请完成以下任务。

**Topics**
+ [配置适用于 RDS 的 DevOps Guru 的 IAM 访问策略](#devops-guru-for-rds.configuring.access)
+ [为您的 RDS for PostgreSQL 数据库实例开启性能详情](#devops-guru-for-rds.configuring.performance-insights)
+ [打开 DevOps Guru 并指定资源覆盖范围](#devops-guru-for-rds.configuring.coverage)

### 配置适用于 RDS 的 DevOps Guru 的 IAM 访问策略
<a name="devops-guru-for-rds.configuring.access"></a>

要在 RDS 控制台中查看来自 DevOps Guru 的提示，您的 AWS Identity and Access Management (IAM) 用户或角色必须具有以下任一策略：
+ AWS 托管策略 `AmazonDevOpsGuruConsoleFullAccess`
+ AWS 托管式策略 `AmazonDevOpsGuruConsoleReadOnlyAccess` 以及以下任一策略：
  + AWS 托管策略 `AmazonRDSFullAccess`
  + 客户托管策略包括 `pi:GetResourceMetrics` 和 `pi:DescribeDimensionKeys`

有关更多信息，请参阅 [为 Performance Insights 配置访问策略](USER_PerfInsights.access-control.md)。

### 为您的 RDS for PostgreSQL 数据库实例开启性能详情
<a name="devops-guru-for-rds.configuring.performance-insights"></a>

适用于 RDS 的 DevOps Guru 依靠性能详情来获取其数据。如果没有性能详情，DevOps Guru 会发布异常情况，但不包括详细的分析和建议。

在创建或修改 RDS for PostgreSQL 数据库实例时，可以开启性能详情。有关更多信息，请参阅 [为 Amazon RDS 打开和关闭性能详情](USER_PerfInsights.Enabling.md)。

### 打开 DevOps Guru 并指定资源覆盖范围
<a name="devops-guru-for-rds.configuring.coverage"></a>

您可以开启 DevOps Guru，以让它通过以下任一方式监控您的 RDS for PostgreSQL 数据库。

**Topics**
+ [在 RDS 控制台中开启 DevOps Guru](#devops-guru-for-rds.configuring.coverage.rds-console)
+ [在 DevOps Guru 控制台中添加 RDS for PostgreSQL 资源](#devops-guru-for-rds.configuring.coverage.guru-console)
+ [使用 CloudFormation 添加 RDS for PostgreSQL 资源](#devops-guru-for-rds.configuring.coverage.cfn)

#### 在 RDS 控制台中开启 DevOps Guru
<a name="devops-guru-for-rds.configuring.coverage.rds-console"></a>

您可以在 Amazon RDS 控制台中通过多个途径来开启 DevOps Guru。

**Topics**
+ [创建 RDS for PostgreSQL 数据库时开启 DevOps Guru](#devops-guru-for-rds.configuring.coverage.rds-console.create)
+ [从通知横幅开启 DevOps Guru](#devops-guru-for-rds.configuring.coverage.rds-console.existing)
+ [响应开启 DevOps Guru 时的权限错误](#devops-guru-for-rds.configuring.coverage.rds-console.error)

##### 创建 RDS for PostgreSQL 数据库时开启 DevOps Guru
<a name="devops-guru-for-rds.configuring.coverage.rds-console.create"></a>

创建工作流包括一个设置，该设置可为数据库开启 DevOps Guru 覆盖范围。原定设置情况下，当您选择 **Production**（生产）模板时，此设置处于开启状态。

**创建 RDS for PostgreSQL 数据库时开启 DevOps Guru**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 按[创建数据库实例](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating)中的步骤操作，直至（但不包括）您选择监控设置的步骤。

1. 在 **Monitoring**（监控）中，选择 **Turn on Performance Insights**（开启性能详情）。为让 DevOps Guru for RDS 提供对性能异常情况的详细分析，必须开启性能详情。

1. 选择 **Turn on DevOps Guru**（开启 DevOps Guru）。  
![\[创建数据库实例时开启 DevOps Guru\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/devops-guru-enable-create.png)

1. 为数据库创建一个标签，以便 DevOps Guru 可以对其进行监控。执行以下操作：
   + 在 **Tag key**（标签键）的文本字段中，输入以 **Devops-Guru-** 开头的名称。
   + 在 **Tag key**（标签键）的文本字段中，输入任意值。例如，如果输入 **rds-database-1** 作为 RDS for PostgreSQL 数据库的名称，还可以输入 **rds-database-1** 作为标签值。

   有关标签的更多信息，请参阅《Amazon DevOps Guru 用户指南》**中的“[使用标签识别 DevOps Guru 应用程序中的资源](https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-resource-tags.html)”。

1. 完成[创建数据库实例](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating) 中的其余步骤。

##### 从通知横幅开启 DevOps Guru
<a name="devops-guru-for-rds.configuring.coverage.rds-console.existing"></a>

如果 DevOps Guru 未涵盖您的资源，Amazon RDS 会在以下位置通过横幅通知您：
+ 数据库集群实例的 **Monitoring**（监控）选项卡
+ 性能详情控制面板

![\[DevOps Guru 横幅\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/devops-guru-enable-banner.png)


**为 RDS for PostgreSQL 数据库开启 DevOps Guru**

1. 在横幅中，选择 **Turn on DevOps Guru for RDS**（开启适用于 RDS 的 DevOps Guru）。

1. 输入标签键名称和值。有关标签的更多信息，请参阅《Amazon DevOps Guru 用户指南》**中的“[使用标签识别 DevOps Guru 应用程序中的资源](https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-resource-tags.html)”。  
![\[在 RDS 控制台中开启 DevOps Guru\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/devops-guru-turn-on.png)

1. 选择 **Turn on DevOps Guru**（开启 DevOps Guru）。

##### 响应开启 DevOps Guru 时的权限错误
<a name="devops-guru-for-rds.configuring.coverage.rds-console.error"></a>

如果您在创建数据库时从 RDS 控制台开启 DevOps Guru，RDS 可能会显示以下关于缺少权限的横幅。

![\[指明缺少权限错误的横幅\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/devops-guru-permissions-error.png)


**响应权限错误**

1. 向您的 IAM 用户或角色授予用户托管式角色 `AmazonDevOpsGuruConsoleFullAccess`。有关更多信息，请参阅 [配置适用于 RDS 的 DevOps Guru 的 IAM 访问策略](#devops-guru-for-rds.configuring.access)。

1. 打开 RDS 控制台。

1. 在导航窗格中，选择**性能详情**。

1. 在刚创建的集群中选择一个数据库实例。

1. 选择此开关以开启 **DevOps Guru for RDS**。  
![\[选择此开关以开启 DevOps Guru for RDS\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/devops-guru-pi-toggle-off.png)

1. 选择标签值。有关更多信息，请参阅《Amazon DevOps Guru 用户指南》**中的“[使用标签识别 DevOps Guru 应用程序中的资源](https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-resource-tags.html)”。  
![\[在 Amazon RDS 控制台中开启 DevOps Guru\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/devops-guru-turn-on.png)

1. 选择 **Turn on DevOps Guru**（开启 DevOps Guru）。

#### 在 DevOps Guru 控制台中添加 RDS for PostgreSQL 资源
<a name="devops-guru-for-rds.configuring.coverage.guru-console"></a>

您可以在 DevOps Guru 控制台上指定 DevOps Guru 资源覆盖范围。按照《Amazon DevOps Guru 用户指南》**中的[指定 DevOps Guru 资源覆盖范围](https://docs.aws.amazon.com/devops-guru/latest/userguide/choose-coverage.html)中描述的步骤操作。编辑所分析的资源时，请选择以下选项之一：
+ 选择**所有账户资源**以分析所有受支持的资源，包括您的 AWS 账户和区域中的 RDS for PostgreSQL 数据库。
+ 选择 **CloudFormation 堆栈**来分析您选择的堆栈中的 RDS for PostgreSQL 数据库。有关更多信息，请参阅《Amazon DevOps Guru 用户指南》**中的[使用 AWS CloudFormation 堆栈识别 DevOps Guru 应用程序中的资源](https://docs.aws.amazon.com//devops-guru/latest/userguide/working-with-cfn-stacks.html)。
+ 选择**标签**来分析您已标记的 RDS for PostgreSQL 数据库。有关更多信息，请参阅《Amazon DevOps Guru 用户指南》**中的[使用标签识别 DevOps Guru 应用程序中的资源](https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-resource-tags.html)。

有关更多信息，请参阅《Amazon DevOps Guru 用户指南》**中的[启用 DevOps Guru](https://docs.aws.amazon.com/devops-guru/latest/userguide/getting-started-enable-service.html)。

#### 使用 CloudFormation 添加 RDS for PostgreSQL 资源
<a name="devops-guru-for-rds.configuring.coverage.cfn"></a>

可以使用标签向您的 CloudFormation 模板添加 RDS for PostgreSQL 资源的覆盖范围。以下过程假设您具有同时适用于 RDS for PostgreSQL 数据库实例和 DevOps Guru 堆栈的 CloudFormation 模板。

**使用 CloudFormation 标签指定 RDS for PostgreSQL 数据库实例**

1. 在数据库实例的 CloudFormation 模板中，使用键/值对定义标签。

   以下示例将 RDS for PostgreSQL 数据库实例的值 `my-db-instance1` 分配给 `Devops-guru-cfn-default`。

   ```
   MyDBInstance1:
     Type: "AWS::RDS::DBInstance"
     Properties:
       DBInstanceIdentifier: my-db-instance1
       Tags:
         - Key: Devops-guru-cfn-default
           Value: devopsguru-my-db-instance1
   ```

1. 在 DevOps Guru 堆栈的 CloudFormation 模板中，在资源收集筛选条件中指定相同的标签。

   以下示例将 DevOps Guru 配置为使用标签值 `my-db-instance1` 为资源提供覆盖范围。

   ```
   DevOpsGuruResourceCollection:
     Type: AWS::DevOpsGuru::ResourceCollection
     Properties:
       ResourceCollectionFilter:
         Tags:
           - AppBoundaryKey: "Devops-guru-cfn-default"
             TagValues:
             - "devopsguru-my-db-instance1"
   ```

   以下示例涵盖了应用程序边界 `Devops-guru-cfn-default` 内的所有资源。

   ```
   DevOpsGuruResourceCollection:
     Type: AWS::DevOpsGuru::ResourceCollection
     Properties:
       ResourceCollectionFilter:
         Tags:
           - AppBoundaryKey: "Devops-guru-cfn-default"
             TagValues:
             - "*"
   ```

有关更多信息，请参阅《CloudFormation 用户指南》**中的 [AWS::DevOpsGuru::ResourceCollection](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-devopsguru-resourcecollection.html) 和 [AWS::RDS::DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbinstance.html)。