

# 监控 Amazon RDS 数据库实例中的事件、日志和流
<a name="CHAP_Monitor_Logs_Events"></a>

监控您的 Amazon RDS 数据库和其他 Amazon 解决方案时，您的目标是维持以下各项：
+ 可靠性
+ 可用性
+ 性能
+ 安全性

[监控 Amazon RDS 实例中的指标](CHAP_Monitoring.md) 说明如何使用指标监控实例。完整的解决方案还必须监控数据库事件、日志文件和活动流。Amazon 为您提供以下监控工具：
+ *Amazon EventBridge* 是一种无服务器事件总线服务，可以轻松地将应用程序与来自各种来源的数据相连接。EventBridge 可以从您自己的应用程序、软件即服务（SaaS）应用程序和 Amazon 服务传输实时数据流。EventBridge 将该数据路由到诸如 Amazon Lambda 之类的目标。这样，您就可以监控服务中发生的事件，并构建事件驱动的架构。有关更多信息，请参阅 [Amazon EventBridge 用户指南](https://docs.amazonaws.cn/eventbridge/latest/userguide/)。
+ *Amazon CloudWatch Logs* 提供了一种方法，让您可以监控、存储和访问来自 Amazon RDS 实例、Amazon CloudTrail 和其他来源的日志文件。Amazon CloudWatch Logs 可以监控日志文件中的信息，并在达到特定阈值时通知您。您还可以在高持久性存储中检索您的日志数据。有关更多信息，请参阅 [Amazon CloudWatch Logs 用户指南](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/)。
+ *Amazon CloudTrail* 捕获由某个 Amazon Web Services 账户 发出或代表该账户发出的 API 调用和相关事件。CloudTrail 将日志文件传送到您指定的 Amazon S3 桶。您可以标识哪些用户和账户调用了 Amazon、发出调用的源 IP 地址以及调用的发生时间。有关更多信息，请参阅[《Amazon CloudTrail 用户指南》](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/)。
+ *数据库活动流*是一项 Amazon RDS 功能，它提供数据库实例中近乎实时的活动流。Amazon RDS 会将活动推送到 Amazon Kinesis 数据流。系统将自动创建 Kinesis 流。在 Kinesis 中，您可以配置 Amazon 服务（如 Amazon Data Firehose）和 Amazon Lambda 来使用 Kinesis 流并存储数据。

**Topics**
+ [

# 在 Amazon RDS 控制台中查看日志、事件和流
](logs-events-streams-console.md)
+ [

# 监控 Amazon RDS 事件
](working-with-events.md)
+ [

# 监控 Amazon RDS 日志文件
](USER_LogAccess.md)
+ [

# 监控 Amazon CloudTrail 中的 Amazon RDS API 调用
](logging-using-cloudtrail.md)
+ [

# 使用数据库活动流监控 Amazon RDS
](DBActivityStreams.md)
+ [

# 使用 Amazon GuardDuty RDS 保护功能监控威胁
](guard-duty-rds-protection.md)

# 在 Amazon RDS 控制台中查看日志、事件和流
<a name="logs-events-streams-console"></a>

Amazon RDS 与 Amazon Web Services 服务 集成，以在 RDS 控制台中显示关于日志、事件和数据库活动流的信息。

RDS 数据库实例的**日志和事件**选项卡显示以下信息：
+ **Amazon CloudWatch 告警** - 显示为 的数据库实例配置的任何指标告警。如果尚未配置告警，您可以在 RDS 控制台中创建告警。有关更多信息，请参阅。[使用 Amazon CloudWatch 监控 Amazon RDS 指标](monitoring-cloudwatch.md)
+ **Recent events**（近期事件）- 显示 RDS 数据库实例事件（环境变更）的摘要。有关更多信息，请参阅 [查看 Amazon RDS 事件](USER_ListEvents.md)。
+ **Logs**（日志）- 显示中数据库实例生成的数据库日志文件。有关更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

**Configuration**（配置）选项卡显示关于数据库活动流的信息。

**在 RDS 控制台中查看数据库实例的日志、事件和流**

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

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要监控的 数据库实例的名称。

   随后会显示数据库页面。以下示例显示名为 `orclb` 的 Oracle 数据库。  
![\[图示为 Database（数据库）页面及监控选项卡\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/oracle-with-monitoring-tab.png)

1. 选择**日志和事件**。

   此时将显示 Logs & events（日志和事件）部分。  
![\[图示为 Database（数据库）页面及 Logs & events（日志和事件）选项卡\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/oracle-logs-and-events-subpage.png)

1. 选择**配置**。

   以下示例显示数据库实例的数据库活动流的状态。  
![\[增强监控\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/oracle-das.png)

# 监控 Amazon RDS 事件
<a name="working-with-events"></a>

*事件*表示环境中的更改。这可以是 Amazon 环境、SaaS 合作伙伴服务或应用程序，或自定义应用程序或服务。有关 RDS 事件的说明，请参阅 [Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。

**Topics**
+ [

## Amazon RDS 事件概述
](#rds-cloudwatch-events.sample)
+ [

# 查看 Amazon RDS 事件
](USER_ListEvents.md)
+ [

# 使用 Amazon RDS 事件通知
](USER_Events.md)
+ [

# 创建对 Amazon RDS 事件触发的规则
](rds-cloud-watch-events.md)
+ [

# Amazon RDS 事件类别和事件消息
](USER_Events.Messages.md)

## Amazon RDS 事件概述
<a name="rds-cloudwatch-events.sample"></a>

*RDS 事件*表示 Amazon RDS 环境中的更改。例如，当数据库实例的状态从挂起变为正在运行时，Amazon RDS 将生成事件。Amazon RDS 将事件近乎实时地传输到 EventBridge。

**注意**  
Amazon RDS 尽最大努力发出事件。我们建议您避免编写取决于通知事件的顺序或存在的程序，因为它们可能是乱序或缺失的。

Amazon RDS 记录与以下资源相关的事件：
+ 数据库实例

  有关数据库实例事件的列表，请参阅 [数据库实例事件](USER_Events.Messages.md#USER_Events.Messages.instance)。
+ 数据库参数组

  有关数据库参数组事件的列表，请参阅 [数据库参数组事件](USER_Events.Messages.md#USER_Events.Messages.parameter-group)。
+ 数据库安全组

  有关数据库安全组事件的列表，请参阅 [数据库安全组事件](USER_Events.Messages.md#USER_Events.Messages.security-group)。
+ 数据库快照

  有关数据库快照事件的列表，请参阅 [数据库快照事件](USER_Events.Messages.md#USER_Events.Messages.snapshot)。
+ RDS Proxy 事件

  有关 RDS Proxy 事件的列表，请参阅 [RDS Proxy 事件](USER_Events.Messages.md#USER_Events.Messages.rds-proxy)。
+ 蓝绿部署事件

  有关蓝绿部署事件的列表，请参阅 [蓝绿部署事件](USER_Events.Messages.md#USER_Events.Messages.BlueGreenDeployments)。

这些信息包含：
+ 事件的日期和时间
+ 事件的源名称和源类型
+ 与事件关联的消息
+ 事件通知包括发送消息时的标签，可能不反映事件发生时的标签。

# 查看 Amazon RDS 事件
<a name="USER_ListEvents"></a>

您可以检索 Amazon RDS 资源的以下事件信息：
+ 资源名称
+ 资源类型
+ 事件的时间
+ 事件的消息摘要

您可以访问 Amazon Web Services 管理控制台的以下各部分中的事件：
+ **事件**选项卡，显示过去 24 小时的事件。
+ **数据库**选项卡中**日志和事件**部分的**近期事件**表，可以显示多达过去 2 周的事件。

您还可以通过使用 [describe-events](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-events.html) Amazon CLI 命令或 [DescribeEvents](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeEvents.html) RDS API 操作来检索事件。如果您使用 Amazon CLI 或 RDS API 查看事件，则可检索过去长达 14 天内的事件。

**注意**  
如果需要将事件存储更长的时间段，则可以将 Amazon RDS 事件发送到 EventBridge。有关更多信息，请参阅 [创建对 Amazon RDS 事件触发的规则](rds-cloud-watch-events.md)

有关 Amazon RDS 事件的说明，请参阅 [Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。

要访问有关使用 Amazon CloudTrail 的事件的详细信息，包括请求参数，请参阅 [CloudTrail 事件](logging-using-cloudtrail.md#service-name-info-in-cloudtrail.events)。

## 控制台
<a name="USER_ListEvents.CON"></a>

**查看过去 24 小时的所有 Amazon RDS 事件**

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

1. 在导航窗格中，选择 **Events (事件)**。

   列表中显示可用的事件。

1. （可选）输入搜索词以筛选结果。

   以下示例显示按字符 **stopped** 筛选的事件列表。  
![\[列出数据库事件\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/ListEvents.png)

## Amazon CLI
<a name="USER_ListEvents.CLI"></a>

要查看过去一小时内生成的所有事件，请调用 [describe-events](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-events.html)，不带参数。

```
aws rds describe-events
```

以下示例输出显示数据库实例已停止。

```
{
    "Events": [
        {
            "EventCategories": [
                "notification"
            ], 
            "SourceType": "db-instance", 
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:db:testinst", 
            "Date": "2022-04-22T21:31:00.681Z", 
            "Message": "DB instance stopped", 
            "SourceIdentifier": "testinst"
        }
    ]
}
```

要查看过去 10080 分钟（7 天）的所有 Amazon RDS 事件，请调用 [describe-events](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-events.html) Amazon CLI 命令并将 `--duration` 参数设置为 `10080`。

```
1. aws rds describe-events --duration 10080
```

以下示例显示数据库实例 *test-instance* 在指定时间范围内的事件。

```
aws rds describe-events \
    --source-identifier test-instance \
    --source-type db-instance \
    --start-time 2022-03-13T22:00Z \
    --end-time 2022-03-13T23:59Z
```

以下示例输出显示备份的状态。

```
{
    "Events": [
        {
            "SourceType": "db-instance",
            "SourceIdentifier": "test-instance",
            "EventCategories": [
                "backup"
            ],
            "Message": "Backing up DB instance",
            "Date": "2022-03-13T23:09:23.983Z",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:db:test-instance"
        },
        {
            "SourceType": "db-instance",
            "SourceIdentifier": "test-instance",
            "EventCategories": [
                "backup"
            ],
            "Message": "Finished DB Instance backup",
            "Date": "2022-03-13T23:15:13.049Z",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:db:test-instance"
        }
    ]
}
```

## API
<a name="USER_ListEvents.API"></a>

通过调用 [DescribeEvents](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeEvents.html) RDS API 操作并将 `Duration` 参数设置为 `20160`，您可查看过去 14 天内的所有 Amazon RDS 实例事件。

# 使用 Amazon RDS 事件通知
<a name="USER_Events"></a>

Amazon RDS 使用 Amazon Simple Notification Service (Amazon SNS) 在发生 Amazon RDS 事件时提供通知。这些通知可以采用 Amazon 区域 Amazon SNS 支持的任何通知形式，例如电子邮件、文本消息或对 HTTP 终端节点的调用。

**Topics**
+ [

# Amazon RDS 事件通知概述
](USER_Events.overview.md)
+ [

# 授予向 Amazon SNS 主题发布通知的权限。
](USER_Events.GrantingPermissions.md)
+ [

# 订阅 Amazon RDS 事件通知
](USER_Events.Subscribing.md)
+ [

# Amazon RDS 事件通知标签和属性
](USER_Events.TagsAttributesForFiltering.md)
+ [

# 列出 Amazon RDS 事件通知订阅
](USER_Events.ListSubscription.md)
+ [

# 修改 Amazon RDS 事件通知订阅
](USER_Events.Modifying.md)
+ [

# 在 Amazon RDS 事件通知订阅中添加源标识符
](USER_Events.AddingSource.md)
+ [

# 从 Amazon RDS 事件通知订阅中删除源标识符
](USER_Events.RemovingSource.md)
+ [

# 列出 Amazon RDS 事件通知类型
](USER_Events.ListingCategories.md)
+ [

# 删除 Amazon RDS 事件通知订阅
](USER_Events.Deleting.md)

# Amazon RDS 事件通知概述
<a name="USER_Events.overview"></a>

Amazon RDS 将事件分组为您可以订阅的类型，以便您在出现该类事件时收取通知。

**Topics**
+ [

## 符合事件订阅条件的 RDS 资源
](#USER_Events.overview.resources)
+ [

## 订阅 Amazon RDS 事件通知的基本流程
](#USER_Events.overview.process)
+ [

## 发送 RDS 事件通知
](#USER_Events.overview.subscriptions)
+ [

## Amazon RDS 事件通知的计费
](#USER_Events.overview.billing)
+ [

## 使用 Amazon EventBridge 的 Amazon RDS 事件的示例
](#events-examples)

## 符合事件订阅条件的 RDS 资源
<a name="USER_Events.overview.resources"></a>

您可以订阅以下资源的事件类别：
+ 数据库实例
+ 数据库快照
+ 数据库参数组
+ 数据库安全组
+ RDS 代理
+ 自定义引擎版本

例如，如果您订阅给定数据库实例的备份类别，那么无论何时出现影响该数据库实例的备份相关事件，您都将收到通知。如果您订阅对于数据库实例的配置更改类别，则会在数据库实例出现更改时收到通知。您还将在事件通知订阅更改时收到通知。

您可能需要创建多个不同的订阅。例如，您可能创建一个订阅以接收所有数据库实例的所有事件通知，并创建另一个订阅，其中仅包括数据库实例子集的严重事件。对于第二个订阅，请在筛选条件中指定一个或多个数据库实例。

## 订阅 Amazon RDS 事件通知的基本流程
<a name="USER_Events.overview.process"></a>

订阅 Amazon RDS 事件通知的流程如下：

1. 您使用 Amazon RDS 控制台、Amazon CLI 或者 API 创建 Amazon RDS 事件通知订阅。

   Amazon RDS 使用 Amazon SNS 主题的 ARN 标识每个订阅。Amazon RDS 控制台在您创建订阅时为您创建 ARN。使用 Amazon SNS 控制台、Amazon CLI 或 Amazon SNS API 创建 ARN。

1. Amazon RDS 发送批准电子邮件或者 SMS 消息给您在订阅时提交的地址。

1. 您可以通过选择所收到的通知中的链接来确认您的订阅。

1. Amazon RDS 控制台更新 **My Event Subscriptions**（我的事件订阅）部分，其中包含您的订阅状态。

1. Amazon RDS 开始将通知发送到您在创建订阅时提供的地址。

要了解使用 Amazon SNS 时的 Identity of Access Management，请查看 *Amazon Simple Notification Service 开发人员指南*中的 [Amazon SNS 中的 Identity of Access Management](https://docs.amazonaws.cn/sns/latest/dg/sns-authentication-and-access-control.html)。

您可以使用处理 Amazon Lambda 来自数据库实例的事件通知。有关更多信息，请参阅 *Amazon Lambda 开发人员指南*中的[将 Amazon Lambda 与 Amazon RDS 结合使用](https://docs.amazonaws.cn/lambda/latest/dg/services-rds.html)。

## 发送 RDS 事件通知
<a name="USER_Events.overview.subscriptions"></a>

Amazon RDS 会将通知发送到您在创建订阅时提供的地址。通知可以包含消息属性，以提供有关消息的结构化元数据。有关消息属性的更多信息，请参阅[Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。

事件通知的传递可能需要长达五分钟。

**重要**  
Amazon RDS 不保证在事件流中发送的事件的顺序。事件顺序可能会发生变化。

当 Amazon SNS 向已经订阅的 HTTP 或 HTTPS 端点发送一条通知时，发至端点的 POST 消息具有包含 JSON 格式文档的消息正文。有关更多信息，请参阅 *Amazon Simple Notification Service 开发人员指南* 中的 [Amazon SNS 消息和 JSON 格式](https://docs.amazonaws.cn/sns/latest/dg/sns-message-and-json-formats.html)。

您可以将 SNS 配置为通过短信通知。有关更多信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的[移动文本消息 (SMS)](https://docs.amazonaws.cn/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html)。

要在不删除订阅的情况下关闭通知，请在 Amazon RDS 控制台中为**已启用**选择**否**。或者，可以使用 Amazon CLI 或 Amazon RDS API 将 `Enabled` 参数设置为 `false`。

## Amazon RDS 事件通知的计费
<a name="USER_Events.overview.billing"></a>

Amazon RDS 事件通知的计费是通过 Amazon SNS 执行的。Amazon SNS 费用在使用事件通知时适用。有关 Amazon SNS 计费的更多信息，请参阅 [Amazon Simple Notification Service 定价](https://www.amazonaws.cn/sns/#pricing)。

## 使用 Amazon EventBridge 的 Amazon RDS 事件的示例
<a name="events-examples"></a>

以下示例说明了 JSON 格式的不同类型的 Amazon RDS 事件。有关向您说明如何以 JSON 格式捕获和查看事件的教程，请参阅[教程：使用 Amazon EventBridge 记录数据库实例的状态更改](rds-cloud-watch-events.md#log-rds-instance-state)。

**Topics**
+ [

### 数据库实例事件的示例
](#rds-cloudwatch-events.db-instances)
+ [

### 数据库参数组事件的示例
](#rds-cloudwatch-events.db-parameter-groups)
+ [

### 数据库快照事件的示例
](#rds-cloudwatch-events.db-snapshots)

### 数据库实例事件的示例
<a name="rds-cloudwatch-events.db-instances"></a>

以下是采用 JSON 格式的数据库实例事件的示例。该事件显示，RDS 为名为 `my-db-instance` 的实例执行了多可用区故障转移。事件 ID 为 RDS-EVENT-0049。

```
{
  "version": "0",
  "id": "68f6e973-1a0c-d37b-f2f2-94a7f62ffd4e",
  "detail-type": "RDS DB Instance Event",
  "source": "aws.rds",
  "account": "123456789012",
  "time": "2018-09-27T22:36:43Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:rds:us-east-1:123456789012:db:my-db-instance"
  ],
  "detail": {
    "EventCategories": [
      "failover"
    ],
    "SourceType": "DB_INSTANCE",
    "SourceArn": "arn:aws:rds:us-east-1:123456789012:db:my-db-instance",
    "Date": "2018-09-27T22:36:43.292Z",
    "Message": "A Multi-AZ failover has completed.",
    "SourceIdentifier": "my-db-instance",
    "EventID": "RDS-EVENT-0049"
  }
}
```

### 数据库参数组事件的示例
<a name="rds-cloudwatch-events.db-parameter-groups"></a>

以下是采用 JSON 格式的数据库参数组事件的示例。该事件显示参数 `time_zone` 已在参数组 `my-db-param-group` 中更新。事件 ID 为 RDS-EVENT-0037。

```
{
  "version": "0",
  "id": "844e2571-85d4-695f-b930-0153b71dcb42",
  "detail-type": "RDS DB Parameter Group Event",
  "source": "aws.rds",
  "account": "123456789012",
  "time": "2018-10-06T12:26:13Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:rds:us-east-1:123456789012:pg:my-db-param-group"
  ],
  "detail": {
    "EventCategories": [
      "configuration change"
    ],
    "SourceType": "DB_PARAM",
    "SourceArn": "arn:aws:rds:us-east-1:123456789012:pg:my-db-param-group",
    "Date": "2018-10-06T12:26:13.882Z",
    "Message": "Updated parameter time_zone to UTC with apply method immediate",
    "SourceIdentifier": "my-db-param-group",
    "EventID": "RDS-EVENT-0037"
  }
}
```

### 数据库快照事件的示例
<a name="rds-cloudwatch-events.db-snapshots"></a>

以下是采用 JSON 格式的数据库快照事件的示例。该事件显示删除名 `my-db-snapshot` 为的快照。事件 ID 为 RDS-EVENT-0041。

```
{
  "version": "0",
  "id": "844e2571-85d4-695f-b930-0153b71dcb42",
  "detail-type": "RDS DB Snapshot Event",
  "source": "aws.rds",
  "account": "123456789012",
  "time": "2018-10-06T12:26:13Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:rds:us-east-1:123456789012:snapshot:rds:my-db-snapshot"
  ],
  "detail": {
    "EventCategories": [
      "deletion"
    ],
    "SourceType": "SNAPSHOT",
    "SourceArn": "arn:aws:rds:us-east-1:123456789012:snapshot:rds:my-db-snapshot",
    "Date": "2018-10-06T12:26:13.882Z",
    "Message": "Deleted manual snapshot",
    "SourceIdentifier": "my-db-snapshot",
    "EventID": "RDS-EVENT-0041"
  }
}
```

# 授予向 Amazon SNS 主题发布通知的权限。
<a name="USER_Events.GrantingPermissions"></a>

要授予 Amazon RDS 将通知发布到 Amazon Simple Notification Service (Amazon SNS) 主题的权限，请将 Amazon Identity and Access Management (IAM) 策略附加到目标主题。有关权限的更多信息，请参阅《Amazon Simple Notification Service 开发人员指南》**中的 [Amazon Simple Notification Service 访问控制示例案例](https://docs.amazonaws.cn/sns/latest/dg/sns-access-policy-use-cases.html)。

原定设置情况下，Amazon SNS 主题具有一项策略，它允许同一账户中的所有 Amazon RDS 资源向其发布通知。您可以附加自定义策略以允许跨账户通知，或限制对某些资源的访问。

以下是您附加到目标 Amazon SNS 主题的 IAM 策略示例。它将主题限制为名称与指定前缀匹配的数据库实例。要使用此策略，请指定以下值：
+ `Resource` – Amazon SNS 主题的 Amazon 资源名称 (ARN)
+ `SourceARN` – 您的 RDS 资源 ARN
+ `SourceAccount` – 您的 Amazon Web Services 账户 ID

有关资源类型及其 ARN 的列表，请参阅《服务授权参考》**中的 [Amazon RDS 定义的资源](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonrds.html#amazonrds-resources-for-iam-policies)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "events.rds.amazonaws.com"
      },
      "Action": [
        "sns:Publish"
      ],
      "Resource": "arn:aws:sns:us-east-1:123456789012:topic_name",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:rds:us-east-1:123456789012:db:prefix-*"
        },
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        }
      }
    }
  ]
}
```

------

# 订阅 Amazon RDS 事件通知
<a name="USER_Events.Subscribing"></a>

最简单的订阅创建方法是使用 RDS 控制台。如果您选择使用 CLI 或 API 创建事件通知，则必须创建 Amazon Simple Notification Service 主题并订阅有关 Amazon SNS 控制台或 Amazon SNS API 的主题。您还必须保留该主题的 Amazon Resource Name (ARN)，因为在提交 CLI 命令或者 API 操作时会用到。有关创建和订阅 SNS 主题的信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的 [Amazon SNS 入门](https://docs.amazonaws.cn/sns/latest/dg/GettingStarted.html)。

您可以指定希望收取其通知的源类型以及触发该事件的 Amazon RDS 源：

**Source type**（源类型）  
源类型。例如，**Source type**（源类型）可能是 **Instances**（实例）。必须选择一种源类型。

***Resources* to include**（要包含的资源）  
生成事件的 Amazon RDS 资源。例如，您可以选择 **Select specific instances**（选择特定实例），然后选择 **myDBInstance1**。

下表说明了指定或不指定 ***Resources* to include**（要包含的资源）时的结果。


|  要包含的资源  |  描述  |  示例  | 
| --- | --- | --- | 
|  指定  |  RDS 仅向您通知指定资源的所有事件。  | 如果 Source type（源类型）为 Instances（实例），资源为 myDBInstance1，则 RDS 仅向您通知 myDBInstance1 的所有事件。 | 
|  未指定  |  RDS 会向您通知所有 Amazon RDS 资源的指定源类型的事件。  |  如果 **Source type**（源类型）是 **Instances**（实例），RDS 会向您通知您的账户中所有与实例相关的事件。  | 

原定设置情况下，Amazon SNS 主题订阅用户会收到发布到该主题的每条消息。要仅接收一部分消息，订阅用户必须将筛选策略分配给主题订阅。有关更多信息，请参阅《Amazon Simple Notification Service 开发人员指南》**中的 [Amazon SNS 消息筛选](https://docs.amazonaws.cn/sns/latest/dg/sns-message-filtering.html)。

## 控制台
<a name="USER_Events.Subscribing.Console"></a>

**订阅 RDS 事件通知**

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

1. 在导航窗格中，选择**事件订阅**。

1. 在**事件订阅**窗格中，选择**创建事件订阅**。

1. 输入您的订阅详情，如下所示：

   1. 对于**名称**，输入事件通知订阅的名称。

   1. 对于 **Send notifications to**（发送通知到），执行以下操作之一：
      + 选择 **New email topic**（新建电子邮件主题）。输入电子邮件主题的名称和收件人列表。我们建议您将事件订阅配置为与主要账户联系人相同的电子邮件地址。建议、服务事件和个人健康信息是通过不同的渠道发送的。订阅同一个电子邮件地址可确保将所有邮件合并到一个位置。
      + 选择 **Amazon Resource Name (ARN)** [Amazon 资源名称（ARN）]。然后，为 Amazon SNS 主题选择现有的 Amazon SNS ARN。

        如果您想使用已启用服务器端加密 (SSE) 的主题，请向 Amazon RDS 授予访问 Amazon KMS key 的必需权限。有关更多信息，请参阅《Amazon Simple Notification Service 开发人员指南》中的[实现 Amazon 服务中的事件源与加密主题之间的兼容性](https://docs.amazonaws.cn/sns/latest/dg/sns-key-management.html#compatibility-with-aws-services)。

   1. 对于**源类型**，请选择一种源类型。例如，选择 **Instances**（实例）或 **Parameter groups**（参数组）。

   1. 选择要接收事件通知的事件类别和资源。

      以下示例为名为 `testinst` 的数据库实例配置事件通知。  
![\[输入源类型\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/event-source.png)

   1. 选择**创建**。

Amazon RDS 控制台会表明正在创建订阅。

![\[列出数据库事件通知订阅\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/EventNotification-Create2.png)


## Amazon CLI
<a name="USER_Events.Subscribing.CLI"></a>

要订阅 RDS 事件通知，请使用 Amazon CLI [https://docs.amazonaws.cn/cli/latest/reference/rds/create-event-subscription.html](https://docs.amazonaws.cn/cli/latest/reference/rds/create-event-subscription.html) 命令。包括以下必需参数：
+ `--subscription-name`
+ `--sns-topic-arn`

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds create-event-subscription \
    --subscription-name myeventsubscription \
    --sns-topic-arn arn:aws:sns:us-east-1:123456789012:myawsuser-RDS \
    --enabled
```
对于 Windows：  

```
aws rds create-event-subscription ^
    --subscription-name myeventsubscription ^
    --sns-topic-arn arn:aws:sns:us-east-1:123456789012:myawsuser-RDS ^
    --enabled
```

## API
<a name="USER_Events.Subscribing.API"></a>

要订阅 Amazon RDS 事件通知，请调用 Amazon RDS API 函数 [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateEventSubscription.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateEventSubscription.html)。包括以下必需参数：
+ `SubscriptionName`
+ `SnsTopicArn`

# Amazon RDS 事件通知标签和属性
<a name="USER_Events.TagsAttributesForFiltering"></a>

当 Amazon RDS 向 Amazon Simple Notification Service（SNS）或 Amazon EventBridge 发送事件通知时，通知包含消息属性和事件标签。RDS 将消息属性与消息一起单独发送，而事件标签位于消息正文中。使用消息属性和 Amazon RDS 标签将元数据添加到您的资源中。您可以使用您自己的关于数据库实例的表示法来修改这些标签。有关标记 Amazon RDS 资源的更多信息，请参阅[为 Amazon RDS 资源添加标签](USER_Tagging.md)。

默认情况下，Amazon SNS 和 Amazon EventBridge 会接收发送给它们的每条消息。SNS 和 EventBridge 可以筛选消息，并将通知发送到首选的通信模式，例如电子邮件、短信或对 HTTP 端点的调用。

**注意**  
通过电子邮件或短信发送的通知将没有事件标签。

下表显示了发送给主题订阅用户的 RDS 事件的消息属性。


| Amazon RDS 事件属性 |  说明  | 
| --- | --- | 
| EventID |  RDS 事件消息的标识符，例如 RDS-EVENT-0006。  | 
| 资源 |  发出事件的资源的 ARN 标识符，例如 `arn:aws:rds:ap-southeast-2:123456789012:db:database-1`。  | 

RDS 标签提供有关受服务事件影响的资源的数据。当通知发送到 SNS 或 EventBridge 时，RDS 会在消息正文中添加标签的当前状态。

有关筛选 SNS 的消息属性的更多信息，请参阅《Amazon Simple Notification Service 开发人员指南》**中的 [Amazon SNS 消息筛选](https://docs.amazonaws.cn/sns/latest/dg/sns-message-filtering.html)。

有关筛选 EventBridge 的事件标签的更多信息，请参阅《Amazon EventBridge 用户指南》**中的 [Comparison operators for use in event patterns in Amazon EventBridge](https://docs.amazonaws.cn/eventbridge/latest/userguide/eb-event-patterns-content-based-filtering.html)。

有关筛选 SNS 的基于有效载荷的标签的更多信息，请参阅 [Introducing payload-based message filtering for Amazon SNS](https://www.amazonaws.cn/blogs/compute/introducing-payload-based-message-filtering-for-amazon-sns/)

# 列出 Amazon RDS 事件通知订阅
<a name="USER_Events.ListSubscription"></a>

您可以列出当前的 Amazon RDS 事件通知订阅。

## 控制台
<a name="USER_Events.ListSubscription.Console"></a>

**列出当前的 Amazon RDS 事件通知订阅**

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

1.  在导航窗格中，选择**事件订阅**。**事件订阅**窗格中会显示您的所有事件通知订阅。  
![\[列出数据库事件通知订阅\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/EventNotification-ListSubs.png)

   

## Amazon CLI
<a name="USER_Events.ListSubscription.CLI"></a>

要列出当前的 Amazon RDS 事件通知订阅，请使用 Amazon CLI [https://docs.amazonaws.cn/cli/latest/reference/rds/describe-event-subscriptions.html](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-event-subscriptions.html) 命令。

**Example**  
以下示例描述所有事件订阅。  

```
aws rds describe-event-subscriptions
```
以下示例描述 `myfirsteventsubscription`。  

```
aws rds describe-event-subscriptions --subscription-name myfirsteventsubscription
```

## API
<a name="USER_Events.ListSubscription.API"></a>

要列出当前的 Amazon RDS 事件通知订阅，请调用 Amazon RDS API [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeEventSubscriptions.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeEventSubscriptions.html) 操作。

# 修改 Amazon RDS 事件通知订阅
<a name="USER_Events.Modifying"></a>

创建订阅后，您可以更改订阅名称、源标识符、类别或主题 ARN。

## 控制台
<a name="USER_Events.Modifying.Console"></a>

**修改 Amazon RDS 事件通知订阅**

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

1.  在导航窗格中，选择**事件订阅**。

1.  在**事件订阅**窗格中，选择您要修改的订阅，然后选择**编辑**。

1.  在**目标**或**来源**部分中对订阅进行更改。

1. 选择**编辑**。Amazon RDS 控制台会表明正在修改订阅。  
![\[列出数据库事件通知订阅\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/EventNotification-Modify2.png)

   

## Amazon CLI
<a name="USER_Events.Modifying.CLI"></a>

要修改 Amazon RDS 事件通知订阅，请使用 Amazon CLI [https://docs.amazonaws.cn/cli/latest/reference/rds/modify-event-subscription.html](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-event-subscription.html) 命令。包括以下必需参数：
+ `--subscription-name`

**Example**  
以下代码实现 `myeventsubscription`。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-event-subscription \
    --subscription-name myeventsubscription \
    --enabled
```
对于 Windows：  

```
aws rds modify-event-subscription ^
    --subscription-name myeventsubscription ^
    --enabled
```

## API
<a name="USER_Events.Modifying.API"></a>

要修改 Amazon RDS 事件，请调用 Amazon RDS API 操作 [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyEventSubscription.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyEventSubscription.html)。包括以下必需参数：
+ `SubscriptionName`

# 在 Amazon RDS 事件通知订阅中添加源标识符
<a name="USER_Events.AddingSource"></a>

您可以给现有的订阅添加源标识符 (生成事件的 Amazon RDS 源)。

## 控制台
<a name="USER_Events.AddingSource.Console"></a>

您可以使用 Amazon RDS 控制台在修改订阅时通过选择或者取消选择操作轻松地添加或删除源标识符。有关更多信息，请参阅“[修改 Amazon RDS 事件通知订阅](USER_Events.Modifying.md)”。

## Amazon CLI
<a name="USER_Events.AddingSource.CLI"></a>

要将源标识符添加到 Amazon RDS 事件通知订阅，请使用 Amazon CLI [https://docs.amazonaws.cn/](https://docs.amazonaws.cn/) 命令。包括以下必需参数：
+ `--subscription-name`
+ `--source-identifier`

**Example**  
以下示例将源标识符 `mysqldb` 添加到 `myrdseventsubscription` 订阅。  
对于 Linux、macOS 或 Unix：  

```
aws rds add-source-identifier-to-subscription \
    --subscription-name myrdseventsubscription \
    --source-identifier mysqldb
```
对于：Windows  

```
aws rds add-source-identifier-to-subscription ^
    --subscription-name myrdseventsubscription ^
    --source-identifier mysqldb
```

## API
<a name="USER_Events.AddingSource.API"></a>

要将源标识符添加到 Amazon RDS 事件通知订阅，请调用 Amazon RDS API [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_AddSourceIdentifierToSubscription.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_AddSourceIdentifierToSubscription.html)。包括以下必需参数：
+ `SubscriptionName`
+ `SourceIdentifier`

# 从 Amazon RDS 事件通知订阅中删除源标识符
<a name="USER_Events.RemovingSource"></a>

如果您不再希望收到源的事件通知，可以从订阅中删除源标识符 (生成事件的 Amazon RDS 源)。

## 控制台
<a name="USER_Events.RemovingSource.Console"></a>

您可以使用 Amazon RDS 控制台在修改订阅时通过选择或者取消选择操作轻松地添加或删除源标识符。有关更多信息，请参阅“[修改 Amazon RDS 事件通知订阅](USER_Events.Modifying.md)”。

## Amazon CLI
<a name="USER_Events.RemovingSource.CLI"></a>

要从 Amazon RDS 事件通知订阅删除源标识符，请使用 Amazon CLI [https://docs.amazonaws.cn/cli/latest/reference/rds/remove-source-identifier-from-subscription.html](https://docs.amazonaws.cn/cli/latest/reference/rds/remove-source-identifier-from-subscription.html) 命令。包括以下必需参数：
+ `--subscription-name`
+ `--source-identifier`

**Example**  
以下示例将从 `mysqldb` 订阅中删除源标识符 `myrdseventsubscription`。  
对于 Linux、macOS 或 Unix：  

```
aws rds remove-source-identifier-from-subscription \
    --subscription-name myrdseventsubscription \
    --source-identifier mysqldb
```
对于：Windows  

```
aws rds remove-source-identifier-from-subscription ^
    --subscription-name myrdseventsubscription ^
    --source-identifier mysqldb
```

## API
<a name="USER_Events.RemovingSource.API"></a>

要从 Amazon RDS 事件通知订阅删除源标识符，请使用 Amazon RDS API [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RemoveSourceIdentifierFromSubscription.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RemoveSourceIdentifierFromSubscription.html) 命令。包括以下必需参数：
+ `SubscriptionName`
+ `SourceIdentifier`

# 列出 Amazon RDS 事件通知类型
<a name="USER_Events.ListingCategories"></a>

资源类型的所有事件都可以分组为类型。要查看可用类型的列表，请使用下列步骤。

## 控制台
<a name="USER_Events.ListingCategories.Console"></a>

当创建或者修改事件通知订阅时，事件类型会显示在 Amazon RDS 控制台中。有关更多信息，请参阅“[修改 Amazon RDS 事件通知订阅](USER_Events.Modifying.md)”。

![\[列出数据库事件通知类别\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/EventNotification-Categories.png)




## Amazon CLI
<a name="USER_Events.ListingCategories.CLI"></a>

要列出 Amazon RDS 事件通知类别，请使用 Amazon CLI [https://docs.amazonaws.cn/cli/latest/reference/rds/describe-event-categories.html](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-event-categories.html) 命令。此命令没有必需参数。

**Example**  

```
aws rds describe-event-categories
```

## API
<a name="USER_Events.ListingCategories.API"></a>

要列出 Amazon RDS 事件通知类别，请使用 Amazon RDS API [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeEventCategories.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeEventCategories.html) 命令。此命令没有必需参数。

# 删除 Amazon RDS 事件通知订阅
<a name="USER_Events.Deleting"></a>

当您不再需要时，可以删除订阅。该主题的所有用户都将再也不会收到订阅指定的事件通知。

## 控制台
<a name="USER_Events.Deleting.Console"></a>

**删除 Amazon RDS 事件通知订阅**

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

1.  在导航窗格中，选择**数据库事件订阅**。

1.  在**我的数据库事件订阅**窗格中，选择您希望删除的订阅。

1. 选择 **Delete**。

1. Amazon RDS 控制台会表明正在删除订阅。  
![\[删除事件通知订阅\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/EventNotification-Delete.png)

   

## Amazon CLI
<a name="USER_Events.Deleting.CLI"></a>

要删除 Amazon RDS 事件通知订阅，请使用 Amazon CLI [https://docs.amazonaws.cn/cli/latest/reference/rds/delete-event-subscription.html](https://docs.amazonaws.cn/cli/latest/reference/rds/delete-event-subscription.html) 命令。包括以下必需参数：
+ `--subscription-name`

**Example**  
以下示例删除订阅 `myrdssubscription`。  

```
aws rds delete-event-subscription --subscription-name myrdssubscription
```

## API
<a name="USER_Events.Deleting.API"></a>

要删除 Amazon RDS 事件通知订阅，请使用 RDS API [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DeleteEventSubscription.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DeleteEventSubscription.html) 命令。包括以下必需参数：
+ `SubscriptionName`

# 创建对 Amazon RDS 事件触发的规则
<a name="rds-cloud-watch-events"></a>

使用 Amazon EventBridge，您可以自动执行 Amazon 服务和响应系统事件，例如应用程序可用性问题或资源更改。

**Topics**
+ [

## 创建将 Amazon RDS 事件发送到 Amazon EventBridge 的规则
](#rds-cloudwatch-events.sending-to-cloudwatch-events)
+ [

## 教程：使用 Amazon EventBridge 记录数据库实例的状态更改
](#log-rds-instance-state)

## 创建将 Amazon RDS 事件发送到 Amazon EventBridge 的规则
<a name="rds-cloudwatch-events.sending-to-cloudwatch-events"></a>

您可以编写简单规则来指示所关注的 Amazon RDS 事件，并指示在事件匹配规则时要执行的自动化操作。您可以设置接收 JSON 格式的事件的各种目标，例如 Amazon Lambda 函数或 Amazon SNS 主题。例如，您可以将 Amazon RDS 配置为只要创建或删除数据库实例就向 Amazon EventBridge 发送事件。有关更多信息，请参阅 [Amazon CloudWatch Events 用户指南](https://docs.amazonaws.cn/AmazonCloudWatch/latest/events/)和 [Amazon EventBridge 用户指南](https://docs.amazonaws.cn/eventbridge/latest/userguide/)。

**创建对 RDS 事件触发的规则：**

1. 通过以下网址打开 CloudWatch 控制台：[https://console.aws.amazon.com/cloudwatch/](https://console.amazonaws.cn/cloudwatch/)。

1. 在导航窗格中的**事件**下，选择**规则**。

1. 选择 **Create rule (创建规则)**。

1. 对于 **Event Source (事件源)**，执行以下操作：

   1. 选择 **Event Pattern (事件模式)**。

   1. 对于**服务名称**，请选择 **Relational Database Service (RDS)**。

   1. 对于 **Event Type**（事件类型），请选择触发事件的 Amazon RDS 资源的类型。例如，如果数据库实例触发事件，请选择 **RDS DB Instance Event**（RDS 数据库实例事件）。

1. 对于**目标**，选择**添加目标**，并选择当检测到选定类型的事件时要执行的 Amazon 服务。

1. 在此部分的其他字段中，根据需要输入此目标类型的特定信息。

1. 对于许多目标类型，EventBridge 需要权限以便将事件发送到目标。在这些情况下，EventBridge 可以创建事件运行所需的 IAM 角色：
   + 要自动创建 IAM 角色，请选择**为此特定资源创建新角色**。
   + 要使用您之前创建的 IAM 角色，请选择**使用现有角色**。

1. 根据需要，可以重复步骤 5 至 7 为此规则添加另一目标。

1. 选择 **Configure details (配置详细信息)**。对于 **Rule definition (规则定义)**，键入规则的名称和描述。

   规则名称在此区域中必须是唯一的。

1. 选择 **Create rule (创建规则)**。

有关更多信息，请参阅《Amazon CloudWatch 用户指南》**中的 [Creating an EventBridge Rule That Triggers on an Event](https://docs.amazonaws.cn/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Rule.html)。

## 教程：使用 Amazon EventBridge 记录数据库实例的状态更改
<a name="log-rds-instance-state"></a>

在本教程中，您可以创建 Amazon Lambda 函数来记录 Amazon RDS 实例的状态更改。然后，您可以创建一项规则，只要现有 RDS 数据库实例的状态发生更改，便运行该函数。本教程假定您有一个小型的可以暂时关闭的正在运行的测试实例。

**重要**  
请勿在正在运行的生产数据库实例上执行本教程。

**Topics**
+ [

### 步骤 1：创建 Amazon Lambda 函数
](#rds-create-lambda-function)
+ [

### 步骤 2：创建规则
](#rds-create-rule)
+ [

### 步骤 3：测试规则
](#rds-test-rule)

### 步骤 1：创建 Amazon Lambda 函数
<a name="rds-create-lambda-function"></a>

创建 Lambda 函数以记录状态更改事件。在创建规则时，您可以指定此函数。

**创建 Lambda 函数**

1. 打开 Amazon Lambda 控制台，地址：[https://console.aws.amazon.com/lambda/](https://console.amazonaws.cn/lambda/)。

1. 如果您是首次接触 Lambda，您将看到欢迎页面。选择 **Get Started Now (立即开始)**。否则，选择**创建函数**。

1. 选择 **Author from scratch (从头创作)**。

1. 在 **Create function (创建函数)** 页面上，执行以下操作：

   1. 输入 Lambda 函数的名称和说明。例如，将函数命名为 **RDSInstanceStateChange**。

   1. 在 **Runtime**（运行时）中，选择 **Node.js 16x**。

   1. 对于 **Architecture**（架构），选择 **x86\$164**。

   1. 对于 **Execution role**（执行角色），请执行以下任一操作：
      + 选择 **Create a new role with basic Lambda permissions (创建具有基本 Lambda 权限的新角色)**。
      + 对于 **Existing role**（现有角色），选择 **Use an existing role**（使用现有角色）。选择要使用的角色。

   1. 选择**创建函数**。

1. 在 **RDSInstanceStateChange** 页面上，请执行以下操作：

   1. 在 **Code source (代码源)** 中，请选择**index.js**。

   1. 在 **index.js** 窗格中，删除现有代码。

   1. 输入以下代码：

      ```
      console.log('Loading function');
      
      exports.handler = async (event, context) => {
          console.log('Received event:', JSON.stringify(event));
      };
      ```

   1. 选择 **Deploy (部署)**。

### 步骤 2：创建规则
<a name="rds-create-rule"></a>

创建一个规则，以便启动 Lambda 实例时运行 Amazon RDS 函数。

**创建 EventBridge 规则**

1. 打开位于 [https://console.aws.amazon.com/events/](https://console.amazonaws.cn/events/) 的 Amazon EventBridge 控制台。

1. 在导航窗格中，选择**规则**。

1. 选择**创建规则**。

1. 为规则输入名称和描述。例如，输入 **RDSInstanceStateChangeRule**。

1. 选择 **Rule with an event pattern**（具有事件模式的规则），然后选择 **Next**（下一步）。

1. 对于**事件源**，选择 **Amazon 事件或 EventBridge 合作伙伴事件**。

1. 向下滚动到 **Event pattern**（事件模式）部分。

1. 对于**事件源**，选择 **Amazon Web Services 服务**。

1. 对于 **Amazon 服务**，请选择**关系数据库服务（RDS）**。

1. 对于 **Event type (事件类型)**，请选择 **RDS DB Instance Event (RDS 数据库实例事件)**。

1. 保留原定设置事件模式。然后选择**下一步**。

1. 对于**目标类型**，选择**Amazon 服务**。

1. 对于 **Select a target**（选择目标），选择 **Lambda function**（Lambda 函数）。

1. 对于 **Function**（函数），选择您创建的 Lambda 函数。然后选择**下一步**。

1. 在 **Configure tags**（配置标签）中，选择 **Next**（下一步）。

1. 查看您的规则中的步骤。然后，选择 **Create rule**（创建规则）。

### 步骤 3：测试规则
<a name="rds-test-rule"></a>

要测试您的规则，请关闭 RDS 数据库实例。等待几分钟，在实例关闭后，验证您的 Lambda 函数是否已调用。

**通过停止一个数据库实例来测试您的规则**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 停止一个 RDS 数据库实例

1. 打开位于 [https://console.aws.amazon.com/events/](https://console.amazonaws.cn/events/) 的 Amazon EventBridge 控制台。

1. 在导航窗格中，选择 **Rules (规则)**，再选择所创建规则的名称。

1. 在**规则详细信息**中，选择**监控**。

   随后您将被重定向至 Amazon CloudWatch 控制台。如果您未被重定向，请单击**查看 CloudWatch 中的指标**。

1. 在 **All metrics (所有指标)**中，选择所创建规则的名称。

   该图表表明规则已被调用。

1. 在导航窗格中，选择 **Log groups (日志组)**。

1. 选择 Lambda 函数 (**/aws/lambda/*function-name***)的日志组的名称。

1. 选择日志流的名称，以查看您启动的实例的函数提供的数据。您应该会看到接收的事件，类似以下内容：

   ```
   {
       "version": "0",
       "id": "12a345b6-78c9-01d2-34e5-123f4ghi5j6k",
       "detail-type": "RDS DB Instance Event",
       "source": "aws.rds",
       "account": "111111111111",
       "time": "2021-03-19T19:34:09Z",
       "region": "us-east-1",
       "resources": [
           "arn:aws:rds:us-east-1:111111111111:db:testdb"
       ],
       "detail": {
           "EventCategories": [
               "notification"
           ],
           "SourceType": "DB_INSTANCE",
           "SourceArn": "arn:aws:rds:us-east-1:111111111111:db:testdb",
           "Date": "2021-03-19T19:34:09.293Z",
           "Message": "DB instance stopped",
           "SourceIdentifier": "testdb",
           "EventID": "RDS-EVENT-0087"
       }
   }
   ```

   有关 JSON 格式的 RDS 事件的更多示例，请参阅[Amazon RDS 事件概述](working-with-events.md#rds-cloudwatch-events.sample)。

1. （可选）完成后，您可以打开 Amazon RDS 控制台并启动之前停止的实例。

# Amazon RDS 事件类别和事件消息
<a name="USER_Events.Messages"></a>

Amazon RDS 会在各种类型中生成许多事件，您可以使用 Amazon RDS 控制台、Amazon CLI 或 API 订阅这些事件。

**Topics**
+ [

## 数据库集群事件
](#USER_Events.Messages.cluster)
+ [

## 数据库集群快照事件
](#USER_Events.Messages.cluster-snapshot)
+ [

## 数据库实例事件
](#USER_Events.Messages.instance)
+ [

## 数据库参数组事件
](#USER_Events.Messages.parameter-group)
+ [

## 数据库安全组事件
](#USER_Events.Messages.security-group)
+ [

## 数据库快照事件
](#USER_Events.Messages.snapshot)
+ [

## RDS Proxy 事件
](#USER_Events.Messages.rds-proxy)
+ [

## 蓝绿部署事件
](#USER_Events.Messages.BlueGreenDeployments)
+ [

## 自定义引擎版本事件
](#USER_Events.Messages.CEV)

## 数据库集群事件
<a name="USER_Events.Messages.cluster"></a>

下表显示了数据库集群为源类型时的事件类别和事件列表。

有关多可用区数据库集群部署的更多信息，请参阅[Amazon RDS 的多可用区数据库集群部署](multi-az-db-clusters-concepts.md)。


|  类别  | RDS 事件 ID |  消息  |  备注  | 
| --- | --- | --- | --- | 
|  配置更改  | RDS-EVENT-0016 |  重置主凭证。  | 无 | 
| 创建 | RDS-EVENT-0170 |  已创建数据库集群。  |  无  | 
|  故障转移  | RDS-EVENT-0069 |  集群故障转移失败，请检查集群实例的运行状况，然后重试。  |  无  | 
|  故障转移  | RDS-EVENT-0070 |  再次提升之前的主实例：*name*。  |  无  | 
|  故障转移  | RDS-EVENT-0071 |  已完成到数据库实例 *name* 的故障转移。  |  无  | 
|  故障转移  | RDS-EVENT-0072 |  已开始将同一可用区故障转移到数据库实例：*name*。  |  无  | 
|  故障转移  | RDS-EVENT-0073 |  已开始跨可用区故障转移到数据库实例：*name*。  |  无  | 
| 失败 | RDS-EVENT-0354 |  由于资源不兼容，您无法创建数据库集群。*message*。  |  *message* 包括有关失败的详细信息。  | 
| 失败 | RDS-EVENT-0355 |  由于资源不足限制，无法创建数据库集群。*message*。  |  *message* 包括有关失败的详细信息。  | 
|  维护  | RDS-EVENT-0156 |  数据库集群具有数据库引擎次要版本升级。  |  无  | 
|  维护  | RDS-EVENT-0173 |  数据库集群引擎版本已升级。  | 数据库集群的修补已完成。 | 
|  维护  | RDS-EVENT-0174 |  数据库集群处于无法升级的状态。  | 无 | 
|  维护  | RDS-EVENT-0176 |  数据库集群引擎主要版本已升级。  | 无 | 
|  维护  | RDS-EVENT-0177 |  数据库集群升级正在进行中。  | 无 | 
|  维护  | RDS-EVENT-0286 |  数据库集群引擎 *version\$1number* 版本升级已启动。集群保持联机状态。  | 无 | 
|  维护  | RDS-EVENT-0287 |  检测到操作系统升级要求。  | 无 | 
|  维护  | RDS-EVENT-0288 |  集群操作系统升级开始。  | 无 | 
|  维护  | RDS-EVENT-0289 |  集群操作系统升级已完成。  | 无 | 
|  维护  | RDS-EVENT-0290 |  数据库集群已修补：源版本 *version\$1number* => *new\$1version\$1number*。  | 无 | 
|  维护  | RDS-EVENT-0410 |  数据库集群引擎版本升级的预检查已开始。  | 无 | 
|  维护  | RDS-EVENT-0412 |  数据库集群引擎版本升级的预检查失败或超时。  | 无 | 
|  维护  | RDS-EVENT-0413 |  数据库集群升级前任务正在进行中。  | 无 | 
|  维护  | RDS-EVENT-0414 |  数据库集群升级后的任务正在进行中。  | 无 | 
|  维护  | RDS-EVENT-0417 |  数据库集群引擎版本升级已开始。  | 无 | 
|  notification  | RDS-EVENT-0172 |  已将集群从 *name* 重命名为 *name*。  |  无  | 
|  只读副本  | RDS-EVENT-0411 |  数据库集群引擎版本升级的预检查已完成。  | 无 | 

## 数据库集群快照事件
<a name="USER_Events.Messages.cluster-snapshot"></a>

下表显示了数据库集群快照为源类型时的事件类别和事件列表。

[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_Events.Messages.html)

## 数据库实例事件
<a name="USER_Events.Messages.instance"></a>

下表显示的是数据库实例为源类型时的事件类型和事件列表。


|  类别  | RDS 事件 ID |  消息  |  备注  | 
| --- | --- | --- | --- | 
|  可用性  | RDS-EVENT-0004 |  数据库实例已关闭。  | 无 | 
|  可用性  | RDS-EVENT-0006 |  已重新启动数据库实例。  | 无 | 
|  可用性  | RDS-EVENT-0022 |  重新启动 mysql 时出错：*message*。  | 重新启动 MySQL 时出现了错误。 | 
|  可用性  | RDS-EVENT-0221 |  数据库实例已达到存储已满阈值，并且数据库已关闭。您可以增加分配的存储空间以解决此问题。  | 无 | 
|  可用性  | RDS-EVENT-0222 |  数据库实例 *name* 的可用存储容量低至分配存储空间的 *percentage* [分配的存储空间：*amount*，可用存储空间：*amount*]。如果可用存储空间低于 *amount*，将关闭数据库以防止损坏。您可以增加分配的存储空间以解决此问题。  | 仅当数据库实例消耗的已分配存储空间超过 90% 时，才适用于 RDS for MySQL。使用可用存储空间指标监控数据库实例的存储空间。有关更多信息，请参阅 [Amazon RDS 数据库实例存储](CHAP_Storage.md)。 | 
|  可用性  | RDS-EVENT-0330 |  对于数据库实例 *name*，专用事务日志卷的可用存储空间容量过低。日志卷可用存储空间为 *percentage* 的已分配存储空间。[分配的存储空间：*amount*，可用存储空间：*amount*] 如果可用存储空间低于 *amount*，将关闭数据库以防止损坏。您可以禁用专用事务日志卷来解决此问题。  |  有关更多信息，请参阅 [专用日志卷（DLV）](CHAP_Storage.md#CHAP_Storage.dlv)。  | 
|  可用性  | RDS-EVENT-0331 |  对于数据库实例 *name*，专用事务日志卷的可用存储空间容量过低。日志卷可用存储空间为 *percentage* 的预置存储空间。[预置存储空间：*amount*，可用存储空间：*amount*] 您可以禁用专用事务日志卷来解决此问题。  |  有关更多信息，请参阅 [专用日志卷（DLV）](CHAP_Storage.md#CHAP_Storage.dlv)。  | 
|  可用性  | RDS-EVENT-0396 |  Amazon RDS 已计划在内部用户密码轮换后，在此实例的下一个维护时段中重启此只读副本。  |  无  | 
| 可用性 | RDS-EVENT-0419 | Amazon RDS 无法访问数据库实例 *name* 的 KMS 加密密钥。此数据库将进入无法访问的状态。有关更多详细信息，请参阅 Amazon RDS 文档中的故障排除部分。 | 无 | 
|  备份  | RDS-EVENT-0001 |  备份数据库实例。  | 无 | 
|  备份  | RDS-EVENT-0002 |  已完成数据库实例备份。  | 无 | 
|  备份  | RDS-EVENT-0086 |  我们无法将选项组 *name* 与数据库实例 *name* 相关联。确认数据库实例类和配置支持该选项组 *name*。如果是，请验证所有选项组设置并重试。  |  有关更多信息，请参阅“[使用选项组](USER_WorkingWithOptionGroups.md)”。 | 
|  配置更改  | RDS-EVENT-0011 |  已更新为使用 DBParameterGroup *name*。  | 无 | 
|  配置更改  | RDS-EVENT-0012 |  将修改应用于数据库实例类。  | 无 | 
|  配置更改  | RDS-EVENT-0014 |  已完成将修改应用于数据库实例类。  | 无 | 
|  配置更改  | RDS-EVENT-0016 |  重置主凭证。  | 无 | 
|  配置更改  | RDS-EVENT-0017 |  已完成对分配的存储应用修改。  | 无 | 
|  配置更改  | RDS-EVENT-0018 |  对分配的存储应用修改。  | 无 | 
|  配置更改  | RDS-EVENT-0024 |  应用修改以转换为多可用区数据库实例。  | 无 | 
|  配置更改  | RDS-EVENT-0025 |  已完成应用修改以转换为多可用区数据库实例。  | 无 | 
|  配置更改  | RDS-EVENT-0028 |  已禁用自动备份。  | 无 | 
|  配置更改  | RDS-EVENT-0029 |  已完成应用修改以转换为标准（单可用区）数据库实例。  | 无 | 
|  配置更改  | RDS-EVENT-0030 |  应用修改以转换为标准（单可用区）数据库实例。  | 无 | 
|  配置更改  | RDS-EVENT-0032 |  已启用自动备份。  | 无 | 
|  配置更改  | RDS-EVENT-0033 |  *number* 位用户与主用户名相匹配；仅重置未绑定到特定主机的用户名。  | 无 | 
|  配置更改  | RDS-EVENT-0067 |  无法重置密码。错误信息：*message*。  | 无 | 
|  配置更改  | RDS-EVENT-0078 |  监控间隔已更改为 *number*。  |  增强监控配置进行了更改。 | 
|  配置更改  | RDS-EVENT-0092 |  已完成数据库参数组更新。  | 无 | 
|  配置更改  | RDS-EVENT-0217 |  正在向已分配的存储应用启用了弹性伸缩的修改。  | 无 | 
|  配置更改  | RDS-EVENT-0218 |  已向已分配的存储应用启用了弹性伸缩的修改。  | 无 | 
|  配置更改  | RDS-EVENT-0295 |  存储配置升级已开始。  | 无 | 
|  配置更改  | RDS-EVENT-0296 |  存储配置升级已完成。  | 无 | 
|  配置更改  | RDS-EVENT-0332 |  专用日志卷已禁用。  |  有关更多信息，请参阅 [专用日志卷（DLV）](CHAP_Storage.md#CHAP_Storage.dlv)。  | 
|  配置更改  | RDS-EVENT-0333 |  已开始禁用专用日志卷。  |  有关更多信息，请参阅 [专用日志卷（DLV）](CHAP_Storage.md#CHAP_Storage.dlv)。  | 
|  配置更改  | RDS-EVENT-0334 |  已开始启用专用日志卷。  |  有关更多信息，请参阅 [专用日志卷（DLV）](CHAP_Storage.md#CHAP_Storage.dlv)。  | 
|  配置更改  | RDS-EVENT-0335 |  专用日志卷已启用。  |  有关更多信息，请参阅 [专用日志卷（DLV）](CHAP_Storage.md#CHAP_Storage.dlv)。  | 
|  配置更改  | RDS-EVENT-0383 |  *engine version* 不支持 memcached 插件。RDS 将继续升级您的数据库实例并移除此插件。  |  从 MySQL 8.3.0 开始，不支持 memcached 插件。有关更多信息，请参阅 [Changes in MySQL 8.3.0 (2024-01-16, Innovation Release)](https://dev.mysql.com/doc/relnotes/mysql/8.3/en/news-8-3-0.html)。  | 
|  创建  | RDS-EVENT-0005 |  数据库实例已创建。  | 无 | 
|  删除  | RDS-EVENT-0003 |  已删除数据库实例。  | 无 | 
|  故障转移  | RDS-EVENT-0013 |  已启动多可用区实例故障转移。  | 已启动可导致提升备用数据库实例的多可用区故障转移。 | 
|  故障转移  | RDS-EVENT-0015 |  多可用区故障转移到待机状态已完成 - DNS 传播可能需要几分钟。  | 已完成可导致提升备用数据库实例的多可用区故障转移。可能需要几分钟的时间才能让 DNS 传输到新的主数据库实例。 | 
|  故障转移  | RDS-EVENT-0034 |  由于数据库实例最近发生了故障转移，因此正在放弃用户请求的故障转移。  | 因为数据库实例上最近发生了故障转移，所以 Amazon RDS 不会尝试所请求的故障转移。 | 
|  故障转移  | RDS-EVENT-0049 | 多可用区实例故障转移已完成。 | 无 | 
|  故障转移  | RDS-EVENT-0050 |  已启动多可用区实例激活。  | 在成功恢复数据库实例后，启动了多可用区激活。如果 Amazon RDS 将主数据库实例提升到与之前的主数据库实例相同的可用区，则会出现此事件。 | 
|  故障转移  | RDS-EVENT-0051 |  多可用区实例激活已完成。  | 多可用区激活已完成。现在，应该可以访问您的数据库了。 | 
|  故障转移  | RDS-EVENT-0065 |  已从部分故障转移中恢复。  | 无 | 
|  失败  | RDS-EVENT-0031 |  数据库实例进入 *name* 状态。RDS 建议启动时间点还原。  | 由于某个不兼容配置或底层存储问题，数据库实例已失败。开始对数据库实例进行时间点还原。 | 
|  失败  | RDS-EVENT-0035 |  数据库实例进入 *state*。*message*。  | 数据库实例有无效参数。例如，如果数据库实例因为此实例类的内存相关参数设置过高而无法启动，您就应该修改内存参数，并重启数据库实例。 | 
|  失败  | RDS-EVENT-0036 |  数据库实例处于 *state*。*message*。  | 数据库实例处于不兼容的网络中。有些指定的子网 ID 无效或者不存在。 | 
|  失败  | RDS-EVENT-0058 |  Statspack 安装失败。*message*。  | 创建 Oracle Statspack 用户账户 `PERFSTAT` 时出错。请先删除该账户，然后添加 `STATSPACK` 选项。 | 
|  失败  | RDS-EVENT-0079 |  Amazon RDS 无法创建用于增强监控的凭证，此特征已被禁用。这可能是由于您的账户中 rds-monitoring-role 不存在且配置不正确而致。有关更多详细信息，请参阅 Amazon RDS 文档中的故障排除部分。  |  如果没有增强监控 IAM 角色，则无法启用增强监控。有关创建 IAM 角色的信息，请参阅[为 Amazon RDS 增强监控创建 IAM 角色](USER_Monitoring.OS.Enabling.md#USER_Monitoring.OS.IAMRole)。  | 
|  失败  | RDS-EVENT-0080 |  Amazon RDS 无法在您的实例 *name* 上配置增强监控，此特征已被禁用。这可能是由于您的账户中 rds-monitoring-role 不存在且配置不正确而致。有关更多详细信息，请参阅 Amazon RDS 文档中的故障排除部分。  |  增强监控因在配置更改期间出错而处于禁用状态。可能是未正确配置增强监控 IAM 角色。有关创建增强监控 IAM 角色的信息，请参阅[为 Amazon RDS 增强监控创建 IAM 角色](USER_Monitoring.OS.Enabling.md#USER_Monitoring.OS.IAMRole)。  | 
|  失败  | RDS-EVENT-0081 |  Amazon RDS 无法为 *name* 选项创建凭证。这是由于在您的账户中未正确配置 *name* IAM 角色。有关更多详细信息，请参阅 Amazon RDS 文档中的故障排除部分。  |  用于访问您的 Amazon S3 存储桶以执行 SQL Server 本机备份和恢复的 IAM 角色配置不正确。有关更多信息，请参阅“[针对本机备份和还原进行设置](SQLServer.Procedural.Importing.Native.Enabling.md)”。  | 
|  失败  | RDS-EVENT-0165 |  RDS Custom 数据库实例位于支持外围之外。  |  您应负责修复导致 RDS Custom 数据库实例处于 `unsupported-configuration` 状态的配置问题。如果问题与 Amazon 基础设施有关，则您可以使用控制台或 Amazon CLI 修复该问题。如果问题与操作系统或数据库配置有关，则您可以登录到主机进行修复。有关更多信息，请参阅 [RDS Custom 支持外围](custom-concept.md#custom-troubleshooting.support-perimeter)。 | 
|  失败  | RDS-EVENT-0188 |  数据库实例处于无法升级的状态。*message*  |  由于与数据字典相关的不兼容性，Amazon RDS 无法升级 MySQL 数据库实例。因尝试升级到 8.0 版本失败，数据库实例已回滚到 MySQL 版本 5.7，或者因尝试升级到 8.4 版本失败，数据库实例已回滚到 MySQL 版本 8.0。有关更多信息，请参阅 [升级失败后回滚](USER_UpgradeDBInstance.MySQL.Major.md#USER_UpgradeDBInstance.MySQL.Major.RollbackAfterFailure)。  | 
|  失败  | RDS-EVENT-0219 |  数据库实例处于无效状态。无需采取操作。弹性伸缩稍后将重试。  | 无 | 
|  失败  | RDS-EVENT-0220 |  由于之前的扩展存储操作，数据库实例正处于冷却期。我们正在优化您的数据库实例。这至少需要 6 个小时。无需采取操作。弹性伸缩将在冷却期结束后重试。  | 无 | 
|  失败  | RDS-EVENT-0223 |  存储自动扩缩无法扩展存储空间，原因为：*reason*。  | 无 | 
|  失败  | RDS-EVENT-0224 |  存储自动扩缩已触发待处理的扩展存储任务，该任务将达到或超过最大存储阈值。提高最大存储阈值。  | 无 | 
|  失败  | RDS-EVENT-0237 |  数据库实例的存储类型目前在可用区中不可用。弹性伸缩稍后将重试。  | 无 | 
| 失败 | RDS-EVENT-0254 |  此客户账户的基础存储限额已超过限制。请增加允许的存储限额，以便在实例上进行扩展。  | 无 | 
|  失败  |  RDS-EVENT-0278  |  数据库实例创建失败。*message*  |  *message* 包括有关失败的详细信息。  | 
|  失败  |  RDS-EVENT-0279  |  提升 RDS Custom 只读副本失败。*message*  |  *message* 包括有关失败的详细信息。  | 
|  失败  |  RDS-EVENT-0280  |  由于预检查失败，RDS Custom 无法升级数据库实例。*message*  |  *message* 包括有关失败的详细信息。  | 
|  失败  |  RDS-EVENT-0281  |  由于预检查失败，RDS Custom 无法修改数据库实例。*message*  |  *message* 包括有关失败的详细信息。  | 
|  失败  |  RDS-EVENT-0282  |  RDS Custom 无法修改数据库实例，因为弹性 IP 权限不正确。请确认弹性 IP 地址已标记为 `AWSRDSCustom`。  |  无  | 
|  失败  |  RDS-EVENT-0283  |  RDS Custom 无法修改数据库实例，因为您的账户已达到弹性 IP 限制。释放未使用的弹性 IP 或请求增加弹性 IP 地址限制的限额。  |  无  | 
|  失败  |  RDS-EVENT-0284  |  由于预检查失败，RDS Custom 无法将实例转换为高可用性。*message*  |  *message* 包括有关失败的详细信息。  | 
|  失败  |  RDS-EVENT-0285  |  RDS Custom 无法为数据库实例创建最终快照，因为显示了 *message*。  |  *message* 包括有关失败的详细信息。  | 
|  失败  |  RDS-EVENT-0421  |  RDS Custom 无法将数据库实例转换为多可用区部署：*message*。实例将保持单可用区部署。有关 RDS Custom for Oracle 的多可用区部署的信息，请参阅《RDS 用户指南》。  |  *message* 包括有关失败的详细信息。  | 
|  失败  | RDS-EVENT-0306 |  存储配置升级失败。请重试升级。  | 无 | 
|  失败  | RDS-EVENT-0315 |  无法将不兼容网络的数据库 *name* 移至可用状态：*message*  |  数据库网络配置无效。无法将数据库从不兼容的网络移至可用状态。  | 
| 失败 | RDS-EVENT-0328 |  无法将主机加入域。例如，*instancename* 实例的域成员资格状态已设置为失败。  | 无 | 
| 失败 | RDS-EVENT-0329 |  无法将主机加入您的域。在加入域期间，Microsoft Windows 返回了错误代码*消息*。验证您的网络和权限配置，然后发出重新尝试加入域的 `modify-db-instance` 请求。  | 在使用自托管 Active Directory 时，请参阅[自托管式 Active Directory 问题排查](USER_SQLServer_SelfManagedActiveDirectory.TroubleshootingSelfManagedActiveDirectory.md)。 | 
| 失败 | RDS-EVENT-0353 |  由于资源不足限制，无法创建数据库实例。*message*。  |  *message* 包括有关失败的详细信息。  | 
| 失败 | RDS-EVENT-0356 |  RDS 无法在您的域中配置 Kerberos 端点。这可能会阻止对您的数据库实例进行 Kerberos 身份验证。验证数据库实例和域控制器之间的网络配置。  | 无 | 
| 失败 | RDS-EVENT-0418 | Amazon RDS 无法访问数据库实例 *name* 的 KMS 加密密钥。这可能是由于密钥被禁用或 Amazon RDS 无法访问密钥所致。如果这种情况持续，数据库将进入无法访问的状态。有关更多详细信息，请参阅 Amazon RDS 文档中的故障排除部分。 | 无 | 
| 失败 | RDS-EVENT-0420 | Amazon RDS 现在可以成功访问数据库实例 *name* 的 KMS 加密密钥。 | 无 | 
|  存储不足  | RDS-EVENT-0007 |  分配的存储空间已耗尽。分配更多存储空间以解决问题。  |  分配的数据库实例存储空间已使用。要解决此问题，请为数据库实例分配额外存储。有关更多信息，请参阅 [RDS 常见问题](https://www.amazonaws.cn/rds/faqs)。您可以使用**可用存储空间**指标监控数据库实例的存储空间。  | 
|  存储不足  | RDS-EVENT-0089 |  数据库实例 *name* 的可用存储容量低至预调配存储空间的 *percentage* [预调配存储空间：*size*，可用存储空间：*size*]。您可能需要增加预调配存储空间以解决此问题。  |  数据库实例已使用其分配的存储空间的 90% 以上。您可以使用**可用存储空间**指标监控数据库实例的存储空间。  | 
|  存储不足  | RDS-EVENT-0227 |  您的 Aurora 集群的存储空间极其低，只剩下 *amount* 太字节。请采取措施以减少集群上的存储负载。  |  Aurora 存储子系统的空间不足。  | 
|  维护  | RDS-EVENT-0026 |  将离线补丁应用到数据库实例。  |  正在进行数据库实例的脱机维护。数据库实例目前无法使用。  | 
|  维护  | RDS-EVENT-0027 |  已完成将离线补丁应用到数据库实例。  |  数据库实例的脱机维护已完成。现在可以使用数据库实例。  | 
|  维护  | RDS-EVENT-0047 |  数据库实例已修补。  | 无 | 
|  维护  | RDS-EVENT-0155 |  数据库实例具有数据库引擎次要版本升级。  | 无 | 
|  维护  | RDS-EVENT-0178 |  数据库实例升级正在进行中。  | 无 | 
|  维护  | RDS-EVENT-0264 |  数据库引擎版本升级的预检查已开始。  | 无 | 
|  维护  | RDS-EVENT-0265 |  数据库引擎版本升级的预检查已完成。  | 无 | 
|  维护  | RDS-EVENT-0266 |  数据库实例已开始停机。  | 无 | 
|  维护  | RDS-EVENT-0267 |  引擎版本升级已开始。  | 无 | 
|  维护  | RDS-EVENT-0268 |  引擎版本升级已完成。 | 无 | 
|  维护  | RDS-EVENT-0269 |  升级后的任务正在进行中。 | 无 | 
|  维护  | RDS-EVENT-0270 |  数据库引擎版本升级失败。引擎版本升级回滚成功。 | 无 | 
|  维护  | RDS-EVENT-0398 |  正在等待主数据库实例上的数据库引擎版本升级完成。 | 在主要引擎版本升级期间，在只读副本上发出。 | 
|  维护  | RDS-EVENT-0399 |  正在等待只读副本上的数据库引擎版本升级完成。 | 在主要引擎版本升级期间，在源数据库引擎上发出。 | 
|  维护  | RDS-EVENT-0422 |  由于有待处理的维护操作，RDS 将替换数据库实例 *name* 的主机。 | 无 | 
|  维护，故障  | RDS-EVENT-0195 |  *message*  |  Oracle 时区文件的更新失败。有关更多信息，请参阅 [Oracle 时区文件自动升级](Appendix.Oracle.Options.Timezone-file-autoupgrade.md)。  | 
|  维护，通知  | RDS-EVENT-0191 |  时区文件的新版本可供更新。  |  当更新 RDS for Oracle 数据库引擎时，如果您没有选择时区文件升级并且数据库不使用实例上可用的最新 DST 时区文件，则 Amazon RDS 会生成此事件。有关更多信息，请参阅 [Oracle 时区文件自动升级](Appendix.Oracle.Options.Timezone-file-autoupgrade.md)。  | 
|  维护，通知  | RDS-EVENT-0192 |  时区文件的更新已开始。  |  Oracle 时区文件的升级已开始。有关更多信息，请参阅 [Oracle 时区文件自动升级](Appendix.Oracle.Options.Timezone-file-autoupgrade.md)。  | 
|  维护，通知  | RDS-EVENT-0193 |  当前时区文件版本没有可用的更新。  |  您的 Oracle 数据库实例使用的是最新的时区文件版本，并且以下任一表述为真： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_Events.Messages.html) 有关更多信息，请参阅 [Oracle 时区文件自动升级](Appendix.Oracle.Options.Timezone-file-autoupgrade.md)。  | 
|  维护，通知  | RDS-EVENT-0194 |  时区文件的更新已完成。  |  Oracle 时区文件的更新已完成。有关更多信息，请参阅 [Oracle 时区文件自动升级](Appendix.Oracle.Options.Timezone-file-autoupgrade.md)。  | 
|  notification  | RDS-EVENT-0044 |  *message*  | 这是操作员发出的通知。有关详细信息，请参阅事件消息。 | 
|  通知  | RDS-EVENT-0048 |  延迟数据库引擎升级，因为此实例有需要先升级的只读副本。  | 数据库实例的修补已延迟。 | 
|  通知  | RDS-EVENT-0054 |  *message*  | 您正在使用的 MySQL 存储引擎不是 InnoDB，而 InnoDB 是推荐给 Amazon RDS 使用的 MySQL 存储引擎。有关 MySQL 存储引擎的信息，请参阅[支持的 RDS for MySQL 存储引擎](MySQL.Concepts.FeatureSupport.md#MySQL.Concepts.Storage)。 | 
|  notification  | RDS-EVENT-0055 |  *message*  |  数据库实例拥有的表数量超过了 Amazon RDS 最佳实践推荐的数量。请减少数据库实例上的表个数。有关推荐的最佳实践的信息，请参阅 [Amazon RDS 基本操作指导方针](CHAP_BestPractices.md#CHAP_BestPractices.DiskPerformance)。  | 
|  通知  | RDS-EVENT-0056 |  *message*  |  数据库实例包含的数据库数量超过了 Amazon RDS 最佳实践推荐的数量。请减少数据库实例中的数据库数。有关推荐的最佳实践的信息，请参阅 [Amazon RDS 基本操作指导方针](CHAP_BestPractices.md#CHAP_BestPractices.DiskPerformance)。  | 
|  通知  | RDS-EVENT-0064 |  已成功轮换 TDE 加密密钥。  | 有关推荐的最佳实践的信息，请参阅 [Amazon RDS 基本操作指导方针](CHAP_BestPractices.md#CHAP_BestPractices.DiskPerformance)。 | 
|  通知  | RDS-EVENT-0084 |  无法将数据库实例转换为多可用区：*message*。  |  您尝试将数据库实例转换为多可用区，但是它包含多可用区不支持的内存文件组。有关更多信息，请参阅“[Amazon RDS for Microsoft SQL Server 多可用区部署](USER_SQLServerMultiAZ.md)”。  | 
|  通知  | RDS-EVENT-0087 |  数据库实例已停止。  | 无 | 
|  notification  | RDS-EVENT-0088 |  数据库实例已启动。  | 无 | 
|  notification  | RDS-EVENT-0154 |  数据库实例由于它超过最大允许停止的时间而正被启动。  | 无 | 
|  notification  | RDS-EVENT-0157 |  无法修改数据库实例类。*message*。  |  RDS 无法修改数据库实例类，因为目标实例类无法支持源数据库实例上存在的数据库数。错误消息显示“实例具有 *N* 个数据库，但在转换后，只支持 *N* 个”。有关更多信息，请参阅“[Microsoft SQL Server 数据库实例的限制](CHAP_SQLServer.md#SQLServer.Concepts.General.FeatureSupport.Limits)”。  | 
|  通知  | RDS-EVENT-0158 |  数据库实例处于无法升级的状态：*message*。  | 无 | 
|  notification  | RDS-EVENT-0167 |  *message*  |  RDS Custom 支持外围配置已更改。  | 
|  notification  | RDS-EVENT-0189 |  RDS 数据库实例的 gp2 突增余额积分不足。要解决此问题，请降低 IOPS 使用率或修改存储设置，以提高性能。  |  RDS 数据库实例的 gp2 突增余额积分不足。要解决此问题，请降低 IOPS 使用率或修改存储设置，以提高性能。有关更多信息，请参阅《[Amazon Elastic Compute Cloud 用户指南](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ebs-volume-types.html#EBSVolumeTypes_gp2)》中的*输入/输出积分和突增性能*。  | 
|  notification  | RDS-EVENT-0225 |  分配的存储大小 *amount* GB 已接近最大存储阈值 *amount* GB。提高最大存储阈值。  |  当分配的存储量达到最大存储阈值的 80% 时，会调用此事件。为避免发生此事件，请提高最大存储阈值。  | 
|  notification  | RDS-EVENT-0231 |  您的数据库实例的存储修改遇到了内部错误。修改请求正在等待处理，稍后将重试。  |  在读取复制过程中出错。有关详细信息，请参阅事件消息。 此外，请参阅您的数据库引擎的只读副本的故障排除部分。 [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_Events.Messages.html)  | 
|  notification  | RDS-EVENT-0253 |  数据库正在使用双写缓冲区。*message*。有关更多信息，请参阅 *name* 的 RDS 优化型写入功能文档。  | RDS 优化写入与实例存储配置不兼容。有关更多信息，请参阅[使用适用于 MySQL 的 RDS 优化型写入功能提高写入性能](rds-optimized-writes.md)和[使用适用于 MariaDB 的 Amazon RDS 优化型写入功能提高写入性能](rds-optimized-writes-mariadb.md)。 您可以通过[创建蓝绿部署](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/blue-green-deployments-creating.html)来执行存储配置升级以启用优化写入。 | 
|  notification  | RDS-EVENT-0297 |  数据库实例*名称*的存储配置支持的最大大小为 16384 GiB。执行存储配置升级以支持大于 16384 GiB 的存储大小。  | 您不能将数据库实例的分配存储大小增加到 16384 GiB 以上。要克服此限制，请执行存储配置升级。有关更多信息，请参阅[升级数据库实例的存储文件系统](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.UpgradeFileSystem)。  | 
|  notification  | RDS-EVENT-0298 |  数据库实例*名称*的存储配置支持的最大表大小为 2048 GiB。执行存储配置升级以支持大于 2048 GiB 的表大小。  | 具有此限制的 RDS MySQL 和 MariaDB 实例的表大小不能超过 2048 GiB。要克服此限制，请执行存储配置升级。有关更多信息，请参阅[升级数据库实例的存储文件系统](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.UpgradeFileSystem)。  | 
|  notification  | RDS-EVENT-0327 |  Amazon RDS 找不到密钥 *SECRET ARN*。*message*。  | 无 | 
|  notification  | RDS-EVENT-0365 |  已更新时区文件。重新启动 RDS 实例以使更改生效。  | 无 | 
|  notification  | RDS-EVENT-0385 |  集群拓扑已更新。  |  数据库实例的数据库集群发生了 DNS 更改。这包括何时添加或删除新的数据库实例，或者进行失效转移。  | 
|  notification  | RDS-EVENT-0403 |  数据库工作负载导致系统的内存严重不足。为了帮助缓解此问题，RDS 会自动将 innodb\$1buffer\$1pool\$1size 的值设置为 *amount*。  |  仅适用于 RDS for MySQL 和 RDS for MariaDB 数据库实例。  | 
|  notification  | RDS-EVENT-0404 |  数据库工作负载导致系统的内存严重不足。为了帮助缓解此问题，RDS 会自动将 shared\$1buffers 的值设置为 *amount*。  |  仅适用于 RDS for PostgreSQL 数据库实例。  | 
|  只读副本  | RDS-EVENT-0045 |  复制已停止。  |  当复制过程中出现错误时，会出现此消息。要确定错误的类型，请参阅[排查 MySQL 只读副本问题](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_ReadRepl.Troubleshooting.html)。  | 
|  只读副本  | RDS-EVENT-0046 |  已恢复只读副本的复制。  | 此消息会在您首次创建只读副本时出现，或显示为确认复制在正常运行的监控消息。如果此消息在 `RDS-EVENT-0045` 通知之后出现，则复制已在出现错误之后或停止复制之后恢复。 | 
|  只读副本  | RDS-EVENT-0057 |  复制流式传输已终止。  | 无 | 
|  只读副本  | RDS-EVENT-0062 |  已手动停止只读副本的复制。  | 无 | 
|  只读副本  | RDS-EVENT-0063 |  已重置非 RDS 实例的复制。  | 无 | 
|  只读副本  | RDS-EVENT-0202 |  创建只读副本失败。  | 无 | 
|  只读副本  | RDS-EVENT-0233 |  已开始切换到只读副本。  | 无 | 
|  只读副本  | RDS-EVENT-0357 |  复制通道 *name* 已启动。  | 有关复制通道的信息，请参阅[为 Amazon RDS for MySQL 配置多源复制](mysql-multi-source-replication.md)。 | 
|  只读副本  | RDS-EVENT-0358 |  复制通道 *name* 已停止。  | 有关复制通道的信息，请参阅[为 Amazon RDS for MySQL 配置多源复制](mysql-multi-source-replication.md)。 | 
|  只读副本  | RDS-EVENT-0359 |  复制通道 *name* 已手动停止。  | 有关复制通道的信息，请参阅[为 Amazon RDS for MySQL 配置多源复制](mysql-multi-source-replication.md)。 | 
|  只读副本  | RDS-EVENT-0360 |  复制通道 *name* 已重置。  | 有关复制通道的信息，请参阅[为 Amazon RDS for MySQL 配置多源复制](mysql-multi-source-replication.md)。 | 
|  只读副本  | RDS-EVENT-0415 |  升级过程恢复了只读副本上的复制。  | 无 | 
|  只读副本  | RDS-EVENT-0416 |  升级过程停止了只读副本上的复制。  | 无 | 
|  恢复  | RDS-EVENT-0020 |  已启动数据库实例的还原。恢复时间会随待恢复数据量的变化而变化。  | 无 | 
|  恢复  | RDS-EVENT-0021 |  数据库实例的恢复已完成。  | 无 | 
|  恢复  | RDS-EVENT-0023 |  紧急快照请求：*message*。  |  已请求手动备份，但 Amazon RDS 目前处于创建数据库快照的过程中。请在 Amazon RDS 完成数据库快照后再次提交请求。  | 
|  恢复  | RDS-EVENT-0052 |  已启动多可用区实例恢复。  | 恢复时间会随待恢复数据量的变化而变化。 | 
|  恢复  | RDS-EVENT-0053 |  已完成多可用区实例恢复。等待故障转移或激活。  | 此消息表明，Amazon RDS 已准备好您的数据库实例，可在必要时启动失效转移到辅助实例。 | 
|  恢复  | RDS-EVENT-0066 |  重新建立镜像时实例将降级：*message*。  |  SQL Server 数据库实例正在重新建立其镜像。在镜像重新建立之前，性能将下降。发现具有非 FULL 恢复模式的数据库。恢复模式已重新更改为 FULL，镜像恢复已启动。(<dbname>: <recovery model found>[,...])”  | 
|  恢复  | RDS-EVENT-0166 |  *message*  |  RDS Custom 数据库实例位于支持外围内。  | 
|  恢复  | RDS-EVENT-0361 |  备用数据库实例的恢复已开始。  |  备用数据库实例在恢复过程中会重新构建。数据库性能在恢复过程中会受到影响。  | 
|  恢复  | RDS-EVENT-0362 |  备用数据库实例的恢复已完成。  |  备用数据库实例在恢复过程中会重新构建。数据库性能在恢复过程中会受到影响。  | 
|  还原  | RDS-EVENT-0019 |  已从数据库实例 *name* 还原为 *name*。  |  已从时间点备份中恢复数据库实例。  | 
|  安全  | RDS-EVENT-0068 |  解密 hsm 分区密码以更新实例。  |  RDS 正在解密 Amazon CloudHSM 分区密码，以对数据库实例进行更新。有关更多信息，请参阅《Amazon CloudHSM 用户指南》**中的[使用 Amazon CloudHSM 的 Oracle 数据库透明数据加密（TDE）](https://docs.amazonaws.cn/cloudhsm/latest/userguide/oracle-tde.html)。  | 
|  安全修补  | RDS-EVENT-0230 |  系统更新可用于您的数据库实例。有关应用更新的信息，请参阅《RDS 用户指南》中的“维护数据库实例”。  |  推出了新的操作系统更新。 一个新的、次要版本的操作系统更新可用于您的数据库实例。有关应用更新的信息，请参阅[为 RDS 数据库实例更新操作系统](USER_UpgradeDBInstance.Maintenance.md#OS_Updates)。  | 
|  维护  | RDS-EVENT-0425 |  由于指定的子网中没有可用的 IP 地址，Amazon RDS 无法执行操作系统升级。请选择具有可用 IP 地址的子网，然后重试。  |  无  | 
|  维护  | RDS-EVENT-0429 |  由于 *zone* 可用区中 *type* 实例类型的可用容量不足，Amazon RDS 无法执行操作系统升级  |  无  | 
|  维护  | RDS-EVENT-0501 |  Amazon RDS 数据库实例的服务器证书要求通过待处理的维护操作进行轮换。  |  数据库实例的服务器证书要求通过待处理的维护操作进行轮换。在此维护期间，Amazon RDS 会重启数据库以完成证书轮换。要安排此维护，请转至**维护和备份**选项卡，然后选择**立即应用**或**安排下一个维护时段**。如果未计划进行更改，Amazon RDS 会按维护操作中显示的自动应用日期，自动在您的维护时段内应用更改。  | 
|  维护  | RDS-EVENT-0502 |  Amazon RDS 已安排在下一个维护时段内轮换数据库实例的服务器证书。此维护将要求重启数据库。  |  无  | 

## 数据库参数组事件
<a name="USER_Events.Messages.parameter-group"></a>

下表显示的是数据库参数组为源类型时的事件类型和事件列表。


|  类别  | RDS 事件 ID |  消息  |  备注  | 
| --- | --- | --- | --- | 
|  配置更改  | RDS-EVENT-0037 |  已使用 apply 方法 *method* 将参数 *name* 更新为 *value*。  |  无  | 

## 数据库安全组事件
<a name="USER_Events.Messages.security-group"></a>

下表显示了数据库安全组为源类型时的事件类别和事件列表。

**注意**  
数据库安全组是 EC2-Classic 的资源。EC2-Classic 已于 2022 年 8 月 15 日停用。如果您尚未从 EC2-Classic 迁移到 VPC，建议您尽快迁移。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[从 EC2-Classic 迁移到 VPC](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/vpc-migrate.html) 和博客 [EC2-Classic Networking is Retiring – Here’s How to Prepare](https://www.amazonaws.cn/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)。


|  类别  | RDS 事件 ID |  消息  |  备注  | 
| --- | --- | --- | --- | 
|  配置更改  | RDS-EVENT-0038 |  对安全组应用了更改。  |  无  | 
|  失败  | RDS-EVENT-0039 |  撤消 *user* 的授权。  |  *user* 拥有的安全组不存在。针对安全组的授权已被吊销，因为它无效。  | 

## 数据库快照事件
<a name="USER_Events.Messages.snapshot"></a>

下表显示了数据库快照为源类型时的事件类别和事件列表。

[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_Events.Messages.html)

## RDS Proxy 事件
<a name="USER_Events.Messages.rds-proxy"></a>

下表显示了 RDS Proxy 为源类型时的事件类别和事件列表。


|  类别  | RDS 事件 ID |  消息  |  备注  | 
| --- | --- | --- | --- | 
| 配置更改 | RDS-EVENT-0204 |  RDS 修改了数据库代理 *name*。  | 无 | 
| 配置更改 | RDS-EVENT-0207 |  RDS 修改了数据库代理 *name* 的端点。  | 无 | 
| 配置更改 | RDS-EVENT-0213 |  RDS 检测到已添加数据库实例并自动将其添加到数据库代理 *name* 的目标组。  | 无 | 
|  配置更改  | RDS-EVENT-0214 |  RDS 检测到已删除数据库实例 *name* 并自动将其从数据库代理 *name* 的目标组 *name* 中删除。  | 无 | 
|  配置更改  | RDS-EVENT-0215 |  RDS 检测到已删除数据库集群 *name* 并自动将其从数据库代理 *name* 的目标组 *name* 中删除。  | 无 | 
|  创建  | RDS-EVENT-0203 |  RDS 创建了数据库代理 *name*。  | 无 | 
|  创建  | RDS-EVENT-0206 |  RDS 为数据库代理 *name* 创建了端点 *name*。  | 无 | 
| 删除 | RDS-EVENT-0205 |  RDS 删除了数据库代理 *name*。  | 无 | 
|  删除  | RDS-EVENT-0208 |  RDS 删除了数据库代理 *name* 的端点 *name*。  | 无 | 
|  失败  | RDS-EVENT-0243 |  RDS 无法为代理 *name* 预调配容量，因为您的子网 *name* 中没有足够的 IP 地址可用。要解决此问题，请确保您的子网具有最少的未使用 IP 地址数（如 RDS 代理文档中所建议）。  |  要确定您的实例类的建议数量，请参阅[计划 IP 地址容量](rds-proxy-network-prereqs.md#rds-proxy-network-prereqs.plan-ip-address)。  | 
|  失败 | RDS-EVENT-0275 |  RDS 限制了一些与数据库代理*名称*的连接。从客户端到代理的并发连接请求数已超出了限制。  | 无 | 

## 蓝绿部署事件
<a name="USER_Events.Messages.BlueGreenDeployments"></a>

下表显示了蓝绿部署为源类型时的事件类型和事件列表。

有关蓝绿部署的更多信息，请参阅[使用 Amazon RDS 蓝绿部署进行数据库更新](blue-green-deployments.md)。


|  类别  | Amazon RDS 事件 ID |  消息  |  备注  | 
| --- | --- | --- | --- | 
|  创建  | RDS-EVENT-0244 |  蓝绿部署任务已完成。您可以对绿色环境数据库进行更多修改或切换部署。  | 无 | 
|  失败  | RDS-EVENT-0245 |  由于 *reason*，蓝/绿部署创建失败。  | 无 | 
|  删除  | RDS-EVENT-0246 |  蓝绿部署已删除。  | 无 | 
|  notification  | RDS-EVENT-0247 |  已开始从*蓝色*切换到*绿色*。  | 无 | 
|  notification  | RDS-EVENT-0248 |  蓝绿部署已完成切换。  | 无 | 
|  失败  | RDS-EVENT-0249 |  蓝绿部署已取消切换。  | 无 | 
|  notification  | RDS-EVENT-0250  |  已开始从主/只读副本*蓝色*切换为*绿色*。  | 无 | 
|  notification  | RDS-EVENT-0251  |  已完成从主/只读副本*蓝色*切换为*绿色*。将*蓝色*重命名为*原来的蓝色*，将*绿色*重命名为*蓝色*。  | 无 | 
|  失败  | RDS-EVENT-0252  |  由于*原因*，取消了从主/只读副本*蓝色*到*绿色*的切换。  | 无 | 
|  notification  | RDS-EVENT-0307  |  已启动将从*蓝色*切换为*绿色*的序列同步。使用序列时切换可能会导致停机时间延长。  | 无 | 
|  notification  | RDS-EVENT-0308  |  已完成将从*蓝色*切换为*绿色*的序列同步。  | 无 | 
|  失败  | RDS-EVENT-0310  |  由于序列无法同步，因此取消了将从*蓝色*切换到*绿色*的序列同步。  | 无 | 
| notification | RDS-EVENT-0405 |  您的存储卷正在初始化。  |  无  | 
| notification | RDS-EVENT-0406 |  您的存储卷已初始化。  |  无  | 
|  notification  | RDS-EVENT-0409  |  *message*  | 无 | 

## 自定义引擎版本事件
<a name="USER_Events.Messages.CEV"></a>

下表显示了自定义引擎版本为源类型时的事件类别和事件列表。


|  类别  | Amazon RDS 事件 ID |  消息  |  备注  | 
| --- | --- | --- | --- | 
|  创建  | RDS-EVENT-0316 |  正在准备创建自定义引擎版本*名称*。整个创建过程最多可能需要四个小时才能完成。  | 无 | 
|  创建  | RDS-EVENT-0317 |  正在创建自定义引擎版本*名称*。  | 无 | 
|  创建  | RDS-EVENT-0318 |  正在验证自定义引擎版本*名称*。  | 无 | 
|  创建  | RDS-EVENT-0319 |  已成功创建自定义引擎版本*名称*。  | 无 | 
|  创建  | RDS-EVENT-0320 |  由于内部问题，RDS 无法创建自定义引擎版本*名称*。我们正在解决该问题，如有必要，我们将与您联系。如需进一步帮助，请联系 [Amazon Premium Support/](https://console.amazonaws.cn/support/)。  | 无 | 
|  失败  | RDS-EVENT-0198 |  创建自定义引擎版本 *name* 失败。*message*  | *message* 包括有关失败的详细信息，例如缺少文件。 | 
|  失败  | RDS-EVENT-0277 |  删除自定义引擎版本 *name* 时失败。*message*  | *message* 包括有关失败的详细信息。 | 
|  还原  | RDS-EVENT-0352 |  时间点还原支持的最大数据库数量已更改。  | *message* 包括有关此事件的详细信息。 | 

# 监控 Amazon RDS 日志文件
<a name="USER_LogAccess"></a>

每个 RDS 数据库引擎都会生成日志，您可以访问这些日志以进行审计和故障排除。日志的类型取决于数据库引擎。

可以使用 Amazon Web Services 管理控制台、Amazon Command Line Interface（Amazon CLI）或 Amazon RDS API 访问数据库实例的数据库日志。您无法查看、监控或下载事务日志。

**Topics**
+ [

# 查看和列出数据库日志文件
](USER_LogAccess.Procedural.Viewing.md)
+ [

# 下载数据库日志文件
](USER_LogAccess.Procedural.Downloading.md)
+ [

# 监视数据库日志文件
](USER_LogAccess.Procedural.Watching.md)
+ [

# 将数据库日志发布到 Amazon CloudWatch Logs
](USER_LogAccess.Procedural.UploadtoCloudWatch.md)
+ [

# 使用 REST 读取日志文件内容
](DownloadCompleteDBLogFile.md)
+ [

# Amazon RDS for Db2 数据库日志文件
](USER_LogAccess.Concepts.Db2.md)
+ [

# MariaDB 数据库日志文件
](USER_LogAccess.Concepts.MariaDB.md)
+ [

# Amazon RDS for Microsoft SQL Server 数据库日志文件
](USER_LogAccess.Concepts.SQLServer.md)
+ [

# MySQL 数据库日志文件
](USER_LogAccess.Concepts.MySQL.md)
+ [

# Amazon RDS for Oracle 数据库日志文件
](USER_LogAccess.Concepts.Oracle.md)
+ [

# RDS for PostgreSQL 数据库日志文件
](USER_LogAccess.Concepts.PostgreSQL.md)

# 查看和列出数据库日志文件
<a name="USER_LogAccess.Procedural.Viewing"></a>

您可以使用 Amazon Web Services 管理控制台 查看 Amazon RDS 数据库引擎的数据库日志文件。您可使用 Amazon CLI 或 Amazon RDS API 列出可下载或监控的日志文件。

**注意**  
如果无法查看现有 RDS for Oracle 数据库实例的日志文件的列表，请重启该实例以查看列表。

## 控制台
<a name="USER_LogAccess.CON"></a>

**要查看数据库日志文件，请执行以下操作**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要查看其日志文件的数据库实例的名称。

1. 选择 **Logs & events (日志和事件)** 选项卡。

1. 向下滚动到**日志**部分。

1. （可选）输入搜索词以筛选结果。

1. 选择要查看的日志，然后选择 **View**（查看）。

## Amazon CLI
<a name="USER_LogAccess.CLI"></a>

要列出数据库实例的可用数据库日志文件，请使用 Amazon CLI [https://docs.amazonaws.cn/cli/latest/reference/rds/describe-db-log-files.html](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-db-log-files.html) 命令。

以下示例将返回名为 `my-db-instance` 的数据库实例的日志文件列表。

**Example**  

```
1. aws rds describe-db-log-files --db-instance-identifier my-db-instance
```

## RDS API
<a name="USER_LogAccess.API"></a>

要列出数据库实例的可用数据库日志文件，请使用 Amazon RDS API [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html) 操作。

# 下载数据库日志文件
<a name="USER_LogAccess.Procedural.Downloading"></a>

您可使用 Amazon Web Services 管理控制台、Amazon CLI 或 API 下载数据库日志文件。

## 控制台
<a name="USER_LogAccess.Procedural.Downloading.CON"></a>

**要下载数据库日志文件，请执行以下操作**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要查看其日志文件的数据库实例的名称。

1. 选择 **Logs & events (日志和事件)** 选项卡。

1. 向下滚动到**日志**部分。

1. 在 **Logs (日志)** 部分中，选择要下载的日志旁边的按钮，然后选择 **Download (下载)**。

1. 打开提供的链接的上下文 (右键单击) 菜单，然后选择**将链接另存为**。输入您希望保存日志文件的位置，然后选择**保存**。  
![\[查看日志文件\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/log_download2.png)

## Amazon CLI
<a name="USER_LogAccess.Procedural.Downloading.CLI"></a>

要下载数据库日志文件，请使用 Amazon CLI 命令 [https://docs.amazonaws.cn/cli/latest/reference/rds/download-db-log-file-portion.html](https://docs.amazonaws.cn/cli/latest/reference/rds/download-db-log-file-portion.html)。默认情况下，该命令仅下载日志文件的最新部分。但是，您可以通过指定参数 `--starting-token 0` 下载整个文件。

以下示例演示如何下载一个名为 *log/ERROR.4* 的日志文件的全部内容并将其存储在一个名为 *errorlog.txt* 的本地文件中。

**Example**  
对于 Linux、macOS 或 Unix：  

```
1. aws rds download-db-log-file-portion \
2.     --db-instance-identifier myexampledb \
3.     --starting-token 0 --output text \
4.     --log-file-name log/ERROR.4 > errorlog.txt
```
对于 Windows：  

```
1. aws rds download-db-log-file-portion ^
2.     --db-instance-identifier myexampledb ^
3.     --starting-token 0 --output text ^
4.     --log-file-name log/ERROR.4 > errorlog.txt
```

## RDS API
<a name="USER_LogAccess.Procedural.Downloading.API"></a>

要下载数据库日志文件，请使用 Amazon RDS API [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DownloadDBLogFilePortion.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DownloadDBLogFilePortion.html) 操作。

# 监视数据库日志文件
<a name="USER_LogAccess.Procedural.Watching"></a>

监视数据库日志文件等同于在 UNIX 或 Linux 系统上跟踪该文件。您可使用 Amazon Web Services 管理控制台监控日志文件。RDS 每 5 秒刷新一次日志的跟踪。

**要监视数据库日志文件，请执行以下操作**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要查看其日志文件的数据库实例的名称。

1. 选择 **Logs & events (日志和事件)** 选项卡。  
![\[选择 Logs & events（日志和事件）选项卡\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/Monitoring_logsEvents.png)

1. 在 **Logs (日志)** 部分中，选择一个日志文件，然后选择 **Watch (监视)**。  
![\[选择日志\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/Monitoring_LogsEvents_watch.png)

   RDS 显示日志的跟踪，如以下 MySQL 示例所示。  
![\[日志文件的跟踪\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/Monitoring_LogsEvents_watch_content.png)

# 将数据库日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.Procedural.UploadtoCloudWatch"></a>

在本地数据库中，数据库日志驻留在文件系统上。Amazon RDS 不向主机提供对数据库实例的文件系统上的数据库日志的访问权限。出于此原因，Amazon RDS 可让您将数据库日志导出到 [Amazon CloudWatch Logs](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)。利用 CloudWatch Logs，您可以对日志数据执行实时分析。您还可以将数据存储在高持久性存储中，并使用 CloudWatch Logs 代理管理数据。

**Topics**
+ [

## RDS 与 CloudWatch Logs 集成概述
](#rds-integration-cw-logs)
+ [

## 决定将哪些日志发布到 CloudWatch Logs
](#engine-specific-logs)
+ [

## 指定要发布到 CloudWatch Logs 的日志
](#integrating_cloudwatchlogs.configure)
+ [

## 在 CloudWatch Logs 中搜索和筛选您的日志
](#accessing-logs-in-cloudwatch)

## RDS 与 CloudWatch Logs 集成概述
<a name="rds-integration-cw-logs"></a>

在 CloudWatch Logs 中，*日志流* 是共享同一个源的一系列日志事件。CloudWatch Logs 中每个独立的日志源构成一个独立的日志流。*日志组*是一组具有相同保留期、监控和访问控制设置的日志流。

Amazon RDS 将您的数据库实例日志记录持续流式传输到日志组。例如，对于您发布的每种类型的日志，您具有日志组 `/aws/rds/instance/instance_name/log_type`。此日志组与生成日志的数据库实例位于同一 Amazon 区域中。

Amazon 无限期地保留已发布到 CloudWatch Logs 的日志数据，除非您指定了保留期。有关更多信息，请参阅[更改 CloudWatch Logs 中的日志数据保留](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#SettingLogRetention)。

## 决定将哪些日志发布到 CloudWatch Logs
<a name="engine-specific-logs"></a>

每个 RDS 数据库引擎都支持自己的一组日志。要了解数据库引擎的选项，请查看以下主题：
+ [将 Db2 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.Db2.md#USER_LogAccess.Db2.PublishtoCloudWatchLogs)
+ [将 MariaDB 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.md)
+ [将 MySQL 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.MySQLDB.PublishtoCloudWatchLogs.md)
+ [将 Oracle 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.Oracle.md#USER_LogAccess.Oracle.PublishtoCloudWatchLogs)
+ [将 PostgreSQL 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.PostgreSQL.md#USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs)
+ [将 SQL Server 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.SQLServer.md#USER_LogAccess.SQLServer.PublishtoCloudWatchLogs)

## 指定要发布到 CloudWatch Logs 的日志
<a name="integrating_cloudwatchlogs.configure"></a>

您可以在控制台中指定要发布哪些日志。确保您在 Amazon Identity and Access Management（IAM）中具有服务相关角色。有关服务相关角色的更多信息，请参阅[将服务相关角色用于 Amazon RDS](UsingWithRDS.IAM.ServiceLinkedRoles.md)。

**指定要发布的日志**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 请执行以下任一操作：
   + 选择**创建数据库**。
   + 从列表中选择数据库，然后选择 **Modify**（修改）。

1. 在 **Logs exports**（日志导出）中，选择要发布哪些日志。

   以下示例指定 RDS for MySQL 数据库实例的审计日志、错误日志、常规日志，以及慢速查询日志。  
![\[选择要发布到 CloudWatch Logs 的日志\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/AddCWLogs.png)

## 在 CloudWatch Logs 中搜索和筛选您的日志
<a name="accessing-logs-in-cloudwatch"></a>

您可以使用 CloudWatch Logs 控制台搜索满足指定条件的日志条目。您可以通过 RDS 控制台访问日志，这会引导您进入 CloudWatch Logs 控制台，也可以直接从 CloudWatch Logs 控制台访问日志。

**使用 RDS 控制台搜索 RDS 日志**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 选择数据库实例。

1. 选择**配置**。

1. 在 **Published logs**（已发布日志）下，选择要查看的数据库日志。

**使用 CloudWatch Logs 控制台搜索 RDS 日志**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.amazonaws.cn/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择 **Log groups（日志组）**。

1. 在筛选框中，输入 **/aws/rds**。

1. 对于 **Log Groups**，选择包含要搜索的日志流的日志组的名称。

1. 对于 **Log Streams**，选择要搜索的日志流的名称。

1. 在 **Log events（日志事件）**下，输入要使用的筛选条件语法。

有关更多信息，请参阅《Amazon CloudWatch Logs 用户指南》中的*搜索和筛选日志数据*。有关介绍如何监控 RDS 日志的博客教程，请参阅[使用 Amazon CloudWatch Logs、Amazon Lambda 和 Amazon SNS 为 Amazon RDS 构建主动式数据库监控](https://www.amazonaws.cn/blogs/database/build-proactive-database-monitoring-for-amazon-rds-with-amazon-cloudwatch-logs-aws-lambda-and-amazon-sns/)。

# 使用 REST 读取日志文件内容
<a name="DownloadCompleteDBLogFile"></a>

Amazon RDS 提供允许访问数据库实例日志文件的 REST 终端节点。如果您需要编写应用程序来流式传输 Amazon RDS 日志文件内容，则这很有用。

语法如下：

```
GET /v13/downloadCompleteLogFile/DBInstanceIdentifier/LogFileName HTTP/1.1
Content-type: application/json
host: rds.region.amazonaws.com
```

以下参数为必需参数：
+ `DBInstanceIdentifier` — 包含要下载的日志文件的数据库实例的名称。
+ `LogFileName` — 要下载的日志文件的名称。

响应将包含流形式的请求日志文件的内容。

以下示例为 *us-west-2* 区域中名为 *sample-sql* 的数据库实例下载名为 *log/ERROR.6* 的日志文件。

```
GET /v13/downloadCompleteLogFile/sample-sql/log/ERROR.6 HTTP/1.1
host: rds.us-west-2.amazonaws.com
X-Amz-Security-Token: AQoDYXdzEIH//////////wEa0AIXLhngC5zp9CyB1R6abwKrXHVR5efnAVN3XvR7IwqKYalFSn6UyJuEFTft9nObglx4QJ+GXV9cpACkETq=
X-Amz-Date: 20140903T233749Z
X-Amz-Algorithm: AWS4-HMAC-SHA256
X-Amz-Credential: AKIADQKE4SARGYLE/20140903/us-west-2/rds/aws4_request
X-Amz-SignedHeaders: host
X-Amz-Content-SHA256: e3b0c44298fc1c229afbf4c8996fb92427ae41e4649b934de495991b7852b855
X-Amz-Expires: 86400
X-Amz-Signature: 353a4f14b3f250142d9afc34f9f9948154d46ce7d4ec091d0cdabbcf8b40c558
```

如果您指定的数据库实例不存在，则响应将包含以下错误：
+ `DBInstanceNotFound` — `DBInstanceIdentifier` 不引用现有数据库实例。(HTTP 状态代码: 404)

# Amazon RDS for Db2 数据库日志文件
<a name="USER_LogAccess.Concepts.Db2"></a>

您可以使用 Amazon RDS 控制台、Amazon CLI 或 RDS API 访问 RDS for Db2 诊断日志和通知日志。有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

**Topics**
+ [

## 保留计划
](#USER_LogAccess.Concepts.Db2.Retention)
+ [

## 将 Db2 日志发布到 Amazon CloudWatch Logs
](#USER_LogAccess.Db2.PublishtoCloudWatchLogs)

## 保留计划
<a name="USER_LogAccess.Concepts.Db2.Retention"></a>

日志文件每天都会轮换，并且会在重新启动数据库实例时轮换。以下是 Amazon RDS 上的 RDS for Db2 日志的保留计划。


****  

| 日志类型 | 保留计划 | 
| --- | --- | 
|  诊断日志  |  Db2 会删除实例级配置中保留设置之外的日志。Amazon RDS 将 `diagsize` 参数设置为 1000。  | 
|  通知日志  |  Db2 会删除实例级配置中保留设置之外的日志。Amazon RDS 将 `diagsize` 参数设置为 1000。  | 

## 将 Db2 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.Db2.PublishtoCloudWatchLogs"></a>

使用 RDS for Db2，您可以将诊断和通知日志事件直接发布到 Amazon CloudWatch Logs。使用 CloudWatch Logs 分析日志数据，然后使用 CloudWatch 创建警报和查看指标。

利用 CloudWatch Logs，您可以：
+ 将日志存储在具有您定义的保留期间的高持久性存储空间中。
+ 搜索并筛选日志数据。
+ 在账户间共享日志数据。
+ 将日志导出到 Amazon S3。
+ 将数据流式传输到 Amazon Opensearch 服务。
+ 使用 Amazon Kinesis Data Streams 实时处理日志数据。有关更多信息，请参阅《面向 SQL 的适用于 Apache Flink 的亚马逊托管服务的应用程序开发人员指南》**中的[使用 Amazon CloudWatch Logs](https://docs.amazonaws.cn/kinesisanalytics/latest/dev/cloudwatch-logs.html)。

 Amazon RDS 将每个 RDS for Db2 数据库日志作为日志组中的单独数据库流进行发布。例如，如果您发布诊断日志和通知日志，则诊断数据存储在 `/aws/rds/instance/my_instance/diagnostic` 日志组的诊断日志流中，通知日志数据存储在 `/aws/rds/instance/my_instance/notify` 日志组中。

**注意**  
默认情况下，没有启用将 RDS for Db2 日志发布到 CloudWatch Logs 的功能。不支持发布自我调整内存管理器（STMM）和优化器统计数据日志。所有区域都支持将 RDS for Db2 日志发布到 CloudWatch Logs，亚太地区（香港）除外。

### 控制台
<a name="USER_LogAccess.Db2.PublishtoCloudWatchLogs.console"></a>

**从 Amazon Web Services 管理控制台将 RDS for Db2 日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**，然后选择要修改的数据库实例。

1. 选择**修改**。

1. 在 **Log exports (日志导出)** 部分中，选择要开始发布到 CloudWatch Logs 的日志。

   您可以选择 **diag.log** 和/或 **notify.log**。

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

### Amazon CLI
<a name="USER_LogAccess.Db2.PublishtoCloudWatchLogs.CLI"></a>

要发布 RDS for Db2 日志，您可以使用具有以下参数的 [https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以使用以下命令来发布 RDS for Db2 日志：
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

**Example**  
以下示例将创建一个启用了 CloudWatch Logs 发布的 RDS for Db2 数据库实例。`--enable-cloudwatch-logs-exports` 值是一个可以包括 `diag.log` 和/或 `notify.log` 的 JSON 字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --enable-cloudwatch-logs-exports '["diag.log","notify.log"]' \
    --db-instance-class db.m4.large \
    --engine db2-se
```
对于：Windows  

```
aws rds create-db-instance ^
    --db-instance-identifier mydbinstance ^
    --enable-cloudwatch-logs-exports "[\"diag.log\",\"notify.log\"]" ^
    --db-instance-class db.m4.large ^
    --engine db2-se
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

**Example**  
以下示例修改现有的 RDS for Db2 数据库实例，以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是可以包括 `diag.log` 和/或 `notify.log` 的字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"EnableLogTypes":["diag.log","notify.log"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration "{\"EnableLogTypes\":[\"diag.log\",\"notify.log\"]}"
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

**Example**  
以下示例修改现有的 RDS for Db2 数据库实例，以禁用将诊断日志文件发布到 CloudWatch Logs 的功能。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `DisableLogTypes`，其值是可以包括 `diag.log` 和/或 `notify.log` 的字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"DisableLogTypes":["diag.log"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration "{\"DisableLogTypes\":[\"diag.log\"]}"
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

# MariaDB 数据库日志文件
<a name="USER_LogAccess.Concepts.MariaDB"></a>

您可以监控 MariaDB 错误日志、慢速查询日志、IAM 数据库身份验证错误日志和常规日志。MariaDB 错误日志默认生成，您可以通过在数据库参数组中设置参数来生成慢速查询日志和一般日志。Amazon RDS 将轮换所有 MariaDB 日志文件；每种类型的间隔如下所示。

您可直接通过 Amazon RDS 控制台、Amazon RDS API、Amazon RDS CLI 或Amazon开发工具包监视 MariaDB 日志。您还可通过将 MariaDB 日志引向主数据库中的数据库表并查询该表，访问这些日志。可使用 mysqlbinlog 实用程序下载二进制日志。

有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

**Topics**
+ [

# 访问 MariaDB 错误日志
](USER_LogAccess.MariaDB.Errorlog.md)
+ [

# 访问 MariaDB 慢速查询日志和一般日志
](USER_LogAccess.MariaDB.Generallog.md)
+ [

# 将 MariaDB 日志发布到 Amazon CloudWatch Logs
](USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.md)
+ [

# MariaDB 的日志轮换和保留
](USER_LogAccess.MariaDB.LogFileSize.md)
+ [

# 管理基于表的 MariaDB 日志
](Appendix.MariaDB.CommonDBATasks.Logs.md)
+ [

# 配置 MariaDB 二进制日志记录
](USER_LogAccess.MariaDB.BinaryFormat.md)
+ [

# 访问 MariaDB 二进制日志
](USER_LogAccess.MariaDB.Binarylog.md)
+ [

# 启用 MariaDB 二进制日志注释
](USER_LogAccess.MariaDB.BinarylogAnnotation.md)

# 访问 MariaDB 错误日志
<a name="USER_LogAccess.MariaDB.Errorlog"></a>

MariaDB 错误日志会写入到 `<host-name>.err` 文件中。您可以使用 Amazon RDS 控制台查看此文件，还可以使用 Amazon RDS API、Amazon RDS CLI 或 Amazon SDK 检索日志。`<host-name>.err` 文件每 5 分钟刷新一次，其内容附加到 `mysql-error-running.log` 中。`mysql-error-running.log` 文件每小时轮换一次，保留过去 24 小时内每小时生成的文件。每个日志文件的名称上都会附有生成时间的信息 (以 UTC 时间标记)。日志文件还会拥有时间戳，帮助您确定日志项的写入时间。

MariaDB 仅在启动、关闭和遇到错误时向错误日志写入内容。数据库实例可以运行数小时或者数天，而不向错误日志中写入新项。如果您看不到最近的条目，则是因为服务器未遇到导致生成日志条目的错误。

# 访问 MariaDB 慢速查询日志和一般日志
<a name="USER_LogAccess.MariaDB.Generallog"></a>

通过设置数据库参数组中的参数，可以将 MariaDB 慢速查询日志和一般日志写入文件或者数据库表中。有关创建和修改数据库参数组的信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。您必须先设置这些参数，然后才能在 Amazon RDS 控制台中或使用 Amazon RDS API、Amazon CLI 或Amazon开发工具包查看慢速查询日志或常规日志。

可通过使用下面列表中的参数来控制 MariaDB 日志记录：
+ `slow_query_log` 或 `log_slow_query`：要创建慢速查询日志，请设置为 1。默认值是 0。
+ `general_log`：要创建一般日志，请设置为 1。默认值是 0。
+ `long_query_time` 或 `log_slow_query_time`：要防止在慢速查询日志中记录快速运行的查询，请指定需要记录的最短查询运行时间值，以秒为单位。默认值为 10 秒；最小值为 0。如果 log\$1output = FILE，则可以指定精确到微秒的浮点值。如果 log\$1output = TABLE，则必须指定精确到秒的整数值。系统只记录运行时间超过 `long_query_time` 或 `log_slow_query_time` 值的查询。例如，将 `long_query_time` 或 `log_slow_query_time` 设置为 0.1 可防止记录任何运行时间少于 100 毫秒的查询。
+ `log_queries_not_using_indexes`：若要将所有不使用索引的查询记录到慢速查询日志，请将该参数设置为 1。默认值为 0。将记录不使用索引的查询，即使它们的运行时间小于 `long_query_time` 参数的值。
+ `log_output option`：您可为 `log_output` 参数指定下列选项之一：
  + **TABLE**（默认）– 将一般查询写入 `mysql.general_log` 表，将慢速查询写入 `mysql.slow_log` 表。
  + **FILE**– 将一般查询日志和慢速查询日志写入文件系统。日志文件每小时轮换一次。
  + **NONE**– 禁用日志记录。

启用了日志记录时，Amazon RDS 会定期轮换表日志或删除日志文件。这是一种预防措施，用于降低大型日志文件阻止数据库使用或影响性能的可能性。`FILE` 和 `TABLE` 日志记录按如下所示进行轮换和删除：
+ 启用了 `FILE` 日志记录时，会每小时检查日志文件并删除 24 小时之前的日志文件。在一些情况下，删除之后的剩余日志文件的总体大小可能超过了数据库实例的分配空间的 2% 阈值。在这些情况下，将删除最大的日志文件，直到日志文件大小不再超过此阈值。
+ 启用了 `TABLE` 日志记录时，在某些情况下，日志表每 24 小时轮换一次。如果表日志使用的空间大于所分配存储空间的 20%，则会执行此轮换。如果所有日志的总体大小超过 10GB，也会执行此轮换。如果用于数据库实例的空间量大于数据库实例的分配存储空间的 90%，则减小日志轮换的阈值。如果表日志使用的空间大于分配存储空间的 10%，则轮换日志表。如果所有日志的总体大小超过 5GB，也会轮换这些日志表。

  轮换日志表时，会将当前日志表复制到备份日志表，随后删除当前日志表中的条目。如果备份日志表已存在，则先将其删除，然后将当前日志表复制到备份。如果需要，您可以查询备份日志表。`mysql.general_log` 表的备份日志表名为 `mysql.general_log_backup`。`mysql.slow_log` 表的备份日志表名为 `mysql.slow_log_backup`。

  您可以通过调用 `mysql.general_log` 过程来轮换 `mysql.rds_rotate_general_log` 表。您可以通过调用 `mysql.slow_log` 过程来轮换 `mysql.rds_rotate_slow_log` 表。

  表日志在数据库版本升级期间会进行轮换。

Amazon RDS 将在 Amazon RDS 事件中记录 `TABLE` 和 `FILE` 日志轮换并向您发送通知。

要通过 Amazon RDS 控制台、Amazon RDS API、Amazon RDS CLI 或Amazon开发工具包使用日志，请将 `log_output` 参数设置为 FILE。就像 MariaDB 错误日志一样，这些日志文件也每小时轮换一次。将保留过去 24 小时内生成的日志文件。

有关慢速查询日志和一般日志的更多信息，请参阅 MariaDB 文档中的以下主题：
+ [慢速查询日志](http://mariadb.com/kb/en/mariadb/slow-query-log/)
+ [一般查询日志](http://mariadb.com/kb/en/mariadb/general-query-log/)

# 将 MariaDB 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.MariaDB.PublishtoCloudWatchLogs"></a>

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

Amazon RDS 将每个 MariaDB 数据库日志作为日志组中的单独数据库流进行发布。例如，假设您将导出功能配置为包括慢速查询日志。然后，慢速查询数据将存储在 `/aws/rds/instance/my_instance/slowquery` 日志组中的慢速查询日志流中。

默认情况下，启用错误日志。下表总结了其他 MariaDB 日志的要求。


| 日志 | 要求 | 
| --- | --- | 
|  审核日志  |  数据库实例必须使用具有 `MARIADB_AUDIT_PLUGIN` 选项的自定义选项组。  | 
|  常规日志  |  数据库实例必须使用具有参数设置 `general_log = 1` 的自定义参数组才能启用常规日志。  | 
|  慢速查询日志  |  数据库实例必须使用具有参数设置 `slow_query_log = 1` 或 `log_slow_query = 1` 的自定义参数组才能启用慢速查询日志。  | 
|  IAM 数据库身份验证错误日志  |  您必须通过创建或修改数据库实例来启用数据库实例的日志类型 `iam-db-auth-error`。  | 
|  日志输出  |  数据库实例必须使用具有参数设置 `log_output = FILE` 的自定义参数组，才能将日志写入文件系统并将日志发布到 CloudWatch Logs。  | 

## 控制台
<a name="USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.CON"></a>

**从控制台将 MariaDB 日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**，然后选择要修改的数据库实例。

1. 选择**修改**。

1. 在 **Log exports (日志导出)** 部分中，选择要开始发布到 CloudWatch Logs 的日志。

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

## Amazon CLI
<a name="USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.CLI"></a>

您可以使用 Amazon CLI 来发布 MariaDB 日志。您可以调用带以下参数的 [https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以通过调用以下 Amazon CLI 命令来发布 MariaDB 日志：
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-s3.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-s3.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

通过以下选项运行上述 Amazon CLI 命令之一：
+ `--db-instance-identifier`
+ `--enable-cloudwatch-logs-exports`
+ `--db-instance-class`
+ `--engine`

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

**Example**  
以下示例修改现有的 MariaDB 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是具有 `audit`、`error`、`general` 和 `slowquery` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
```
对于：Windows  

```
1. aws rds modify-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
```

**Example**  
以下命令会创建一个 MariaDB 数据库实例并将日志文件发布到 CloudWatch Logs。`--enable-cloudwatch-logs-exports` 值是 JSON 字符串数组。这些字符串可以是 `audit`、`error`、`general` 和 `slowquery` 的任意组合。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' \
4.     --db-instance-class db.m4.large \
5.     --engine mariadb
```
对于：Windows  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' ^
4.     --db-instance-class db.m4.large ^
5.     --engine mariadb
```

## RDS API
<a name="USER_LogAccess.MariaDB.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 来发布 MariaDB 日志。您可以使用以下参数调用 [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
对 `CloudwatchLogsExportConfiguration` 参数进行的更改始终立即应用于数据库实例。因此，`ApplyImmediately` 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 MariaDB 日志：
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

使用以下参数运行这些 RDS API 操作之一：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

根据您运行的 Amazon CLI 命令，可能需要其他参数。

# MariaDB 的日志轮换和保留
<a name="USER_LogAccess.MariaDB.LogFileSize"></a>

启用了日志记录时，Amazon RDS 会定期轮换表日志或删除日志文件。这是一种预防措施，用于降低大型日志文件阻止数据库使用或影响性能的可能性。

MariaDB 慢速查询日志、错误日志和一般日志文件的大小限制为不超过为数据库实例分配的存储空间的 2%。为了维护此阈值，日志每小时自动轮换一次，并且将删除 24 小时之前生成的日志文件。如果在删除旧日志文件后，日志文件的总体大小超出此阈值，则将删除最大的日志文件，直到日志文件大小不再超出此阈值。

Amazon RDS 会轮换大于 10 MB 的 IAM 数据库身份验证错误日志文件。Amazon RDS 会移除存在时间超过五天或大于 100 MB 的 IAM 数据库身份验证错误日志文件。

# 管理基于表的 MariaDB 日志
<a name="Appendix.MariaDB.CommonDBATasks.Logs"></a>

您可以将一般查询日志和慢速查询日志定向到数据库实例上的表。为此，请创建数据库参数组并将 `log_output` 服务器参数设置为 `TABLE`。系统随后会将一般查询记录到 `mysql.general_log` 表，并将慢速查询记录到 `mysql.slow_log` 表。可以查询表来访问日志信息。启用此日志记录功能会增加写入数据库的数据量，导致性能降低。

默认情况下，一般日志和慢速查询日志处于禁用状态。要启用将日志记录到表的功能，还必须将以下服务器参数设置为 `1`：
+ `general_log`
+ `slow_query_log` 或 `log_slow_query`

日志表将不断增大，直至通过将相应的参数重置为 `0` 来关闭相应的日志记录活动。随着时间的推移，通常会累积大量的数据，这些数据会占用相当大比例的分配存储空间。Amazon RDS 不支持截断日志表，但您可以移动这些表的内容。表的交替会将表的内容保存到备份表，然后创建一个新的空日志表。可用以下命令行过程手动轮换日志表，其中 `PROMPT>` 表示命令提示符：

```
PROMPT> CALL mysql.rds_rotate_slow_log;
PROMPT> CALL mysql.rds_rotate_general_log;
```

 要完全移除旧数据并回收磁盘空间，请连续两次调用相应的程序。

# 配置 MariaDB 二进制日志记录
<a name="USER_LogAccess.MariaDB.BinaryFormat"></a>

*二进制日志*是一组日志文件，其中包含有关对 MariaDB 服务器实例所做的数据修改的信息。二进制日志包含以下信息：
+ 描述数据库更改的事件，例如表创建或行修改
+ 有关更新数据的各语句的持续时间的信息
+ 本应更新但未更新数据的语句的事件

复制过程中发送的二进制日志记录语句。一些恢复操作也需要用到这些语句。有关更多信息，请参阅 MariaDB 文档中的 [Binary Log](https://mariadb.com/kb/en/binary-log/)。

自动备份功能会判断是否为 MariaDB 开启或关闭二进制日志记录。您有以下选项：

打开二进制日志记录  
将备份保留期设置为非零正值。

关闭二进制日志记录  
将备份保留期设置为 0。

有关更多信息，请参阅 [启用自动备份](USER_WorkingWithAutomatedBackups.Enabling.md)。

Amazon RDS 上的 MariaDB 支持*基于行*、*基于语句*和*混合*二进制日志记录格式。默认二进制日志记录的格式是*混合的*。有关不同的 MariaDB 二进制日志格式的详细信息，请参阅 MariaDB 文档中的[二进制日志格式](http://mariadb.com/kb/en/mariadb/binary-log-formats/)。

如果您计划使用复制，则二进制日志记录格式很重要。这是因为它确定在源中记录和发送到复制目标的数据更改的记录。有关用于复制的不同二进制日志记录格式的优缺点的信息，请参阅 MySQL 文档中的[基于语句和基于行的复制的优点和缺点](https://dev.mysql.com/doc/refman/5.7/en/replication-sbr-rbr.html)。

**重要**  
将二进制日志记录格式设置为基于行会生成非常大的二进制日志文件。大型二进制日志文件会减少可用于数据库实例的存储空间量。它们还会增加执行数据库实例还原操作所需的时间。  
基于语句的复制可能在源数据库实例和只读副本之间导致不一致。有关更多信息，请参阅 MariaDB 文档中的[基于语句的复制的不安全语句](https://mariadb.com/kb/en/library/unsafe-statements-for-statement-based-replication/)。  
启用二进制日志记录会增加数据库实例的写入磁盘 I/O 操作数。您可以使用 `WriteIOPS` CloudWatch 指标监控 IOPS 使用情况。

**设置 MariaDB 二进制日志记录格式**

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

1. 在导航窗格中，选择**参数组**。

1. 选择您要修改的数据库实例所使用的参数组。

   您无法修改默认参数组。如果数据库实例使用默认参数组，则创建新的参数组并将其与数据库实例关联。

   有关数据库参数组的更多信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

1. 对于 **Parameter group actions (参数组操作)**，选择 **Edit (编辑)**。

1. 将 `binlog_format` 参数设置为您选择的二进制日志记录格式（**ROW**、**STATEMENT** 或 **MIXED**）。

   您可以通过将数据库实例的备份保留期设置为零来关闭二进制日志记录，但这会禁用每日自动备份。禁用自动备份会关闭或禁用 `log_bin` 会话变量。这样将禁用 RDS for MariaDB 数据库实例上的二进制日志记录，这反过来又会将数据库中的 `binlog_format` 会话变量重置为默认值 `ROW`。我们建议您不要禁用备份。有关设置**备份保留期**的更多信息，请参阅[数据库实例的设置](USER_ModifyInstance.Settings.md)。

1. 选择**保存更改**以保存对数据库参数组的更新。

由于 `binlog_format` 参数在 RDS for MariaDB 中是动态的，因此您无需重启数据库实例即可应用更改。

**重要**  
更改数据库参数组会影响使用该参数组的所有数据库实例。如果要为 Amazon 区域中的不同 MariaDB 数据库实例指定不同的二进制日志记录格式，数据库实例必须使用不同的数据库参数组。这些参数组标识不同的日志记录格式。为每个数据库实例分配相应的数据库参数组。

# 访问 MariaDB 二进制日志
<a name="USER_LogAccess.MariaDB.Binarylog"></a>

您可以使用 mysqlbinlog 实用工具从 MariaDB 数据库实例中以文本格式下载二进制日志。二进制日志将下载到本地计算机。有关使用 mysqlbinlog 实用工具的更多信息，请转到 MariaDB 文档中的[使用 mysqlbinlog](http://mariadb.com/kb/en/mariadb/using-mysqlbinlog/)。

 要针对 Amazon RDS 实例运行 mysqlbinlog 实用工具，请使用下列选项：
+  指定 `--read-from-remote-server` 选项。
+  `--host`：指定该实例所在的端点中的 DNS 名称。
+  `--port`：指定该实例使用的端口。
+  `--user`：指定已授予了复制从属权限的 MariaDB 用户。
+  `--password`：指定用户的密码，或忽略密码值以让实用工具将提示您输入密码。
+  `--result-file`：指定接收输出的本地文件。
+ 指定一个或多个二进制日志文件的名称。要获取可用日志的列表，请使用 SQL 命令 SHOW BINARY LOGS。

有关 mysqlbinlog 选项的更多信息，请参阅 MariaDB 文档中的 [mysqlbinlog 选项](http://mariadb.com/kb/en/mariadb/mysqlbinlog-options/)。

 以下是 示例：

对于 Linux、macOS 或 Unix：

```
mysqlbinlog \
    --read-from-remote-server \
    --host=mariadbinstance1.1234abcd.region.rds.amazonaws.com \
    --port=3306  \
    --user ReplUser \
    --password <password> \
    --result-file=/tmp/binlog.txt
```

对于 Windows：

```
mysqlbinlog ^
    --read-from-remote-server ^
    --host=mariadbinstance1.1234abcd.region.rds.amazonaws.com ^
    --port=3306  ^
    --user ReplUser ^
    --password <password> ^
    --result-file=/tmp/binlog.txt
```

 mazon RDS 通常会尽快清除二进制日志。但是，二进制日志必须仍在实例上提供以供 mysqlbinlog 访问。要指定 RDS 保留二进制日志的小时数，请使用 `mysql.rds_set_configuration` 存储过程。指定一个时间段，以便您有足够的时间来下载日志。设置保留期后，监视数据库实例的存储用量以确认保留的二进制日志不会占用太多存储空间。

以下示例将保留期设置为 1 天。

```
call mysql.rds_set_configuration('binlog retention hours', 24); 
```

要显示当前设置，请使用 `mysql.rds_show_configuration` 存储过程。

```
call mysql.rds_show_configuration; 
```

# 启用 MariaDB 二进制日志注释
<a name="USER_LogAccess.MariaDB.BinarylogAnnotation"></a>

在 MariaDB 数据库实例中，您可以使用 `Annotate_rows` 事件注释某个行事件，并在注释中包含导致行事件的 SQL 查询的副本。此方法提供了与对 RDS for MySQL 数据库实例启用 `binlog_rows_query_log_events` 参数类似的功能。

您可以通过创建自定义参数组并将 `binlog_annotate_row_events` 参数设置为 **1** 来全局启用二进制日志注释。您还可以通过调用 `SET SESSION binlog_annotate_row_events = 1` 在会话级别启用注释。使用 `replicate_annotate_row_events` 将二进制日志注释复制到副本实例（如果已对其启用二进制日志记录）。使用这些设置需要特殊权限。

下面是 MariaDB 中的基于行的事务的示例。基于行的日志记录的使用通过将事务隔离级别设置为“已提交读”来触发。

```
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN
INSERT INTO square(x, y) VALUES(5, 5 * 5);
COMMIT;
```

没有注释时，事务的二进制日志条目与下面的类似：

```
BEGIN
/*!*/;
# at 1163
# at 1209
#150922  7:55:57 server id 1855786460  end_log_pos 1209         Table_map: `test`.`square` mapped to number 76
#150922  7:55:57 server id 1855786460  end_log_pos 1247         Write_rows: table id 76 flags: STMT_END_F
### INSERT INTO `test`.`square`
### SET
###   @1=5
###   @2=25
# at 1247
#150922  7:56:01 server id 1855786460  end_log_pos 1274         Xid = 62
COMMIT/*!*/;
```

以下语句为此相同事务启用会话级注释，然后在提交事务后禁用这些注释：

```
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET SESSION binlog_annotate_row_events = 1;
BEGIN;
INSERT INTO square(x, y) VALUES(5, 5 * 5);
COMMIT;
SET SESSION binlog_annotate_row_events = 0;
```

当有注释时，事务的二进制日志条目与下面的类似：

```
BEGIN
/*!*/;
# at 423
# at 483
# at 529
#150922  8:04:24 server id 1855786460  end_log_pos 483  Annotate_rows:
#Q> INSERT INTO square(x, y) VALUES(5, 5 * 5)
#150922  8:04:24 server id 1855786460  end_log_pos 529  Table_map: `test`.`square` mapped to number 76
#150922  8:04:24 server id 1855786460  end_log_pos 567  Write_rows: table id 76 flags: STMT_END_F
### INSERT INTO `test`.`square`
### SET
###   @1=5
###   @2=25
# at 567
#150922  8:04:26 server id 1855786460  end_log_pos 594  Xid = 88
COMMIT/*!*/;
```

# Amazon RDS for Microsoft SQL Server 数据库日志文件
<a name="USER_LogAccess.Concepts.SQLServer"></a>

您可以使用 Amazon RDS 控制台、Amazon CLI 或 RDS API 访问 Microsoft SQL Server 错误日志、代理日志、跟踪文件和转储文件。有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

## 保留计划
<a name="USER_LogAccess.Concepts.SQLServer.Retention"></a>

日志文件每天都会轮换，并且会在重新启动数据库实例时轮换。以下是 Amazon RDS 上的 Microsoft SQL Server 日志的保留计划。


****  

| 日志类型 | 保留计划 | 
| --- | --- | 
|  错误日志  |  最多可保留 30 个错误日志。Amazon RDS 可能会删除超过 7 天的错误日志。  | 
|  Agent 日志  |  最多可保留 10 个代理日志。Amazon RDS 可能会删除超过 7 天的代理日志。  | 
|  跟踪文件  |  根据数据库实例的跟踪文件保留期保留跟踪文件。默认的跟踪文件保留期为 7 天。要修改数据库实例的跟踪文件保留期，请参阅[设置跟踪文件和转储文件的保留期](Appendix.SQLServer.CommonDBATasks.TraceFiles.md#Appendix.SQLServer.CommonDBATasks.TraceFiles.PurgeTraceFiles)。  | 
|  转储文件  |  根据数据库实例的转储文件保留期保留转储文件。默认的转储文件保留期为 7 天。要修改数据库实例的转储文件保留期，请参阅[设置跟踪文件和转储文件的保留期](Appendix.SQLServer.CommonDBATasks.TraceFiles.md#Appendix.SQLServer.CommonDBATasks.TraceFiles.PurgeTraceFiles)。  | 

## 使用 rds\$1read\$1error\$1log 过程查看 SQL Server 错误日志
<a name="USER_LogAccess.Concepts.SQLServer.Proc"></a>

您可以使用 Amazon RDS 存储过程 `rds_read_error_log` 查看错误日志和代理日志。有关更多信息，请参阅“[查看错误和代理日志](Appendix.SQLServer.CommonDBATasks.Logs.md#Appendix.SQLServer.CommonDBATasks.Logs.SP)”。

## 将 SQL Server 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.SQLServer.PublishtoCloudWatchLogs"></a>

使用 Amazon RDS for SQL Server，您可以将错误和代理日志事件直接发布到 Amazon CloudWatch Logs。使用 CloudWatch Logs 分析日志数据，然后使用 CloudWatch 创建警报和查看指标。

利用 CloudWatch Logs，您可以：
+ 将日志存储在具有您定义的保留期间的高持久性存储空间中。
+ 搜索并筛选日志数据。
+ 在账户间共享日志数据。
+ 将日志导出到 Amazon S3。
+ 将数据流式传输到 Amazon Opensearch 服务。
+ 使用 Amazon Kinesis Data Streams 实时处理日志数据。有关更多信息，请参阅《面向 SQL 的适用于 Apache Flink 的亚马逊托管服务的应用程序开发人员指南》**中的[使用 Amazon CloudWatch Logs](https://docs.amazonaws.cn/kinesisanalytics/latest/dev/cloudwatch-logs.html)。

 Amazon RDS 将每个 SQL Server 数据库日志作为日志组中的单独数据库流进行发布。例如，如果您发布代理日志和错误日志，则错误数据将存储在 `/aws/rds/instance/my_instance.node1/error` 日志组中的错误日志流中，而代理日志数据将存储在 `/aws/rds/instance/my_instance.node1/agent` 日志组中。

对于多可用区数据库实例，Amazon RDS 将数据库日志作为日志组中的两个独立流发布。例如，如果您发布错误日志，则错误数据将分别存储在错误日志流 `/aws/rds/instance/my_instance.node1/error` 和 `/aws/rds/instance/my_instance.node2/error` 中。日志流在失效转移期间不会发生变化，每个节点的错误日志流可能包含来自主实例或辅助实例的错误日志。使用多可用区，系统会自动为 `/aws/rds/instance/my_instance/rds-events` 创建日志流，以存储诸如数据库实例失效转移等事件数据。

**注意**  
默认情况下，没有启用将 SQL Server 日志发布到 CloudWatch Logs 的功能。不支持发布跟踪和转储文件。所有区域都支持将 SQL Server 日志发布到 CloudWatch Logs。

### 控制台
<a name="USER_LogAccess.SQLServer.PublishtoCloudWatchLogs.console"></a>

**从Amazon Web Services 管理控制台将 SQL Server 数据库日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**，然后选择要修改的数据库实例。

1. 选择**修改**。

1. 在 **Log exports (日志导出)** 部分中，选择要开始发布到 CloudWatch Logs 的日志。

   您可以选择**代理日志**、**错误日志**或两者。

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

### Amazon CLI
<a name="USER_LogAccess.SQLServer.PublishtoCloudWatchLogs.CLI"></a>

要发布 SQL Server 日志，您可以使用具有以下参数的 [https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以使用以下命令来发布 SQL Server 日志：
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

**Example**  
以下示例将创建一个启用了 CloudWatch Logs 发布的 SQL Server 数据库实例。`--enable-cloudwatch-logs-exports` 值是一个可以包括 `error` 和/或 `agent` 的 JSON 字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --enable-cloudwatch-logs-exports '["error","agent"]' \
    --db-instance-class db.m4.large \
    --engine sqlserver-se
```
对于：Windows  

```
aws rds create-db-instance ^
    --db-instance-identifier mydbinstance ^
    --enable-cloudwatch-logs-exports "[\"error\",\"agent\"]" ^
    --db-instance-class db.m4.large ^
    --engine sqlserver-se
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

**Example**  
以下示例修改现有的 SQL Server 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是可以包括 `error` 和/或 `agent` 的字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"EnableLogTypes":["error","agent"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration "{\"EnableLogTypes\":[\"error\",\"agent\"]}"
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

**Example**  
以下示例修改现有的 SQL Server 数据库实例以禁用将代理日志文件发布到 CloudWatch Logs 的功能。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `DisableLogTypes`，其值是可以包括 `error` 和/或 `agent` 的字符串数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"DisableLogTypes":["agent"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration "{\"DisableLogTypes\":[\"agent\"]}"
```
使用 Windows 命令提示符时，必须在 JSON 代码中转义双引号 (")，方法是使用反斜杠 (\$1) 作为其前缀。

# MySQL 数据库日志文件
<a name="USER_LogAccess.Concepts.MySQL"></a>

您可直接通过 Amazon RDS 控制台、Amazon RDS API、Amazon CLI 或 Amazon 开发工具包监控 MySQL 日志。您还可通过将 MySQL 日志引向主数据库中的数据库表并查询该表，访问这些日志。可使用 mysqlbinlog 实用程序下载二进制日志。

有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

**Topics**
+ [

# RDS for MySQL 数据库日志概览
](USER_LogAccess.MySQL.LogFileSize.md)
+ [

# 将 MySQL 日志发布到 Amazon CloudWatch Logs
](USER_LogAccess.MySQLDB.PublishtoCloudWatchLogs.md)
+ [

# 将 MySQL 日志输出发送到表
](Appendix.MySQL.CommonDBATasks.Logs.md)
+ [

# 为单可用区数据库配置 RDS for MySQL 二进制日志记录
](USER_LogAccess.MySQL.BinaryFormat.md)
+ [

# 为多可用区数据库集群配置 MySQL 二进制日志记录
](USER_Binlog.MultiAZ.md)
+ [

# 访问 MySQL 二进制日志
](USER_LogAccess.MySQL.Binarylog.md)

# RDS for MySQL 数据库日志概览
<a name="USER_LogAccess.MySQL.LogFileSize"></a>

您可以监控以下类型的 RDS for MySQL 日志文件：
+ 错误日志
+ 慢速查询日志
+ 常规日志
+ 审核日志
+ 实例日志
+ IAM 数据库身份验证错误日志

默认情况下，系统会生成 RDS for MySQL 错误日志。您可以通过在数据库参数组中设置参数来生成慢速查询日志和一般日志。

**Topics**
+ [

## RDS for MySQL 错误日志
](#USER_LogAccess.MySQL.Errorlog)
+ [

## RDS for MySQL 慢速查询日志和一般日志
](#USER_LogAccess.MySQL.Generallog)
+ [

## MySQL 审计日志
](#USER_LogAccess.MySQL.Auditlog)
+ [

## RDS for MySQL 的日志轮换和保留
](#USER_LogAccess.MySQL.LogFileSize.retention)
+ [

## 重做日志的大小限制
](#USER_LogAccess.MySQL.LogFileSize.RedoLogs)

## RDS for MySQL 错误日志
<a name="USER_LogAccess.MySQL.Errorlog"></a>

RDS for MySQL 在 `mysql-error.log` 文件中写入错误。每个日志文件的名称上都会附有生成时间的信息 (以 UTC 时间标记)。日志文件还会拥有时间戳，帮助您确定日志项的写入时间。

RDS for MySQL 仅在启动、关闭和遇到错误时才向错误日志写入内容。数据库实例可以运行数小时或者数天，而不向错误日志中写入新项。如果看不到最近的条目，则原因是服务器未遇到导致生成日志条目的错误。

根据设计，将筛选错误日志，以便仅显示错误等意外事件。但是，错误日志还包含一些未显示的其他数据库信息，例如查询进度。因此，即使没有任何实际错误，由于持续进行的数据库活动，错误日志的大小也可能会增加。虽然您可能会在 Amazon Web Services 管理控制台 中看到错误日志有一定大小（以字节或千字节为单位），但当您下载它们时，它们可能为 0 字节。

RDS for MySQL 每 5 分钟将 `mysql-error.log` 写入磁盘。它会将日志的内容附加到 `mysql-error-running.log` 中。

RDS for MySQL 每小时轮换一次 `mysql-error-running.log` 文件。它会保留过去两周生成的日志。

**注意**  
Amazon RDS 和 Aurora 之间的日志保留期不同。

## RDS for MySQL 慢速查询日志和一般日志
<a name="USER_LogAccess.MySQL.Generallog"></a>

可以将 RDS for MySQL 慢速查询日志和一般日志写入文件或数据库表中。为此，请设置数据库参数组中的参数。有关创建和修改数据库参数组的信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。您必须先设置这些参数，然后才能在 Amazon RDS 控制台中或使用 Amazon RDS API、Amazon RDS CLI 或Amazon软件开发工具包查看慢速查询日志或一般日志。

可通过使用下面列表中的参数来控制 RDS for MySQL 日志记录：
+ `slow_query_log`：要创建慢速查询日志，请设置为 1。默认值为 0。
+ `general_log`：要创建一般日志，请设置为 1。默认值是 0。
+ `long_query_time`：要防止在慢速查询日志中记录快速运行的查询，请指定需要记录的最短查询运行时间值，以秒为单位。默认值为 10 秒；最小值为 0。如果 log\$1output = FILE，则可以指定精确到微秒的浮点值。如果 log\$1output = TABLE，则必须指定精确到秒的整数值。系统只记录运行时间超过 `long_query_time` 值的查询。例如，将 `long_query_time` 设置为 0.1 可防止记录任何运行时间少于 100 毫秒的查询。
+ `log_queries_not_using_indexes`：要将所有不使用索引的查询记录到慢速查询日志，请设置为 1。将记录不使用索引的查询，即使它们的运行时间小于 `long_query_time` 参数的值。默认值是 0。
+ `log_output option`：您可为 `log_output` 参数指定下列选项之一。
  + **TABLE** （默认）— 将一般查询写入 `mysql.general_log` 表，将慢速查询写入 `mysql.slow_log` 表。
  + **FILE**– 将一般查询日志和慢速查询日志写入文件系统。
  + **NONE**– 禁用日志记录。

要使慢速查询数据出现在 Amazon CloudWatch Logs 中，必须满足以下条件：
+ 必须将 CloudWatch Logs 配置为包含慢速查询日志。
+ 必须启用 `slow_query_log`。
+ `log_output`必须将 / 设置为 `FILE`。
+ 查询花费的时间必须比为 `long_query_time` 配置的时间长。

有关慢速查询日志和一般日志的更多信息，请参阅 MySQL 文档中的以下主题：
+ [慢速查询日志](https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html)
+ [一般查询日志](https://dev.mysql.com/doc/refman/8.0/en/query-log.html)

## MySQL 审计日志
<a name="USER_LogAccess.MySQL.Auditlog"></a>

若要访问审计日志，数据库实例必须使用具有 `MARIADB_AUDIT_PLUGIN` 选项的自定义选项组。有关更多信息，请参阅 [MySQL 的 MariaDB 审计插件支持](Appendix.MySQL.Options.AuditPlugin.md)。

## RDS for MySQL 的日志轮换和保留
<a name="USER_LogAccess.MySQL.LogFileSize.retention"></a>

启用了日志记录时，Amazon RDS 会定期轮换表日志或删除日志文件。这是一种预防措施，用于降低大型日志文件阻止数据库使用或影响性能的可能性。RDS for MySQL 按如下方式处理轮换和删除：
+ MySQL 慢速查询日志、错误日志和一般日志文件的大小限制为不超过为数据库实例分配的存储空间的 2%。为了维护此阈值，日志每小时自动轮换一次。MySQL 会删除超过两周的日志文件。如果在删除旧日志文件后，日志文件的总体大小超出此阈值，则将删除最早的日志文件，直到日志文件大小不再超出此阈值。
+ 启用了 `FILE` 日志记录时，系统会每小时检查一次日志文件，并删除超过两周的日志文件。在一些情况下，删除之后的剩余日志文件的总体大小可能超过了数据库实例的分配空间的 2% 阈值。在这些情况下，将删除最旧的日志文件，直到日志文件大小不再超过此阈值。
+ 启用了 `TABLE` 日志记录时，在某些情况下，日志表每 24 小时轮换一次。如果表日志使用的空间大于所分配存储空间的 20%，则会执行此轮换。如果所有日志的总体大小超过 10GB，也会执行此轮换。如果用于数据库实例的空间量大于数据库实例的分配存储空间的 90%，则减小日志轮换的阈值。如果表日志使用的空间大于分配存储空间的 10%，则轮换日志表。如果所有日志的总体大小超过 5GB，也会轮换这些日志表。您可以订阅 `low storage` 事件类别，在轮换日志表以释放空间时，会发送相关通知。有关更多信息，请参阅 [使用 Amazon RDS 事件通知](USER_Events.md)。

  轮换日志表时，首先将当前日志表复制到备份日志表。然后，删除当前日志表中的条目。如果备份日志表已存在，则先将其删除，然后将当前日志表复制到备份。如果需要，您可以查询备份日志表。`mysql.general_log` 表的备份日志表名为 `mysql.general_log_backup`。`mysql.slow_log` 表的备份日志表名为 `mysql.slow_log_backup`。

  您可以通过调用 `mysql.general_log` 过程来轮换 `mysql.rds_rotate_general_log` 表。您可以通过调用 `mysql.slow_log` 过程来轮换 `mysql.rds_rotate_slow_log` 表。

  表日志在数据库版本升级期间会进行轮换。

要通过 Amazon RDS 控制台、Amazon RDS API、Amazon RDS CLI 或 Amazon 开发工具包使用日志，请将 `log_output` 参数设置为 FILE。就像 MySQL 错误日志一样，这些日志文件也每小时轮换一次。将保留过去两周内生成的日志文件。请注意，Amazon RDS 和 Aurora 之间的保留期不同。

## 重做日志的大小限制
<a name="USER_LogAccess.MySQL.LogFileSize.RedoLogs"></a>

对于 RDS for MySQL 版本 8.0.32 及更低版本，此参数的默认值为 256MB。该数量是通过将 `innodb_log_file_size` 参数的默认值（128MB）乘以 `innodb_log_files_in_group` 参数的默认值（2）得出的。有关更多信息，请参阅[为 Amazon RDS for MySQL 配置参数的最佳实践，第 1 部分：与性能相关的参数](https://www.amazonaws.cn/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/)。

对于 RDS for MySQL 版本 8.0.33 及更高的次要版本，Amazon RDS 使用 `innodb_redo_log_capacity` 参数而不是 `innodb_log_file_size` 参数。`innodb_redo_log_capacity` 参数的 Amazon RDS 默认值为 2GB。有关更多信息，请参阅 MySQL 文档中的 [MySQL 8.0.30 中的更改](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-30.html)。

从 MySQL 8.4 开始，Amazon RDS 默认启用 `innodb_dedicated_server` 参数。使用 `innodb_dedicated_server` 参数，数据库引擎可计算 `innodb_buffer_pool_size` 和 `innodb_redo_log_capacity` 参数。有关更多信息，请参阅 [在 MySQL 8.4 中配置缓冲池大小和重做日志容量](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)。

# 将 MySQL 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.MySQLDB.PublishtoCloudWatchLogs"></a>

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

Amazon RDS 将每个 MySQL 数据库日志作为日志组中的单独数据库流进行发布。例如，如果您将导出功能配置为包括慢速查询日志，则慢速查询数据将存储在 `/aws/rds/instance/my_instance/slowquery` 日志组中的慢速查询日志流中。

默认情况下，启用错误日志。下表总结了其他 MySQL 日志的要求。


| 日志 | 要求 | 
| --- | --- | 
|  审核日志  |  数据库实例必须使用具有 `MARIADB_AUDIT_PLUGIN` 选项的自定义选项组。  | 
|  常规日志  |  数据库实例必须使用具有参数设置 `general_log = 1` 的自定义参数组才能启用常规日志。  | 
|  慢速查询日志  |  数据库实例必须使用具有参数设置 `slow_query_log = 1` 的自定义参数组才能启用慢速查询日志。  | 
|  IAM 数据库身份验证错误日志  |  您必须通过创建或修改数据库实例来启用数据库实例的日志类型 `iam-db-auth-error`。  | 
|  日志输出  |  数据库实例必须使用具有参数设置 `log_output = FILE` 的自定义参数组，才能将日志写入文件系统并将日志发布到 CloudWatch Logs。  | 

## 控制台
<a name="USER_LogAccess.MySQL.PublishtoCloudWatchLogs.CON"></a>

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

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**，然后选择要修改的数据库实例。

1. 选择**修改**。

1. 在 **Log exports (日志导出)** 部分中，选择要开始发布到 CloudWatch Logs 的日志。

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

## Amazon CLI
<a name="USER_LogAccess.MySQL.PublishtoCloudWatchLogs.CLI"></a>

 您可以使用 Amazon CLI 来发布 MySQL 日志。您可以调用带以下参数的 [https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以通过调用以下 Amazon CLI 命令来发布 MySQL 日志：
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-s3.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-s3.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

通过以下选项运行上述 Amazon CLI 命令之一：
+ `--db-instance-identifier`
+ `--enable-cloudwatch-logs-exports`
+ `--db-instance-class`
+ `--engine`

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

**Example**  
以下示例修改现有的 MySQL 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是具有 `audit`、`error`、`general` 和 `slowquery` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
```
对于 Windows：  

```
1. aws rds modify-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
```

**Example**  
以下示例将创建一个 MySQL 数据库实例并将日志文件发布到 CloudWatch Logs。`--enable-cloudwatch-logs-exports` 值是 JSON 字符串数组。这些字符串可以是 `audit`、`error`、`general` 和 `slowquery` 的任意组合。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' \
4.     --db-instance-class db.m4.large \
5.     --engine MySQL
```
对于 Windows：  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' ^
4.     --db-instance-class db.m4.large ^
5.     --engine MySQL
```

## RDS API
<a name="USER_LogAccess.MySQL.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 来发布 MySQL 日志。您可以使用以下参数调用 [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
对 `CloudwatchLogsExportConfiguration` 参数进行的更改始终立即应用于数据库实例。因此，`ApplyImmediately` 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 MySQL 日志：
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

使用以下参数运行这些 RDS API 操作之一：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

根据您运行的 Amazon CLI 命令，可能需要其他参数。

# 将 MySQL 日志输出发送到表
<a name="Appendix.MySQL.CommonDBATasks.Logs"></a>

可通过创建数据库参数组并将 `log_output` 服务器参数设置为 `TABLE`，将一般日志和慢速查询日志引向数据库实例上的表。系统随后会将一般查询记录到 `mysql.general_log` 表，并将慢速查询记录到 `mysql.slow_log` 表。可以查询表来访问日志信息。启用此日志记录功能会增加写入数据库的数据量，导致性能降低。

默认情况下，一般日志和慢速查询日志处于禁用状态。要启用将日志记录到表的功能，必须将 `general_log` 和 `slow_query_log` 服务器参数设置为 `1`。

日志表将不断增大，直至通过将相应的参数重置为 `0` 来关闭相应的日志记录活动。随着时间的推移，通常会累积大量的数据，这些数据会占用相当大比例的分配存储空间。Amazon RDS 不允许截断日志表，但可以移动其中的内容。表的交替会将表的内容保存到备份表，然后创建一个新的空日志表。可用以下命令行过程手动轮换日志表，其中 `PROMPT>` 表示命令提示符：

```
PROMPT> CALL mysql.rds_rotate_slow_log;
PROMPT> CALL mysql.rds_rotate_general_log;
```

要完全移除旧数据并回收磁盘空间，请连续两次调用相应的程序。

# 为单可用区数据库配置 RDS for MySQL 二进制日志记录
<a name="USER_LogAccess.MySQL.BinaryFormat"></a>

*二进制日志*是一组日志文件，其中包含对 MySQL 服务器实例所做的数据修改的信息。二进制日志包含以下信息：
+ 描述数据库更改的事件，例如表创建或行修改
+ 有关更新数据的各语句的持续时间的信息
+ 本应更新但未更新数据的语句的事件

复制过程中发送的二进制日志记录语句。一些恢复操作也需要用到这些语句。有关更多信息，请参阅 MySQL 文档中的[二进制日志](https://dev.mysql.com/doc/refman/8.0/en/binary-log.html)。

自动备份功能会判断是否为 MySQL 开启或关闭二进制日志记录。您有以下选项：

打开二进制日志记录  
将备份保留期设置为非零正值。

关闭二进制日志记录  
将备份保留期设置为 0。

有关更多信息，请参阅 [启用自动备份](USER_WorkingWithAutomatedBackups.Enabling.md)。

Amazon RDS 上的 MySQL 支持*基于行*、*基于语句*和*混合*的二进制日志记录格式。我们建议混合使用，除非您需要特定的二进制日志格式。有关不同的 MySQL 二进制日志格式的详细信息，请参阅 MySQL 文档中的 [Binary Logging Formats](https://dev.mysql.com/doc/refman/8.0/en/binary-log-formats.html)。

如果您计划使用复制，则二进制日志记录格式很重要，因为它确定了在源中记录和发送到复制目标的数据更改记录。有关用于复制的不同二进制日志记录格式的优缺点的信息，请参阅 MySQL 文档中的[基于语句和基于行的复制的优点和缺点](https://dev.mysql.com/doc/refman/8.0/en/replication-sbr-rbr.html)。

**重要**  
在 MySQL 8.0.34 中，MySQL 弃用了 `binlog_format` 参数。在更高版本的 MySQL 中，MySQL 计划删除该参数，并且仅支持基于行的复制。因此，我们建议对新的 MySQL 复制设置使用基于行的日志记录。有关更多信息，请参阅 MySQL 文档中的 [binlog\$1format](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_format)。  
MySQL 版本 8.0 和 8.4 接受参数 `binlog_format`。使用此参数时，MySQL 会发出弃用警告。在将来的主要版本中，MySQL 将移除参数 `binlog_format`。  
基于语句的复制可能在源数据库实例和只读副本之间导致不一致。有关详细信息，请参阅 MySQL 文档中的[确定二进制日志记录中的安全和不安全语句](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html)。  
启用二进制日志记录会增加数据库实例的写入磁盘 I/O 操作数。您可以使用 `WriteIOPS``` CloudWatch 指标监控 IOPS 使用情况。

**设置 MySQL 二进制日志记录格式**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择**参数组**。

1. 选择要修改的与数据库实例关联的数据库参数组。

   您无法修改默认参数组。如果数据库实例使用默认参数组，则创建新的参数组并将其与数据库实例关联。

   有关参数组的更多信息，请参阅[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

1. 从**操作**中，选择**编辑**。

1. 将 `binlog_format` 参数设置为您选择的二进制日志记录格式（`ROW`、`STATEMENT` 或 `MIXED`）

   您可以通过将数据库实例的备份保留期设置为零来关闭二进制日志记录，但这会禁用每日自动备份。禁用自动备份会关闭或禁用 `log_bin` 会话变量。这将禁用 RDS for MySQL 数据库实例上的二进制日志记录，这反过来又会将数据库中的 `binlog_format` 会话变量重置为默认值 `ROW`。我们建议您不要禁用备份。有关设置**备份保留期**的更多信息，请参阅[数据库实例的设置](USER_ModifyInstance.Settings.md)。

1. 选择**保存更改**以保存对数据库参数组的更新。

由于 `binlog_format` 参数在 RDS for MySQL 中是动态的，因此您无需重启数据库实例即可应用更改。（请注意，在 Aurora MySQL 中，此参数是静态的。有关更多信息，请参阅[配置 Aurora MySQL 二进制日志记录](https://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.MySQL.BinaryFormat.html)。）

**重要**  
更改数据库参数组会影响使用该参数组的所有数据库实例。如果要为 Amazon 区域中的不同 MySQL 数据库实例指定不同的二进制日志记录格式，数据库实例必须使用不同的数据库参数组。这些参数组标识不同的日志记录格式。为每个数据库实例分配相应的数据库参数组。

# 为多可用区数据库集群配置 MySQL 二进制日志记录
<a name="USER_Binlog.MultiAZ"></a>

Amazon RDS for MySQL 多可用区数据库集群中的二进制日志记录会记录所有数据库更改，以支持复制、时间点故障恢复和审计。在多可用区数据库集群中，二进制日志将辅助节点与主节点同步，从而确保跨可用区的数据一致性并实现无缝失效转移。

为了优化二进制日志记录，Amazon RDS 支持二进制日志事务压缩，这样可以降低二进制日志的存储要求并提高复制效率。

**Topics**
+ [

## 多可用区数据库集群的二进制日志事务压缩
](#USER_Binlog.MultiAZ.compression)
+ [

## 为多可用区数据库集群配置二进制日志事务压缩
](#USER_Binlog.MultiAZ.configuring)

## 多可用区数据库集群的二进制日志事务压缩
<a name="USER_Binlog.MultiAZ.compression"></a>

二进制日志事务压缩使用 zstd 算法来减小存储在二进制日志中的事务数据的大小。启用后，MySQL 数据库引擎会将事务有效载荷压缩为单个事件，从而显著减少 I/O 和存储开销。此功能可提高数据库性能，减小二进制日志的大小，并优化在多可用区数据库集群中管理和复制日志的资源使用。

Amazon RDS 通过以下参数为 RDS for MySQL 多可用区数据库集群提供二进制日志事务压缩：
+ `binlog_transaction_compression` – 启用 (`1`) 后，数据库引擎会压缩事务有效载荷，并将其作为单个事件写入二进制日志。这样可减少存储空间使用量并降低 I/O 开销。默认情况下，将禁用此参数。
+ `binlog_transaction_compression_level_zstd` – 为二进制日志事务配置 zstd 压缩级别。较高的值会提高压缩比，从而进一步降低存储要求，但会增加压缩的 CPU 和内存使用量。默认值为 3，范围为 1-22。

这些参数允许您根据工作负载特征和资源可用性来微调二进制日志压缩。有关更多信息，请参阅 MySQL 文档中的 [Binary Log Transaction Compression](https://dev.mysql.com/doc/refman/8.4/en/binary-log-transaction-compression.html)。

二进制日志事务压缩具有以下主要优势：
+ 压缩会减小二进制日志的大小，对于大型事务或写入量大的工作负载尤其如此。
+ 较小的二进制日志可减少网络和 I/O 开销，提高复制性能。
+ `binlog_transaction_compression_level_zstd` 参数提供对在压缩比和资源消耗之间权衡的控制。

## 为多可用区数据库集群配置二进制日志事务压缩
<a name="USER_Binlog.MultiAZ.configuring"></a>

要为 RDS for MySQL 多可用区数据库集群配置二进制日志事务压缩，请修改相关的集群参数设置以满足您的工作负载要求。

### 控制台
<a name="USER_Binlog.MultiAZ.configuring-console"></a>

**启用二进制日志事务压缩**

1. 修改数据库集群参数组，以将 `binlog_transaction_compression` 参数设置为 `1`。

1. （可选）根据您的工作负载要求和资源可用性调整 `binlog_transaction_compression_level_zstd` 参数的值。

有关更多信息，请参阅 [修改数据库集群参数组中的参数](USER_WorkingWithParamGroups.ModifyingCluster.md)。

### Amazon CLI
<a name="USER_Binlog.MultiAZ.configuring-cli"></a>

要使用 Amazon CLI 配置二进制日志事务压缩，请执行 [modify-db-cluster-parameter-group](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-cluster-parameter-group.html) 命令。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name your-cluster-parameter-group \
  --parameters "ParameterName=binlog_transaction_compression,ParameterValue=1,ApplyMethod=pending-reboot"
```
对于：Windows  

```
aws rds modify-db-cluster-parameter-group ^
  --db-cluster-parameter-group-name your-cluster-parameter-group ^
  --parameters "ParameterName=binlog_transaction_compression,ParameterValue=1,ApplyMethod=pending-reboot"
```

### RDS API
<a name="USER_Binlog.MultiAZ.configuring-api"></a>

要使用 Amazon RDS API 配置二进制日志事务压缩，请执行 [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBClusterParameterGroup.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBClusterParameterGroup.html) 操作。

# 访问 MySQL 二进制日志
<a name="USER_LogAccess.MySQL.Binarylog"></a>

可使用 mysqlbinlog 实用程序从 RDS for MySQL 数据库实例下载或流式传输二进制日志。二进制日志下载到本地计算机，可以执行一些操作，例如使用 mysql 实用程序执行重放日志。有关使用 mysqlbinlog 实用程序的更多信息，请参阅 MySQL 文档中的[使用 mysqlbinlog 备份二进制日志文件](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog-backup.html)。

要针对 Amazon RDS 实例运行 mysqlbinlog 实用工具，请使用下列选项：
+ `--read-from-remote-server` – 必需。
+ `--host` – 来自实例的端点的 DNS 名称。
+ `--port` – 实例使用的端口。
+ `--user` – 已获得 `REPLICATION SLAVE` 权限的 MySQL 用户。
+ `--password` – MySQL 用户的密码，或忽略密码值以让实用程序提示您输入密码。
+ `--raw` – 以二进制格式下载文件。
+ `--result-file` – 用于接收原始输出的本地文件。
+ `--stop-never` – 流式传输二进制日志文件。
+ `--verbose` – 使用 `ROW` 二进制日志格式时，包括此选项以将行事件视为伪 SQL 语句。有关 `--verbose` 选项的更多信息，请参阅 MySQL 文档中的 [mysqlbinlog 行事件显示](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog-row-events.html)。
+ 指定一个或多个二进制日志文件的名称。要获取可用日志的列表，请使用 SQL 命令 `SHOW BINARY LOGS`。

有关 mysqlbinlog 选项的更多信息，请参阅 MySQL 文档中的 [mysqlbinlog - 处理二进制日志文件的实用程序](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html)。

以下示例显示如何使用 mysqlbinlog 实用程序。

对于 Linux、macOS 或 Unix：

```
mysqlbinlog \
    --read-from-remote-server \
    --host=MySQLInstance1.cg034hpkmmjt.region.rds.amazonaws.com \
    --port=3306  \
    --user ReplUser \
    --password \
    --raw \
    --verbose \
    --result-file=/tmp/ \
    binlog.00098
```

对于 Windows：

```
mysqlbinlog ^
    --read-from-remote-server ^
    --host=MySQLInstance1.cg034hpkmmjt.region.rds.amazonaws.com ^
    --port=3306  ^
    --user ReplUser ^
    --password ^
    --raw ^
    --verbose ^
    --result-file=/tmp/ ^
    binlog.00098
```

数据库实例上的二进制日志必须保持可用，以备 mysqlbinlog 实用程序访问。要确保这些日志的可用性，请使用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 存储过程并指定一个时段，以便您有足够的时间来下载日志。如果未设置此配置，Amazon RDS 会尽可能快地清除二进制日志，导致 mysqlbinlog 实用程序检索的二进制日志出现空白。

以下示例将保留期设置为 1 天。

```
call mysql.rds_set_configuration('binlog retention hours', 24);
```

要显示当前设置，请使用 [mysql.rds\$1show\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_show_configuration) 存储过程。

```
call mysql.rds_show_configuration;
```

# Amazon RDS for Oracle 数据库日志文件
<a name="USER_LogAccess.Concepts.Oracle"></a>

可以使用 Amazon RDS 控制台或 API 访问 Oracle 警报日志、审核文件和跟踪文件。有关查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。

提供的 Oracle 审核文件是标准 Oracle 审核文件。Amazon RDS 支持 Oracle 精细审核（FGA）功能。但是，日志访问不提供对存储在 `SYS.FGA_LOG$` 表中并且可通过 `DBA_FGA_AUDIT_TRAIL` 视图访问的 FGA 事件的访问权限。

[https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html) API 操作列出可用于数据库实例的 Oracle 日志文件，该操作会忽略 `MaxRecords` 参数，最多返回 1000 个记录。该调用返回 `LastWritten` 作为 POSIX 日期（单位：毫秒）。

**Topics**
+ [

## 保留计划
](#USER_LogAccess.Concepts.Oracle.Retention)
+ [

## 使用 Oracle 跟踪文件
](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles)
+ [

## 将 Oracle 日志发布到 Amazon CloudWatch Logs
](#USER_LogAccess.Oracle.PublishtoCloudWatchLogs)
+ [

## 访问警报日志和侦听器日志
](#USER_LogAccess.Concepts.Oracle.AlertLogAndListenerLog)

## 保留计划
<a name="USER_LogAccess.Concepts.Oracle.Retention"></a>

如果日志文件变得非常大，则 Oracle 数据库引擎可能会轮换这些文件。要保留审核文件或跟踪文件，请下载这些文件。如果您将文件存储在本地，则可以降低 Amazon RDS 存储成本并为您的数据留出更多空间。

下表显示了 Amazon RDS 上的 Oracle 警报日志、审计文件和跟踪文件的保留计划。


****  

| 日志类型 | 保留计划 | 
| --- | --- | 
|  警报日志  |   文本警报日志每天轮换，并具有由 Amazon RDS 管理的 30 天保留期。XML 警报日志至少保留七天。可以使用 `ALERTLOG` 视图访问此日志。  | 
|  审核文件  |   审核文件默认的保留期为七天。Amazon RDS 可能会删除超过七天的审核文件。  | 
|  跟踪文件  |  跟踪文件默认的保留期为七天。Amazon RDS 可能会删除超过七天的跟踪文件。  | 
|  侦听器日志  |   侦听器日志默认的保留期为七天。Amazon RDS 可能会删除超过 7 天的侦听器日志。  | 

**注意**  
审核文件和跟踪文件共享相同的保留配置。

## 使用 Oracle 跟踪文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles"></a>

下面介绍用于创建、刷新、访问和删除跟踪文件的 Amazon RDS 过程。

**Topics**
+ [

### 列出文件
](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.ViewingBackgroundDumpDest)
+ [

### 生成跟踪文件并跟踪会话
](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Generating)
+ [

### 检索跟踪文件
](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Retrieving)
+ [

### 清除跟踪文件
](#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Purging)

### 列出文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.ViewingBackgroundDumpDest"></a>

可以使用两个过程中的任意一个过程来允许访问 `background_dump_dest` 路径中的任意文件。第一个过程可刷新视图（其中包含当前 `background_dump_dest` 中所有文件的列表）。

```
1. EXEC rdsadmin.manage_tracefiles.refresh_tracefile_listing;
```

刷新视图后，请查询以下视图来访问结果。

```
1. SELECT * FROM rdsadmin.tracefile_listing;
```

上述过程的替代方法是，使用 `FROM table` 以类似表的格式流式处理非关系数据以列出数据库目录内容。

```
1. SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('BDUMP'));
```

下面的查询显示日志文件的文本。

```
1. SELECT text FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP','alert_dbname.log.date'));
```

在只读副本上，通过查询 `V$DATABASE.DB_UNIQUE_NAME` 获取 BDUMP 目录的名称。如果唯一名称为 `DATABASE_B`，则 BDUMP 目录为 `BDUMP_B`。以下示例查询副本上的 BDUMP 名称，然后使用此名称查询 `alert_DATABASE.log.2020-06-23` 的内容。

```
1. SELECT 'BDUMP' || (SELECT regexp_replace(DB_UNIQUE_NAME,'.*(_[A-Z])', '\1') FROM V$DATABASE) AS BDUMP_VARIABLE FROM DUAL;
2. 
3. BDUMP_VARIABLE
4. --------------
5. BDUMP_B
6. 
7. SELECT TEXT FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP_B','alert_DATABASE.log.2020-06-23'));
```

### 生成跟踪文件并跟踪会话
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Generating"></a>

由于没有任何 `ALTER SESSION` 限制，Oracle 中用于生成跟踪文件的许多标准方法对于 Amazon RDS 数据库实例仍然可用。为需要更大访问权限的跟踪文件提供了以下程序。


****  

|  Oracle 方法  |  Amazon RDS 方法 | 
| --- | --- | 
|  `oradebug hanganalyze 3 `  |  `EXEC rdsadmin.manage_tracefiles.hanganalyze; `  | 
|  `oradebug dump systemstate 266 `  |  `EXEC rdsadmin.manage_tracefiles.dump_systemstate;`  | 

您可以使用很多标准方法来跟踪连接到 Amazon RDS 中的 Oracle 数据库实例的各个会话。要启用对会话的跟踪，您可以运行 Oracle 提供的 PL/SQL 程序包中的子程序，如 `DBMS_SESSION` 和 `DBMS_MONITOR`。有关更多信息，请参阅 Oracle 文档中的[启用会话跟踪](https://docs.oracle.com/database/121/TGSQL/tgsql_trace.htm#GUID-F872D6F9-E015-481F-80F6-8A7036A6AD29)。

### 检索跟踪文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Retrieving"></a>

对于 Amazon RDS 管理的外部表，您可以使用标准 SQL 查询检索 `background_dump_dest` 中的任何跟踪文件。要使用此方法，必须执行此程序以将此表的位置设置到指定跟踪文件。

例如，可以使用前面提到的 `rdsadmin.tracefile_listing` 视图列出系统上的所有跟踪文件。然后，可以使用以下过程设置 `tracefile_table` 视图，从而使视图指向预定的跟踪文件。

```
1. EXEC rdsadmin.manage_tracefiles.set_tracefile_table_location('CUST01_ora_3260_SYSTEMSTATE.trc');
```

以下示例在当前架构中创建了一个外部表，并将表位置设定在提供的文件中。可以使用 SQL 查询将内容检索到本地文件中。

```
1. SPOOL /tmp/tracefile.txt
2. SELECT * FROM tracefile_table;
3. SPOOL OFF;
```

### 清除跟踪文件
<a name="USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles.Purging"></a>

跟踪文件会累积并占用磁盘空间。Amazon RDS 默认清除跟踪文件和超过 7 天的日志文件。可以使用 `show_configuration` 过程查看和设置跟踪文件保留期。您应运行命令 `SET SERVEROUTPUT ON`，以便查看配置结果。

以下示例显示了当前的跟踪文件保留期，然后设置了新的跟踪文件保留期。

```
 1. # Show the current tracefile retention
 2. SQL> EXEC rdsadmin.rdsadmin_util.show_configuration;
 3. NAME:tracefile retention
 4. VALUE:10080
 5. DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted.
 6. 		
 7. # Set the tracefile retention to 24 hours:
 8. SQL> EXEC rdsadmin.rdsadmin_util.set_configuration('tracefile retention',1440);
 9. SQL> commit;
10. 
11. #show the new tracefile retention
12. SQL> EXEC rdsadmin.rdsadmin_util.show_configuration;
13. NAME:tracefile retention
14. VALUE:1440
15. DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted.
```

除定期清除过程外，您可以从 `background_dump_dest` 中手动删除文件。以下示例显示了如何清除保留时间已超过五分钟的所有文件。

```
EXEC rdsadmin.manage_tracefiles.purge_tracefiles(5);
```

您还可清除与特定模式匹配的所有文件（如果这样做，则不要包括 .trc 等文件扩展名）。以下示例介绍如何清除以 `SCHPOC1_ora_5935` 开头的所有文件。

```
1. EXEC rdsadmin.manage_tracefiles.purge_tracefiles('SCHPOC1_ora_5935');
```

## 将 Oracle 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs"></a>

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

Amazon RDS 将每个 Oracle 数据库日志作为日志组中的单独数据库流进行发布。例如，如果将导出功能配置为包括审核日志，则审核数据将存储在 `/aws/rds/instance/my_instance/audit` 日志组中的审核日志流中。下表总结了 RDS for Oracle 将日志发布到 Amazon CloudWatch Logs 的要求。


| 日志名称 | 要求 | 默认值 | 
| --- | --- | --- | 
|  提醒日志  |  无。您无法禁用此日志。  |  已启用  | 
|  跟踪日志  |  将 `trace_enabled` 参数设置 `TRUE` 或将其保留为默认值。  |  `TRUE`  | 
|  审核日志  |  将 `audit_trail` 参数设置为以下允许的任何值： <pre>{ none | os | db [, extended] | xml [, extended] }</pre>  |  `none`  | 
|  侦听器日志  |  无。您无法禁用此日志。  |  已启用  | 
|  Oracle Management Agent 日志  |  无。您无法禁用此日志。  |  已启用  | 

此 Oracle Management Agent 日志由下表中显示的日志组组成。


****  

| 日志名称 | CloudWatch 日志组 | 
| --- | --- | 
| emctl.log | oemagent-emctl | 
| emdctlj.log | oemagent-emdctlj | 
| gcagent.log | oemagent-gcagent | 
| gcagent\$1errors.log | oemagent-gcagent-errors | 
| emagent.nohup | oemagent-emagent-nohup | 
| secure.log | oemagent-secure | 

有关详细信息，请参阅 Oracle 文档中的 [查找 Management Agent 日志和跟踪文件](https://docs.oracle.com/en/enterprise-manager/cloud-control/enterprise-manager-cloud-control/13.4/emadm/locating-management-agent-log-and-trace-files1.html#GUID-9C710D78-6AA4-42E4-83CD-47B5FF4892DF)。

### 控制台
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs.console"></a>

**从Amazon Web Services 管理控制台将 Oracle 数据库日志发布到 CloudWatch Logs**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**，然后选择要修改的数据库实例。

1. 选择**修改**。

1. 在 **Log exports (日志导出)** 部分中，选择要开始发布到 CloudWatch Logs 的日志。

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

### Amazon CLI
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs.CLI"></a>

要发布 Oracle 日志，您可以使用具有以下参数的 [https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以使用以下命令来发布 Oracle 日志：
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-s3.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-s3.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

**Example**  
以下示例将创建一个启用了 CloudWatch Logs 发布的 Oracle 数据库实例。`--cloudwatch-logs-export-configuration` 值是 JSON 字符串数组。这些字符串可以是 `alert`、`audit`、`listener` 和 `trace` 的任意组合。  
对于 Linux、macOS 或 Unix：  

```
aws rds create-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '["trace","audit","alert","listener","oemagent"]' \
    --db-instance-class db.m5.large \
    --allocated-storage 20 \
    --engine oracle-ee \
    --engine-version 19.0.0.0.ru-2024-04.rur-2024-04.r1 \
    --license-model bring-your-own-license \
    --master-username myadmin \
    --manage-master-user-password
```
对于：Windows  

```
aws rds create-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration trace alert audit listener oemagent ^
    --db-instance-class db.m5.large ^
    --allocated-storage 20 ^
    --engine oracle-ee ^
    --engine-version 19.0.0.0.ru-2024-04.rur-2024-04.r1 ^
    --license-model bring-your-own-license ^
    --master-username myadmin ^
    --manage-master-user-password
```

**Example**  
以下示例修改现有的 Oracle 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是具有 `alert`、`audit`、`listener` 和 `trace` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"EnableLogTypes":["trace","alert","audit","listener","oemagent"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration EnableLogTypes=\"trace\",\"alert\",\"audit\",\"listener\",\"oemagent\"
```

**Example**  
以下示例修改现有的 Oracle 数据库实例以禁用将审核和侦听器日志文件发布到 CloudWatch Logs 的功能。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `DisableLogTypes`，其值是具有 `alert`、`audit`、`listener` 和 `trace` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --cloudwatch-logs-export-configuration '{"DisableLogTypes":["audit","listener"]}'
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --cloudwatch-logs-export-configuration DisableLogTypes=\"audit\",\"listener\"
```

### RDS API
<a name="USER_LogAccess.Oracle.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 来发布 Oracle 数据库日志。您可以使用以下参数调用 [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
对 `CloudwatchLogsExportConfiguration` 参数进行的更改始终立即应用于数据库实例。因此，`ApplyImmediately` 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 Oracle 日志：
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

使用以下参数运行这些 RDS API 操作之一：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

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

## 访问警报日志和侦听器日志
<a name="USER_LogAccess.Concepts.Oracle.AlertLogAndListenerLog"></a>

您可以使用 Amazon RDS 控制台查看警告日志。您还可以使用以下 SQL 语句。

```
1. SELECT message_text FROM alertlog;
```

使用 Amazon CloudWatch Logs 访问侦听器日志。

**注意**  
当警报和侦听器日志超过 10MB 时，Oracle 会轮换这些日志，此时它们不会显示在 Amazon RDS 视图中。

# RDS for PostgreSQL 数据库日志文件
<a name="USER_LogAccess.Concepts.PostgreSQL"></a>

您可以监控以下类型的 日志文件：
+ PostgreSQL 日志
+ 升级日志
+ IAM 数据库身份验证错误日志
**注意**  
要启用 IAM 数据库身份验证错误日志，您必须先为 RDS for PostgreSQL 数据库实例启用 IAM 数据库身份验证。有关启用 IAM 数据库身份验证的更多信息，请参阅[启用和禁用 IAM 数据库身份验证](UsingWithRDS.IAMDBAuth.Enabling.md)。

RDS for PostgreSQL 将数据库活动记录到原定设置 PostgreSQL 日志文件中。对于本地 PostgreSQL 数据库实例，这些消息本地存储在 `log/postgresql.log` 中。对于 RDS for PostgreSQL 数据库实例，日志文件可用于 Amazon RDS 实例上。也可以通过 Amazon Web Services 管理控制台访问这些日志，您可以在此处查看或下载它们。原定设置日志记录级别可捕获登录失败、严重服务器错误、死锁和查询失败。

有关如何查看、下载和监视基于文件的数据库日志的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。要了解有关 PostgreSQL 日志的更多信息，请参阅 [Working with Amazon RDS and Aurora PostgreSQL logs: Part 1](https://www.amazonaws.cn/blogs/database/working-with-rds-and-aurora-postgresql-logs-part-1/) 和 [Working with Amazon RDS and Aurora PostgreSQL logs: Part 2](https://www.amazonaws.cn/blogs/database/working-with-rds-and-aurora-postgresql-logs-part-2/)。

除了本主题中讨论的标准 PostgreSQL 日志外，RDS for PostgreSQL 还支持 PostgreSQL Audit 扩展（`pgAudit`）。大多数受监管行业和政府机构需要保留对数据所做更改的审计日志或审计跟踪，以符合法律要求。有关安装和使用 pgAudit 的更多信息，请参阅 [使用 pgAudit 记录数据库活动](Appendix.PostgreSQL.CommonDBATasks.pgaudit.md)。

**Topics**
+ [

# RDS for PostgreSQL 中的日志记录参数
](USER_LogAccess.Concepts.PostgreSQL.overview.parameter-groups.md)
+ [

# 为您的 RDS for PostgreSQL 数据库实例开启查询日志记录
](USER_LogAccess.Concepts.PostgreSQL.Query_Logging.md)
+ [

## 将 PostgreSQL 日志发布到 Amazon CloudWatch Logs
](#USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs)

# RDS for PostgreSQL 中的日志记录参数
<a name="USER_LogAccess.Concepts.PostgreSQL.overview.parameter-groups"></a>

您可以通过修改各种参数来自定义 RDS for PostgreSQL 数据库实例的日志记录行为。在下表中，您可以找到影响日志存储时间长度、何时轮换日志和是否以 CSV（逗号分隔值）格式输出日志的参数。您还可以找到发送到 STDERR 的文本输出以及其他设置。要更改可修改的参数的设置，请为以下项目使用自定义数据库参数组： RDS for PostgreSQL 实例。有关更多信息，请参阅。[Amazon RDS 数据库实例的数据库参数组](USER_WorkingWithDBInstanceParamGroups.md)


| 参数 | 默认值 | 说明 | 
| --- | --- | --- | 
| log\$1destination | stderr | 设置日志的输出格式。原定设置为 `stderr`，但您也可以通过向设置中添加 `csvlog` 来指定逗号分隔值（CSV）。有关更多信息，请参阅 [设置日志目标（`stderr`、`csvlog`）](#USER_LogAccess.Concepts.PostgreSQL.Log_Format)。 | 
| log\$1filename |  postgresql.log.%Y-%m-%d-%H  | 指定日志文件名的模式。除原定设置外，此参数还支持使用 `postgresql.log.%Y-%m-%d` 和 `postgresql.log.%Y-%m-%d-%H%M` 作为文件名模式。 | 
| log\$1line\$1prefix | %t:%r:%u@%d:[%p]: | 为写入 `stderr` 的每个日志行定义前缀，以记录时间（%t）、远程主机（%r）、用户（%u）、数据库（%d）和进程 ID（%p）。 | 
| log\$1rotation\$1age | 60 | 此分钟数后，将自动轮换日志文件。您可以在 1 到 1440 分钟的范围内更改此值。有关更多信息，请参阅[设置日志文件轮换](#USER_LogAccess.Concepts.PostgreSQL.log_rotation)。 | 
| log\$1rotation\$1size | – | 日志自动轮换的大小（kB）。原定设置情况下，不使用此参数，因为日志是根据 `log_rotation_age` 参数轮换的。要了解更多信息，请参阅[设置日志文件轮换](#USER_LogAccess.Concepts.PostgreSQL.log_rotation)。 | 
| rds.log\$1retention\$1period | 4320 | 超过指定分钟数的 PostgreSQL 日志将被删除。默认值为 4320 分钟，表示系统将在 3 天后删除日志文件。有关更多信息，请参阅 [设置日志保留期](#USER_LogAccess.Concepts.PostgreSQL.log_retention_period)。 | 

要识别应用程序问题，您可以在日志中查找查询失败、登录失败、死锁和致命的服务器错误。例如，假设您将旧版应用程序从 Oracle 转换为 Amazon RDS PostgreSQL，但部分查询可能未正确转换。这些格式不正确的查询会生成错误消息，您可以在日志中找到这些错误消息以帮助识别问题。有关日志记录查询的更多信息，请参阅 [为您的 RDS for PostgreSQL 数据库实例开启查询日志记录](USER_LogAccess.Concepts.PostgreSQL.Query_Logging.md)。

在以下主题中，您可以找到有关如何设置各种参数（用于控制 PostgreSQL 日志的基本详细信息）的信息。

**Topics**
+ [

## 设置日志保留期
](#USER_LogAccess.Concepts.PostgreSQL.log_retention_period)
+ [

## 设置日志文件轮换
](#USER_LogAccess.Concepts.PostgreSQL.log_rotation)
+ [

## 设置日志目标（`stderr`、`csvlog`）
](#USER_LogAccess.Concepts.PostgreSQL.Log_Format)
+ [

## 了解 log\$1line\$1prefix 参数
](#USER_LogAccess.Concepts.PostgreSQL.Log_Format.log-line-prefix)

## 设置日志保留期
<a name="USER_LogAccess.Concepts.PostgreSQL.log_retention_period"></a>

`rds.log_retention_period` 参数指定 RDS for PostgreSQL 数据库实例将其日志文件保留多长时间。原定设置为 3 天（4320 分钟），但您可以将此值设置为 1 天（1440 分钟）到 7 天（10080 分钟）之间的任意值。确保您的 RDS for PostgreSQL 数据库实例具有足够的存储空间，可将日志文件保留一段时间。

建议您将日志定期发布到 Amazon CloudWatch Logs，以便您可以在日志从 RDS for PostgreSQL 数据库实例中删除很久之后查看和分析系统数据。有关更多信息，请参阅 [将 PostgreSQL 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.PostgreSQL.md#USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs)。

## 设置日志文件轮换
<a name="USER_LogAccess.Concepts.PostgreSQL.log_rotation"></a>

原定设置情况下，Amazon RDS 每小时都会创建新的日志文件。计时由 `log_rotation_age` 参数控制。此参数的原定设置值为 60（分钟），但您可以将其设置为 1 分钟到 24 小时（1440 分钟）之间的任意值。轮换时，系统将创建一个新的不同日志文件。该文件根据 `log_filename` 参数指定的模式命名。

也可以根据日志文件的大小进行轮换（如 `log_rotation_size` 参数指定）。此参数指定在日志达到指定的大小（以千字节为单位）时应轮换日志。对于 RDS for PostgreSQL 数据库实例，`log_rotation_size` 未设置，也就是说，未指定任何值。但是，您可以将该参数设置为 0-2097151KB（千字节）之间。

日志文件名基于在 `log_filename` 参数中指定的文件名模式。此参数的可用设置如下：
+ `postgresql.log.%Y-%m-%d` – 日志文件名的原定设置格式。在日志文件的名称中包括年、月和日。
+ `postgresql.log.%Y-%m-%d-%H` – 在日志文件名格式中包含小时。

有关更多信息，请参阅 PostgreSQL 文档中的 [https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-AGE](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-AGE) 和 [https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-SIZE](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-SIZE)。

## 设置日志目标（`stderr`、`csvlog`）
<a name="USER_LogAccess.Concepts.PostgreSQL.Log_Format"></a>

默认情况下，Amazon RDS PostgreSQL 以标准错误 (stderr) 格式生成日志。此格式是 `log_destination` 参数的原定设置。每条消息都使用在 `log_line_prefix` 参数中指定的模式作为前缀。有关更多信息，请参阅 [了解 log\$1line\$1prefix 参数](#USER_LogAccess.Concepts.PostgreSQL.Log_Format.log-line-prefix)。

RDS for PostgreSQL 也可以按 `csvlog` 格式生成日志。`csvlog` 用于将日志数据作为逗号分隔值（CSV）数据进行分析。例如，假设您使用 `log_fdw` 扩展将日志作为外部表处理。在 `stderr` 日志文件上创建的外部表包含一个列，其中包含日志事件数据。通过向 `csvlog` 参数添加 `log_destination`，可以获得 CSV 格式的日志文件，其中对外部表的多个列进行了分界。您现在可以更轻松地对日志进行排序和分析。要了解如何将 `log_fdw` 与 `csvlog` 结合使用，请参阅 [使用 log\$1fdw 扩展通过 SQL 访问数据库日志](CHAP_PostgreSQL.Extensions.log_fdw.md)。

如果您为此参数指定 `csvlog`，请注意将同时生成 `stderr` 和 `csvlog` 文件。确保监控日志所占用的存储空间，同时考虑 `rds.log_retention_period` 以及影响日志存储和周转的其他设置。使用 `stderr` 和 `csvlog` 会使日志占用的存储空间增加一倍以上。

如果将 `csvlog` 添加到 `log_destination` 并想单独恢复到 `stderr`，则需要重置参数。为此，请打开 Amazon RDS 控制台，然后为您的实例打开自定义数据库参数组。选择 `log_destination` 参数，选择 **Edit parameter**（编辑参数），然后选择 **Reset**（重置）。

有关配置日志记录的更多信息，请参阅[使用 Amazon RDS 和 Aurora PostgreSQL 日志：第 1 部分](https://www.amazonaws.cn/blogs/database/working-with-rds-and-aurora-postgresql-logs-part-1/)。

## 了解 log\$1line\$1prefix 参数
<a name="USER_LogAccess.Concepts.PostgreSQL.Log_Format.log-line-prefix"></a>

`stderr` 日志格式将由 `log_line_prefix` 参数指定的详细信息作为每条日志消息的前缀。默认值为：

```
%t:%r:%u@%d:[%p]:t
```

从 Aurora PostgreSQL 版本 16 开始，还可以选择：

```
%m:%r:%u@%d:[%p]:%l:%e:%s:%v:%x:%c:%q%a
```

发送到 stderr 的每个日志条目都包含以下基于所选值的信息：
+ `%t`：日志条目的时间，不带毫秒
+ `%m`：日志条目的时间，带毫秒
+  `%r` – 远程主机地址
+  `%u@%d` – 用户名 @ 数据库名称
+  `[%p]` – 进程 ID（如果有）
+  `%l`：每个会话的日志行号 
+  `%e`：SQL 错误代码 
+  `%s`：进程开始时间戳 
+  `%v`：虚拟事务 ID 
+  `%x`：事务 ID 
+  `%c`：会话 ID 
+  `%q`：非会话终止器 
+  `%a`：应用程序名称 

# 为您的 RDS for PostgreSQL 数据库实例开启查询日志记录
<a name="USER_LogAccess.Concepts.PostgreSQL.Query_Logging"></a>

通过设置下表中列出的一些参数，您可以收集有关数据库活动的更多详细信息，包括查询、等待锁定的查询、检查点和许多其他详细信息。本主题重点介绍日志记录查询。


| 参数 | 默认值 | 说明 | 
| --- | --- | --- | 
| log\$1connections | – | 记录每个成功的连接。 | 
| log\$1disconnections | – | 记录每个会话的结束及其持续时间。 | 
| log\$1checkpoints | 1 | 记录每个检查点。 | 
| log\$1lock\$1waits | – | 记录长锁定等待次数。默认情况下，不设置此参数。 | 
| log\$1min\$1duration\$1sample | – | 设置如超出则记录语句示例的最短执行时间（ms）。示例数量使用 log\$1statement\$1sample\$1rate 参数进行设置。 | 
| log\$1min\$1duration\$1statement | – | 任何至少运行指定时间或更长时间的 SQL 语句都会被记录下来。默认情况下，不设置此参数。开启该参数可帮助查找未优化的查询。 | 
| log\$1statement | – | 设置所记录的语句类型。默认情况下，未设置此参数，但您可以将其更改为 `all`、`ddl` 或 `mod`，以指定要记录的 SQL 语句的类型。如果您为此参数指定了与 `none` 不同的任何值，还应采取其他措施来防止日志文件中的密码泄露。有关更多信息，请参阅 [降低使用查询日志记录时泄露密码的风险降低密码泄露风险](#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk)。 | 
| log\$1statement\$1sample\$1rate | – | 超过在 `log_min_duration_sample` 中指定的时间的语句百分比，以介于 0.0 和 1.0 之间的浮点值表示。 | 
| log\$1statement\$1stats | – | 向服务器日志写入累计性能统计数据。 | 

## 使用日志记录查找执行缓慢的查询
<a name="USER_LogAccess.Concepts.PostgreSQL.Query_Logging.using"></a>

您可以记录 SQL 语句和查询，以帮助查找执行缓慢的查询。您可以通过修改本节中概述的 `log_statement` 和 `log_min_duration` 参数的设置来开启此功能。在为 RDS for PostgreSQL 数据库实例开启查询日志记录之前，您应该了解日志中可能存在的密码泄露以及如何降低风险。有关更多信息，请参阅 [降低使用查询日志记录时泄露密码的风险降低密码泄露风险](#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk)。

接下来，您可以了解有关 `log_statement` 和 `log_min_duration` 参数的参考信息。log\$1statement

此参数指定应发送到日志的 SQL 语句的类型。默认值为 `none`。如果您将此参数更改为 `all`、`ddl` 或 `mod`，请务必采取建议的操作来降低在日志中泄露密码的风险。有关更多信息，请参阅 [降低使用查询日志记录时泄露密码的风险降低密码泄露风险](#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk)。

**全部**  
记录所有语句。建议将此设置用于调试目的。

**ddl**  
记录所有数据定义语言（DDL）语句，例如 CREATE、ALTER、DROP 等。

**mod**  
记录所有可修改数据的 DDL 语句和数据操作语言（DML）语句，例如 INSERT、UPDATE 和 DELETE。

**none**  
不记录任何 SQL 语句。我们建议使用此设置，以避免在日志中泄露密码的风险。log\$1min\$1duration\$1statement

任何至少运行指定时间或更长时间的 SQL 语句都会被记录下来。默认情况下，不设置此参数。开启该参数可帮助查找未优化的查询。

**–1–2147483647**  
如超过即记录语句的运行时间的毫秒数（ms）。

**设置查询日志记录**

这些步骤假设您的 RDS for PostgreSQL 数据库实例使用自定义数据库参数组。

1. 将 `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 ----------------------
   ```

1. 设置 `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 ----------------------
   ```

### 降低使用查询日志记录时泄露密码的风险
<a name="USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk"></a>

我们建议您将 `log_statement` 保持设置为 `none`，以避免泄露密码。如果您将 `log_statement` 设置为 `all`、`ddl` 或 `mod`，我们建议您采取以下一个或多个步骤。
+ 对于客户端，加密敏感信息。有关更多信息，请参阅 PostgreSQL 文档中的[加密选项](https://www.postgresql.org/docs/current/encryption-options.html)。使用 `ENCRYPTED` 和 `UNENCRYPTED` 语句的 `CREATE`（和 `ALTER`）选项。有关更多信息，请参阅 PostgreSQL 文档中的 [CREATE USER](https://www.postgresql.org/docs/current/sql-createuser.html)。
+ 对于您的 RDS for PostgreSQL 数据库实例，请设置并使用 PostgreSQL Auditing（pgAudit）扩展。此扩展编辑发送到日志的 CREATE 和 ALTER 语句中的敏感信息。有关更多信息，请参阅 [使用 pgAudit 记录数据库活动](Appendix.PostgreSQL.CommonDBATasks.pgaudit.md)。
+ 限制对 CloudWatch Logs 的访问。
+ 使用更强的身份验证机制，如 IAM。

## 将 PostgreSQL 日志发布到 Amazon CloudWatch Logs
<a name="USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs"></a>

要在高持久性存储中存储 PostgreSQL 日志记录，您可以使用 Amazon CloudWatch Logs。利用 CloudWatch Logs，您还可以对日志数据进行实时分析，并使用 CloudWatch 查看指标和创建警报。例如，如果您将 `log_statement` 设置为 `ddl`，则可以将告警设置为只要执行 DDL 语句就发出提示。在创建 RDS for PostgreSQL 数据库实例的过程中，您可以选择让 PostgreSQL 日志上载到 CloudWatch Logs。如果您当时选择不上载日志，可以稍后修改您的实例，以便从那时起开始上载日志。换句话说，不会上载现有日志。只有在修改后的 RDS for PostgreSQL 数据库实例上创建了新日志时，才上载这些新日志。

所有目前可用的 RDS for PostgreSQL 版本都支持将日志文件发布到 CloudWatch Logs。有关更多信息，请参阅《Amazon RDS for PostgreSQL 版本注释》**中的 [Amazon RDS for PostgreSQL 更新](https://docs.amazonaws.cn/AmazonRDS/latest/PostgreSQLReleaseNotes/postgresql-versions.html)。

要使用 CloudWatch Logs，请为 PostgreSQL 数据库实例配置 RDS 以将日志数据发布到日志组。

您可以将以下日志类型发布到 CloudWatch Logs for RDS for PostgreSQL：
+ PostgreSQL 日志
+ 升级日志 
+ IAM 数据库身份验证错误日志

在完成配置后，Amazon RDS 将日志事件发布到 CloudWatch 日志组内的日志流。例如，PostgreSQL 日志数据存储在日志组 `/aws/rds/instance/my_instance/postgresql` 中。要查看您的日志，请在 [https://console.aws.amazon.com/cloudwatch/](https://console.amazonaws.cn/cloudwatch/) 处打开 CloudWatch 控制台。

### 控制台
<a name="USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs.CON"></a>

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

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要修改的数据库实例，然后选择 **Modify (修改)**。

1. 在 **Log exports (日志导出)** 部分中，选择要开始发布到 CloudWatch Logs 的日志。

   **Log exports (日志导出)** 部分仅适用于支持发布到 CloudWatch Logs 的 PostgreSQL 版本。

1. 选择**继续**，然后选择摘要页面上的**修改数据库实例**。

### Amazon CLI
<a name="USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs.CLI"></a>

您可以使用 Amazon CLI 来发布 PostgreSQL 日志。您可以调用带以下参数的 [https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-db-instance.html) 命令。
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

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

您还可以通过调用以下 CLI 命令来发布 PostgreSQL 日志：
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html](https://docs.amazonaws.cn/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.amazonaws.cn/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

通过以下选项运行上述 CLI 命令之一：
+ `--db-instance-identifier`
+ `--enable-cloudwatch-logs-exports`
+ `--db-instance-class`
+ `--engine`

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

**Example 修改实例以将日志发布到 CloudWatch Logs**  
以下示例修改现有的 PostgreSQL 数据库实例以将日志文件发布到 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值是 JSON 对象。此对象的键是 `EnableLogTypes`，其值是具有 `postgresql` 和 `upgrade` 的任意组合的字符串的数组。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql", "upgrade"]}'
```
对于：Windows  

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

**Example 创建实例以将日志发布到 CloudWatch Logs**  
以下示例将创建一个 PostgreSQL 数据库实例并将日志文件发布到 CloudWatch Logs。`--enable-cloudwatch-logs-exports` 值是 JSON 字符串数组。这些字符串可以是 `postgresql` 和 `upgrade` 的任意组合。  
对于 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' \
4.     --db-instance-class db.m4.large \
5.     --engine postgres
```
对于：Windows  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' ^
4.     --db-instance-class db.m4.large ^
5.     --engine postgres
```

### RDS API
<a name="USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 来发布 PostgreSQL 日志。您可以使用以下参数调用 [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
对 `CloudwatchLogsExportConfiguration` 参数进行的更改始终立即应用于数据库实例。因此，`ApplyImmediately` 参数没有影响。

您还可以通过调用以下 RDS API 操作来发布 PostgreSQL 日志：
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

使用以下参数运行这些 RDS API 操作之一：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

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

 

# 监控 Amazon CloudTrail 中的 Amazon RDS API 调用
<a name="logging-using-cloudtrail"></a>

Amazon CloudTrail 是一项可帮助您审计 Amazon 账户的 Amazon 服务。在您创建 Amazon CloudTrail 账户时，对您的账户开启 Amazon。有关 CloudTrail 的更多信息，请参阅《Amazon CloudTrail 用户指南》[https://docs.amazonaws.cn/awscloudtrail/latest/userguide/](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/)。

**Topics**
+ [

## CloudTrail 与 Amazon RDS 集成
](#service-name-info-in-cloudtrail)
+ [

## Amazon RDS 日志文件条目
](#understanding-service-name-entries)

## CloudTrail 与 Amazon RDS 集成
<a name="service-name-info-in-cloudtrail"></a>

所有 Amazon RDS 操作均由 CloudTrail 记录。CloudTrail 提供了用户、角色或 Amazon 服务在 Amazon RDS 中所执行操作的记录。

### CloudTrail 事件
<a name="service-name-info-in-cloudtrail.events"></a>

CloudTrail 将 Amazon RDS 的 API 调用作为事件捕获。一个事件表示来自任何源的一个请求，包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息。事件包含来自 Amazon RDS 控制台的调用和对 Amazon RDS API 操作的代码调用。

Amazon RDS 活动记录在 **Event history**（事件历史记录）中的 CloudTrail 事件中。您可以使用 CloudTrail 控制台查看Amazon区域中过去 90 天内记录的 API 活动和事件。有关更多信息，请参阅[使用 CloudTrail 事件历史记录查看事件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

### CloudTrail 跟踪
<a name="service-name-info-in-cloudtrail.trails"></a>

要持续记录 Amazon 账户中的事件（包括 Amazon RDS 的事件），请创建跟踪记录。跟踪是一种配置，可用于将事件传送到指定的 Amazon S3 存储桶。CloudTrail 通常会在账户活动发生后的 15 分钟内传送日志文件。

**注意**  
如果您不配置跟踪，则仍可在 CloudTrail 控制台中的**事件历史记录**中查看最新事件。

您可以为 Amazon 账户创建两种类型的跟踪：应用于所有区域的跟踪，或应用于一个区域的跟踪。预设情况下，在控制台中创建跟踪时，此跟踪应用于所有 区域。

此外，您可以配置其他 Amazon 服务，进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息，请参阅：
+ [创建跟踪概览](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支持的服务和集成](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [为 CloudTrail 配置 Amazon SNS 通知](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [从多个区域接收 CloudTrail 日志文件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)和[从多个账户接收 CloudTrail 日志文件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

## Amazon RDS 日志文件条目
<a name="understanding-service-name-entries"></a>

CloudTrail 日志文件包含一个或多个日志条目。CloudTrail 日志文件不是公用 API 调用的有序堆栈跟踪，因此它们不会按任何特定顺序显示。

下面的示例显示了一个 CloudTrail 日志条目，该条目说明了 `CreateDBInstance` 操作。

```
{
    "eventVersion": "1.04",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AKIAIOSFODNN7EXAMPLE",
        "arn": "arn:aws:iam::123456789012:user/johndoe",
        "accountId": "123456789012",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "userName": "johndoe"
    },
    "eventTime": "2018-07-30T22:14:06Z",
    "eventSource": "rds.amazonaws.com",
    "eventName": "CreateDBInstance",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "192.0.2.0",
    "userAgent": "aws-cli/1.15.42 Python/3.6.1 Darwin/17.7.0 botocore/1.10.42",
    "requestParameters": {
        "enableCloudwatchLogsExports": [
            "audit",
            "error",
            "general",
            "slowquery"
        ],
        "dBInstanceIdentifier": "test-instance",
        "engine": "mysql",
        "masterUsername": "myawsuser",
        "allocatedStorage": 20,
        "dBInstanceClass": "db.m1.small",
        "masterUserPassword": "****"
    },
    "responseElements": {
        "dBInstanceArn": "arn:aws:rds:us-east-1:123456789012:db:test-instance",
        "storageEncrypted": false,
        "preferredBackupWindow": "10:27-10:57",
        "preferredMaintenanceWindow": "sat:05:47-sat:06:17",
        "backupRetentionPeriod": 1,
        "allocatedStorage": 20,
        "storageType": "standard",
        "engineVersion": "8.0.28",
        "dbInstancePort": 0,
        "optionGroupMemberships": [
            {
                "status": "in-sync",
                "optionGroupName": "default:mysql-8-0"
            }
        ],
        "dBParameterGroups": [
            {
                "dBParameterGroupName": "default.mysql8.0",
                "parameterApplyStatus": "in-sync"
            }
        ],
        "monitoringInterval": 0,
        "dBInstanceClass": "db.m1.small",
        "readReplicaDBInstanceIdentifiers": [],
        "dBSubnetGroup": {
            "dBSubnetGroupName": "default",
            "dBSubnetGroupDescription": "default",
            "subnets": [
                {
                    "subnetAvailabilityZone": {"name": "us-east-1b"},
                    "subnetIdentifier": "subnet-cbfff283",
                    "subnetStatus": "Active"
                },
                {
                    "subnetAvailabilityZone": {"name": "us-east-1e"},
                    "subnetIdentifier": "subnet-d7c825e8",
                    "subnetStatus": "Active"
                },
                {
                    "subnetAvailabilityZone": {"name": "us-east-1f"},
                    "subnetIdentifier": "subnet-6746046b",
                    "subnetStatus": "Active"
                },
                {
                    "subnetAvailabilityZone": {"name": "us-east-1c"},
                    "subnetIdentifier": "subnet-bac383e0",
                    "subnetStatus": "Active"
                },
                {
                    "subnetAvailabilityZone": {"name": "us-east-1d"},
                    "subnetIdentifier": "subnet-42599426",
                    "subnetStatus": "Active"
                },
                {
                    "subnetAvailabilityZone": {"name": "us-east-1a"},
                    "subnetIdentifier": "subnet-da327bf6",
                    "subnetStatus": "Active"
                }
            ],
            "vpcId": "vpc-136a4c6a",
            "subnetGroupStatus": "Complete"
        },
        "masterUsername": "myawsuser",
        "multiAZ": false,
        "autoMinorVersionUpgrade": true,
        "engine": "mysql",
        "cACertificateIdentifier": "rds-ca-2015",
        "dbiResourceId": "db-ETDZIIXHEWY5N7GXVC4SH7H5IA",
        "dBSecurityGroups": [],
        "pendingModifiedValues": {
            "masterUserPassword": "****",
            "pendingCloudwatchLogsExports": {
                "logTypesToEnable": [
                    "audit",
                    "error",
                    "general",
                    "slowquery"
                ]
            }
        },
        "dBInstanceStatus": "creating",
        "publiclyAccessible": true,
        "domainMemberships": [],
        "copyTagsToSnapshot": false,
        "dBInstanceIdentifier": "test-instance",
        "licenseModel": "general-public-license",
        "iAMDatabaseAuthenticationEnabled": false,
        "performanceInsightsEnabled": false,
        "vpcSecurityGroups": [
            {
                "status": "active",
                "vpcSecurityGroupId": "sg-f839b688"
            }
        ]
    },
    "requestID": "daf2e3f5-96a3-4df7-a026-863f96db793e",
    "eventID": "797163d3-5726-441d-80a7-6eeb7464acd4",
    "eventType": "AwsApiCall",
    "recipientAccountId": "123456789012"
}
```

如前面示例中的 `userIdentity` 元素所示，每个事件或日志条目都包含有关生成请求的人员的信息。身份信息可帮助您确定以下内容：
+ 请求是使用根用户凭证还是 IAM 用户凭证发出的。
+ 请求是使用角色还是联合用户的临时安全凭证发出的。
+ 请求是否由其他 Amazon 服务发出。

有关 `userIdentity` 的更多信息，请参阅 [CloudTrail userIdentity 元素](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。有关 `CreateDBInstance` 和其他 Amazon RDS 操作的更多信息，请参阅 [Amazon RDS API 参考](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/)。

# 使用数据库活动流监控 Amazon RDS
<a name="DBActivityStreams"></a><a name="das"></a>

通过使用数据库活动流，您可以监控近乎实时的数据库活动流。

**Topics**
+ [

## 数据库活动流概览
](#DBActivityStreams.Overview)
+ [

# 为 Oracle 数据库配置统一审计
](DBActivityStreams.configuring-auditing.md)
+ [

# 为 Amazon RDS for Microsoft SQL Server 配置审计策略
](DBActivityStreams.configuring-auditing-SQLServer.md)
+ [

# 启动数据库活动流
](DBActivityStreams.Enabling.md)
+ [

# 修改 Amazon RDS 的数据库活动流
](DBActivityStreams.Modifying.md)
+ [

# 获取数据库活动流的状态
](DBActivityStreams.Status.md)
+ [

# 停止数据库活动流
](DBActivityStreams.Disabling.md)
+ [

# 监控数据库活动流
](DBActivityStreams.Monitoring.md)
+ [

# 数据库活动流的 IAM 策略示例
](DBActivityStreams.ManagingAccess.md)

## 数据库活动流概览
<a name="DBActivityStreams.Overview"></a>

作为 Amazon RDS 数据库管理员，您需要保障数据库的安全，并满足合规性和法规要求。一种策略是集成数据库活动流与监控工具。通过这种方式，您可以在数据库中监控审计活动并相应设置警报。

安全威胁既可以来自外部，也可以来自内部。要防范内部威胁，您可以通过配置数据库活动流功能控制管理员对数据流的访问。Amazon RDS 数据管理员无权收集、传输、存储和处理流。

**Contents**
+ [

### 数据库活动流的工作原理
](#DBActivityStreams.Overview.how-they-work)
+ [

### Oracle 数据库和 Microsoft SQL Server 数据库中的审计
](#DBActivityStreams.Overview.auditing)
  + [

#### Oracle 数据库中的统一审计
](#DBActivityStreams.Overview.unified-auditing)
  + [

#### Microsoft SQL Server 中的审计
](#DBActivityStreams.Overview.SQLServer-auditing)
  + [

#### Oracle 数据库和 SQL Server 的非原生审计字段
](#DBActivityStreams.Overview.unified-auditing.non-native)
  + [

#### 数据库参数组覆盖
](#DBActivityStreams.Overview.unified-auditing.parameter-group)
+ [

### 数据库活动流的异步模式
](#DBActivityStreams.Overview.sync-mode)
+ [

### 数据库活动流的要求和限制
](#DBActivityStreams.Overview.requirements)
+ [

### 区域和版本可用性
](#DBActivityStreams.RegionVersionAvailability)
+ [

### 数据库活动流支持的数据库实例类
](#DBActivityStreams.Overview.requirements.classes)

### 数据库活动流的工作原理
<a name="DBActivityStreams.Overview.how-they-work"></a>

Amazon RDS 会近乎实时地将活动推送到 Amazon Kinesis 数据流。系统将自动创建 Kinesis 流。在 Kinesis 中，您可以配置 Amazon 服务（如 Amazon Data Firehose）和 Amazon Lambda 来使用 Kinesis 流并存储数据。

**重要**  
使用 Amazon RDS 中的 数据库活动流功能是免费的，但 Amazon Kinesis 会针对数据流收费。有关更多信息，请参阅 [Amazon Kinesis Data Streams 定价](https://www.amazonaws.cn/kinesis/data-streams/pricing/)。

您可以为合规性管理配置应用程序，以使用数据库活动流。这些应用程序可以使用流生成警报，并审计数据库上的活动。

Amazon RDS 在多可用区部署中支持数据库活动流。在这种情况下，数据库活动流会审计主实例和备用实例。

### Oracle 数据库和 Microsoft SQL Server 数据库中的审计
<a name="DBActivityStreams.Overview.auditing"></a>

审计是监控和记录已配置的数据库操作。Amazon RDS 在默认情况下不捕获数据库活动。您可自行在数据库中创建和管理审核策略。

**Topics**
+ [

#### Oracle 数据库中的统一审计
](#DBActivityStreams.Overview.unified-auditing)
+ [

#### Microsoft SQL Server 中的审计
](#DBActivityStreams.Overview.SQLServer-auditing)
+ [

#### Oracle 数据库和 SQL Server 的非原生审计字段
](#DBActivityStreams.Overview.unified-auditing.non-native)
+ [

#### 数据库参数组覆盖
](#DBActivityStreams.Overview.unified-auditing.parameter-group)

#### Oracle 数据库中的统一审计
<a name="DBActivityStreams.Overview.unified-auditing"></a>

在 Oracle 数据库中，*统一审核策略*是一组已命名的审核设置，可用于审核某个方面的用户行为。策略可以是简单的审计单个用户的活动。您还可以创建使用条件的复杂审核策略。

Oracle 数据库将审计记录（包括 `SYS` 审计记录）写入*统一审计跟踪记录*。例如，如果在 `INSERT` 语句期间发生错误，标准审计会指示错误编号和所运行的 SQL。审计跟踪记录位于 `AUDSYS` 架构的只读表中。要访问这些记录，请查询 `UNIFIED_AUDIT_TRAIL` 数据词典视图。

通常，您可以按如下方式配置数据库活动流：

1. 使用 `CREATE AUDIT POLICY` 命令创建 Oracle 数据库审核策略。

   Oracle 数据库会生成审计记录。

1. 使用 `AUDIT POLICY` 命令激活审核策略。

1. 配置数据库活动流。

   仅捕获与 Oracle 数据库审核策略匹配的活动，并将其发送到 Amazon Kinesis 数据流。启用数据库活动流后，Oracle 数据库管理员无法更改审核策略或删除审核日志。

要了解有关统一审核策略的更多信息，请参阅 *Oracle Database 安全指南*中的[关于使用统一审核策略和审核审核活动](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-2435D929-10AD-43C7-8A6C-5133170074D0)。

#### Microsoft SQL Server 中的审计
<a name="DBActivityStreams.Overview.SQLServer-auditing"></a>

数据库活动流使用 SQLAudit 功能审计 SQL Server 数据库。

RDS for SQL Server 实例包含以下各项功能：
+ 服务器审计 – SQL Server 审计收集服务器或数据库级操作的单个实例以及一组要监视的操作。服务器级审计 `RDS_DAS_AUDIT` 和 `RDS_DAS_AUDIT_CHANGES` 由 RDS 管理。
+ 服务器审计规范 - 服务器审计规范记录服务器级别的事件。您可以修改 `RDS_DAS_SERVER_AUDIT_SPEC` 规范。该规范链接到服务器审计 `RDS_DAS_AUDIT`。`RDS_DAS_CHANGES_AUDIT_SPEC` 规范由 RDS 管理。
+ 数据库审计规范 - 数据库审计规范记录数据库级别的事件。您可以创建数据库审计规范 `RDS_DAS_DB_<name>` 并将其链接到 `RDS_DAS_AUDIT` 服务器审计。

您可以使用控制台或 CLI 配置数据库活动流。通常，您可以按如下方式配置数据库活动流：

1. （可选）使用 `CREATE DATABASE AUDIT SPECIFICATION` 命令创建数据库审计规范并将其链接到 `RDS_DAS_AUDIT` 服务器审计。

1. （可选）使用 `ALTER SERVER AUDIT SPECIFICATION` 命令修改服务器审计规范并定义策略。

1. 激活数据库和服务器审核策略。例如：

   `ALTER DATABASE AUDIT SPECIFICATION [<Your database specification>] WITH (STATE=ON)`

   `ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC] WITH (STATE=ON)`

1. 配置数据库活动流。

   仅捕获与服务器和数据库审核策略匹配的活动，并将其发送到 Amazon Kinesis 数据流。启用数据库活动流且锁定策略后，数据库管理员无法更改审核策略或删除审核日志。
**重要**  
如果启用了特定数据库的数据库审计规范并且策略处于锁定状态，则无法删除该数据库。

有关 SQL Server 审计的更多信息，请参阅《Microsoft SQL Server 文档》**中的 [SQL Server 审计组件](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16)。



#### Oracle 数据库和 SQL Server 的非原生审计字段
<a name="DBActivityStreams.Overview.unified-auditing.non-native"></a>

启动数据库活动流时，每个数据库事件都会生成相应的活动流事件。例如，数据库用户可能会运行 `SELECT` 和 `INSERT` 语句。数据库会审计这些事件并将结果发送到 Amazon Kinesis 数据流。

活动流中的事件表示为 JSON 对象。JSON 对象包含一个 `DatabaseActivityMonitoringRecord`，其中包含一个 `databaseActivityEventList` 数组。数组中的预定义字段包括 `class`、`clientApplication` 和 `command`。

默认情况下，活动流不包括原生引擎审计字段。您可以配置 Amazon RDS for Oracle 和 SQL Server，使其在 `engineNativeAuditFields` JSON 对象中包含这些额外的字段。

在 Oracle 数据库中，统一审计跟踪中的大多数事件都映射到 RDS 数据活动流中的字段。例如，统一审计中的 `UNIFIED_AUDIT_TRAIL.SQL_TEXT` 字段映射到数据库活动流中的 `commandText` 字段。但是，Oracle 数据库审计字段（如 `OS_USERNAME`）不映射到数据库活动流中的预定义字段。

在 SQL Server 中，SQLAudit 记录的大多数事件字段都映射到 RDS 数据库活动流中的字段。例如，来自审计中 `sys.fn_get_audit_file` 的 `code` 字段映射到数据库活动流中的 `commandText` 字段。但是，SQL Server 数据库审计字段（如 `permission_bitmask`）不映射到数据库活动流中的预定义字段。

有关 databaseActivityEventList 的更多信息，请参阅[数据库活动流的 databaseActivityEventList JSON 数组](DBActivityStreams.AuditLog.databaseActivityEventList.md)。

#### 数据库参数组覆盖
<a name="DBActivityStreams.Overview.unified-auditing.parameter-group"></a>

通常，您可以通过附加参数组来打开 RDS for Oracle 中的统一审计。但是，数据库活动流需要额外的配置。为了改善您的客户体验，Amazon RDS 执行以下操作：
+ 如果激活活动流，RDS for Oracle 将忽略参数组中的审计参数。
+ 如果停用活动流，RDS for Oracle 将停止忽略审计参数。

SQL Server 的数据库活动流与您在 SQL 审计选项中设置的任何参数均无关。

### 数据库活动流的异步模式
<a name="DBActivityStreams.Overview.sync-mode"></a>

Amazon RDS 中的活动流始终是异步的。当数据库会话生成活动流事件时，会话将立即返回到正常活动。在后台，Amazon RDS 使活动流事件成为持久记录。

如果后台任务出错，则 Amazon RDS 将生成事件。此事件指示活动流事件记录可能已丢失的任何时间段的开始和结束时间。异步模式可提高数据库性能，而不是活动流的准确性。

### 数据库活动流的要求和限制
<a name="DBActivityStreams.Overview.requirements"></a>

在 RDS 中，数据库活动流具有以下要求和限制：
+ 数据库活动流需要使用 Amazon Kinesis。
+ 数据库活动流需要使用 Amazon Key Management Service (Amazon KMS)，因为这些活动流始终是加密的。
+ 对 Amazon Kinesis 数据流应用额外加密与数据库活动流不兼容，因为数据库活动流已使用 Amazon KMS 密钥进行了加密。
+ 您可自行创建和管理审核策略。与 Amazon Aurora 不同，RDS for Oracle 默认不捕获数据库活动。
+ 您可自行创建和管理审核策略或规范。与 Amazon Aurora 不同，Amazon RDS 在默认情况下不捕获数据库活动。
+ 在多可用区部署中，仅在主数据库实例上启动数据库活动流。该活动流会自动审计主数据库实例和备用数据库实例。失效转移期间无需执行其他步骤。
+ 重命名数据库实例不会创建新的 Kinesis 流。
+ RDS for Oracle 不支持 CDB。
+ 不支持只读副本。

### 区域和版本可用性
<a name="DBActivityStreams.RegionVersionAvailability"></a>

功能可用性和支持因每个数据库引擎的特定版本以及 Amazon Web Services 区域而异。有关适用于数据库活动流的版本和区域可用性的更多信息，请参阅[支持 Amazon RDS 中数据库活动流的区域和数据库引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.DBActivityStreams.md)。

### 数据库活动流支持的数据库实例类
<a name="DBActivityStreams.Overview.requirements.classes"></a>

对于 RDS for Oracle，您可以将数据库活动流与以下数据库实例类一起使用：
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5.\$1large.tpc\$1.mem\$1x
+ db.r5b.\$1large
+ db.r5b.\$1large.tpc\$1.mem\$1x
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.r6i.\$1large.tpc\$1.mem\$1x
+ db.x2idn.\$1large
+ db.x2iedn.\$1large
+ db.x2iezn.\$1large
+ db.z1d.\$1large

对于 RDS for SQL Server，您可以将数据库活动流与以下数据库实例类一起使用：
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5b.\$1large
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.x1e.\$1large
+ db.x2iedn.\$1large
+ db.z1d.\$1large

有关实例类类型的更多信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。

# 为 Oracle 数据库配置统一审计
<a name="DBActivityStreams.configuring-auditing"></a>

配置统一审计以用于数据库活动流时，可能会出现以下情况：
+ 未为 Oracle 数据库配置统一审计。

  在这种情况下，使用 `CREATE AUDIT POLICY` 命令创建新策略，然后使用 `AUDIT POLICY` 命令激活这些策略。以下示例创建并激活策略来监控具有特定权限和角色的用户。

  ```
  CREATE AUDIT POLICY table_pol
  PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE
  ROLES emp_admin, sales_admin;
  
  AUDIT POLICY table_pol;
  ```

  有关完整说明，请参阅 Oracle 数据库文档中[配置审计策略](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-22CDB667-5AA2-4051-A262-FBD0236763CB)。
+ 已为 Oracle 数据库配置了统一审计。

  激活数据库活动流时，RDS for Oracle 会自动清除现有审计数据。还会撤消审计跟踪权限。RDS for Oracle 无法再执行以下操作：
  + 清除统一审计跟踪记录。
  + 添加、删除或修改统一审计策略。
  + 更新上次归档的时间戳。
**重要**  
强烈建议您在激活数据库活动流之前备份审计数据。

  有关 `UNIFIED_AUDIT_TRAIL` 视图的描述，请参阅 [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162)。如果您有 Oracle Support 账户，请参阅[如何清除统一审计跟踪](https://support.oracle.com/knowledge/Oracle%20Database%20Products/1582627_1.html)。

# 为 Amazon RDS for Microsoft SQL Server 配置审计策略
<a name="DBActivityStreams.configuring-auditing-SQLServer"></a>

SQL Server 数据库实例具有服务器审计 `RDS_DAS_AUDIT`（由 Amazon RDS 管理）。您可以在服务器审计规范 `RDS_DAS_SERVER_AUDIT_SPEC` 中定义策略以记录服务器事件。您可以创建数据库审计规范，例如 `RDS_DAS_DB_<name>`，并定义记录数据库事件的策略。有关服务器和数据库级审计操作组的列表，请参阅《Microsoft SQL Server 文档》**中的 [SQL Server 审计操作组和操作](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions)。

原定设置服务器策略仅监控失败的登录，以及对数据库活动流的任何数据库或服务器审计规范进行的更改。

审计和审计规范的限制包括以下内容：
+ 当数据库活动流处于*锁定*状态时，您无法修改服务器或数据库审计规范。
+ 您无法修改服务器审计 `RDS_DAS_AUDIT` 规范。
+ 您无法修改 SQL Server 审计 `RDS_DAS_CHANGES` 或其相关的服务器审计规范 `RDS_DAS_CHANGES_AUDIT_SPEC`。
+ 创建数据库审计规范时，必须使用格式 `RDS_DAS_DB_<name>`，例如 `RDS_DAS_DB_databaseActions`。

**重要**  
对于较小的实例类，我们建议您不要审计所有数据，而只审计所需的数据。这有助于减少数据库活动流对这些实例类的性能影响。

以下示例代码修改了服务器审计规范 `RDS_DAS_SERVER_AUDIT_SPEC`，并对所有注销和成功的登录操作进行审计：

```
ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
      WITH (STATE=OFF);
ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
      ADD (LOGOUT_GROUP),
      ADD (SUCCESSFUL_LOGIN_GROUP)
      WITH (STATE = ON );
```

以下示例代码创建数据库审计规范 `RDS_DAS_DB_database_spec`，并将其附加到服务器审计 `RDS_DAS_AUDIT`：

```
USE testDB;
CREATE DATABASE AUDIT SPECIFICATION [RDS_DAS_DB_database_spec]
     FOR SERVER AUDIT [RDS_DAS_AUDIT]
     ADD ( INSERT, UPDATE, DELETE  
          ON testTable BY testUser )  
     WITH (STATE = ON);
```

配置审计规范后，确保将规范 `RDS_DAS_SERVER_AUDIT_SPEC` 和 `RDS_DAS_DB_<name>` 设置为 `ON` 状态。现在，它们可以将审计数据发送到您的数据库活动流。

# 启动数据库活动流
<a name="DBActivityStreams.Enabling"></a>

在启动数据库实例的活动流时，在审计策略中配置的每个数据库活动事件都会生成一个活动流事件。SQL 命令（例如 `CONNECT` 和 `SELECT`）可生成访问事件。SQL 命令（例如 `CREATE` 和 `INSERT`）可生成更改事件。

**重要**  
打开 Oracle 数据库实例的活动流会清除现有的审计数据。还会撤消审计跟踪权限。启用数据流后，Oracle RDS 将无法再执行以下操作：  
清除统一审计跟踪记录。
添加、删除或修改统一审计策略。
更新上次存档的时间戳。

------
#### [ Console ]

**要启动数据库活动流**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要对其启动活动流的 Amazon RDS 数据库实例。在多可用区部署中，仅在主实例上启动活动流。活动流会审计主实例和备用实例。

1. 对于 **Actions (操作)**，选择 **Start activity stream (启动活动流)**。

   **启动数据库活动流：***名称*窗口出现，其中*名称*是您的 RDS 实例。

1. 输入以下设置：
   + 对于 **Amazon KMS key**，从 Amazon KMS keys 列表中选择一个密钥。

     Amazon RDS 使用 KMS 密钥加密密钥，从而加密数据库活动。请选择原定设置密钥以外的 KMS 密钥。有关加密密钥和 Amazon KMS 的更多信息，请参阅 *Amazon Key Management Service 开发人员指南*中的[什么是 Amazon Key Management Service？](https://docs.amazonaws.cn/kms/latest/developerguide/overview.html)。
   + 对于**数据库活动事件**，选择**启用引擎原生审计字段**以包含引擎特定的审计字段。
   + 选择 **Immediately (立即)**。

     当您选择 **Immediately (立即)** 时，RDS 实例会立即重新启动。如果选择 **During the next maintenance window (在下一维护时段内)**，RDS 实例不会立即重新启动。在这种情况下，数据库活动流不会启动，直到下一个维护时段。

1. 选择 **Start database activity stream**（启动数据库活动流）。

   数据库的状态显示活动流正在启动。
**注意**  
如果您收到错误 `You can't start a database activity stream in this configuration`，请检查 [数据库活动流支持的数据库实例类](DBActivityStreams.md#DBActivityStreams.Overview.requirements.classes)，以了解您的RDS 实例是否正在使用受支持的实例类。

------
#### [ Amazon CLI ]

要为数据库实例启动数据库活动流，请使用 Amazon CLI 命令 配置数据库集群[数据库](https://docs.amazonaws.cn/cli/latest/reference/rds/start-activity-stream.html)。
+ `--resource-arn arn` – 指定数据库实例的 Amazon Resource Name (ARN)。
+ `--kms-key-id key` – 指定用于加密数据库活动流中的消息的 KMS 密钥标识符。Amazon KMS 密钥标识符是密钥 ARN、密钥 ID、别名 ARN 或者 Amazon KMS key 的别名。
+ `--engine-native-audit-fields-included` – 包括数据流中引擎特定的审计字段。要排除这些字段，请指定 `--no-engine-native-audit-fields-included`（默认值）。

以下示例以异步模式启动数据库实例的数据库活动流。

对于 Linux、macOS 或 Unix：

```
aws rds start-activity-stream \
    --mode async \
    --kms-key-id my-kms-key-arn \
    --resource-arn my-instance-arn \
    --engine-native-audit-fields-included \
    --apply-immediately
```

对于 Windows：

```
aws rds start-activity-stream ^
    --mode async ^
    --kms-key-id my-kms-key-arn ^
    --resource-arn my-instance-arn ^
    --engine-native-audit-fields-included ^
    --apply-immediately
```

------
#### [ Amazon RDS API ]

要为数据库实例启动数据库活动流，请使用 [StartActivityStream](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_StartActivityStream.html) 操作配置实例。

使用以下参数调用操作：
+ `Region`
+ `KmsKeyId`
+ `ResourceArn`
+ `Mode`
+ `EngineNativeAuditFieldsIncluded`

------

# 修改 Amazon RDS 的数据库活动流
<a name="DBActivityStreams.Modifying"></a>

启动活动流时，您可能需要自定义 Amazon RDS 审计策略。如果您不想通过停止活动流而损失时间和数据，可以将*审计策略状态* 更改为以下设置之一：

**Locked (default)** [已锁定（原定设置）]  
数据库中的审计策略是只读的。

**Unlocked**（已解锁）  
数据库中的审计策略为读/写状态。

基本步骤如下所示：

1. 将审计策略状态修改为已解锁。

1. 自定义您的审计策略。

1. 将审计策略状态修改为已锁定。

## 控制台
<a name="DBActivityStreams.Modifying-collapsible-section-E1"></a>

**修改活动流的审计策略状态**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 对于 **Actions**（操作），选择 **Modify database activity stream**（修改数据库活动流）。

   **Modify database activity stream: *name***（修改数据库活动流：name）窗口，其中 *name* 是您的 RDS 实例。

1. 请选择以下任一选项：  
**Locked**（已锁定）  
当您锁定审计策略时，它会变为只读状态。除非解锁策略或停止活动流，否则您无法编辑审计策略。  
**Unlocked**（已解锁）  
当您解锁审计策略时，它变为读/写状态。您可以在启动活动流时编辑您的审计策略。

1. 选择 **Modify DB activity stream**（修改数据库活动流）。

   Amazon RDS 数据库的状态显示**正在配置活动流**。

1. （可选）选择数据库实例链接。然后，选择**配置**选项卡。

   **Audit policy status**（审计策略状态）字段显示下列值之一：
   + **Locked**（已锁定）
   + **Unlocked**（已解锁）
   + **Locking policy**（锁定策略）
   + **Unlocking policy**（解锁策略）

## Amazon CLI
<a name="DBActivityStreams.Modifying-collapsible-section-E2"></a>

要修改数据库实例的活动流状态，请使用 Amazon CLI 命令 [modify-activity-stream](https://docs.amazonaws.cn/cli/latest/reference/rds/modify-activity-stream.html)。


****  

| 选项 | 必填？ | Description | 
| --- | --- | --- | 
|  `--resource-arn my-instance-ARN`  |  是  |  RDS 数据库实例的 Amazon 资源名称（ARN）。  | 
|  `--audit-policy-state`  |  否  |  您的实例上数据库活动流的审计策略的新状态：`locked` 或 `unlocked`。  | 

以下示例为在 *my-instance-ARN* 上启动的活动流解锁审计策略。

对于 Linux、macOS 或 Unix：

```
aws rds modify-activity-stream \
    --resource-arn my-instance-ARN \
    --audit-policy-state unlocked
```

对于 Windows：

```
aws rds modify-activity-stream ^
    --resource-arn my-instance-ARN ^
    --audit-policy-state unlocked
```

以下示例描述了实例 *my-instance*。部分示例输出显示审计策略已解锁。

```
aws rds describe-db-instances --db-instance-identifier my-instance

{
    "DBInstances": [
        {
            ...
            "Engine": "oracle-ee",
            ...
            "ActivityStreamStatus": "started",
            "ActivityStreamKmsKeyId": "ab12345e-1111-2bc3-12a3-ab1cd12345e",
            "ActivityStreamKinesisStreamName": "aws-rds-das-db-AB1CDEFG23GHIJK4LMNOPQRST",
            "ActivityStreamMode": "async",
            "ActivityStreamEngineNativeAuditFieldsIncluded": true, 
            "ActivityStreamPolicyStatus": "unlocked",
            ...
        }
    ]
}
```

## RDS API
<a name="DBActivityStreams.Modifying-collapsible-section-E3"></a>

要修改数据库活动流的策略状态，请使用 [ModifyActivityStream](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyActivityStream.html) 操作。

使用以下参数调用操作：
+ `AuditPolicyState`
+ `ResourceArn`

# 获取数据库活动流的状态
<a name="DBActivityStreams.Status"></a>

您可以使用控制台或 Amazon CLI 获取 Amazon RDS 数据库实例的活动流的状态。

## 控制台
<a name="DBActivityStreams.Status-collapsible-section-S1"></a>

**要获取数据库活动流的状态，请执行以下操作**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**，然后选择数据库实例链接。

1. 选择 **Configuration (配置)** 选项卡，并选择 **Database activity stream (数据库活动流)** 以查看状态。

## Amazon CLI
<a name="DBActivityStreams.Status-collapsible-section-S2"></a>

您可以获取数据库实例的活动流配置，作为对 [describe-db-instances](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-db-instances.html) CLI 请求的响应。

以下示例描述 *my-instance*。

```
aws rds --region my-region describe-db-instances --db-instance-identifier my-db
```

下面的示例介绍一个 JSON 响应。显示了以下字段：
+ `ActivityStreamKinesisStreamName`
+ `ActivityStreamKmsKeyId`
+ `ActivityStreamStatus`
+ `ActivityStreamMode`
+ `ActivityStreamPolicyStatus`



```
{
    "DBInstances": [
        {
            ...
            "Engine": "oracle-ee",
            ...
            "ActivityStreamStatus": "starting",
            "ActivityStreamKmsKeyId": "ab12345e-1111-2bc3-12a3-ab1cd12345e",
            "ActivityStreamKinesisStreamName": "aws-rds-das-db-AB1CDEFG23GHIJK4LMNOPQRST",
            "ActivityStreamMode": "async",
            "ActivityStreamEngineNativeAuditFieldsIncluded": true, 
            "ActivityStreamPolicyStatus": locked",
            ...
        }
    ]
}
```

## RDS API
<a name="DBActivityStreams.Status-collapsible-section-S3"></a>

您可以获取数据库的活动流配置，作为对 [DescribeDBInstances](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 操作的响应。

# 停止数据库活动流
<a name="DBActivityStreams.Disabling"></a>

您可以使用控制台或 Amazon CLI 停止活动流。

如果您删除 Amazon RDS 数据库实例，活动流将停止，并且会自动删除底层 Amazon Kinesis 流。

## 控制台
<a name="DBActivityStreams.Disabling-collapsible-section-D1"></a>

**关闭活动流**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择要为其停止数据库活动流的数据库。

1. 对于 **Actions (操作)**，选择 **Stop activity stream (停止活动流)**。此时将显示 **Database Activity Stream (数据库活动流)** 窗口。

   1. 选择 **Immediately (立即)**。

      当您选择 **Immediately (立即)** 时，RDS 实例会立即重新启动。如果选择 **During the next maintenance window (在下一维护时段内)**，RDS 实例不会立即重新启动。在这种情况下，数据库活动流直到下一个维护时段才会停止。

   1. 选择 **Continue (继续)**。

## Amazon CLI
<a name="DBActivityStreams.Disabling-collapsible-section-D2"></a>

要为数据库停止数据库活动流，请使用 Amazon CLI 命令 [stop-activity-stream](https://docs.amazonaws.cn/cli/latest/reference/rds/stop-activity-stream.html) 配置数据库实例。使用 `--region` 参数标识数据库实例的Amazon区域。`--apply-immediately` 参数是可选的。

对于 Linux、macOS 或 Unix：

```
aws rds --region MY_REGION \
    stop-activity-stream \
    --resource-arn MY_DB_ARN \
    --apply-immediately
```

对于 Windows：

```
aws rds --region MY_REGION ^
    stop-activity-stream ^
    --resource-arn MY_DB_ARN ^
    --apply-immediately
```

## RDS API
<a name="DBActivityStreams.Disabling-collapsible-section-D3"></a>

要为数据库停止数据库活动流，请使用 [StopActivityStream](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_StopActivityStream.html) 操作配置数据库实例。使用 `Region` 参数标识数据库实例的Amazon区域。`ApplyImmediately` 参数是可选的。

# 监控数据库活动流
<a name="DBActivityStreams.Monitoring"></a>

数据库活动流监控并报告活动。收集活动流并将其传输到 Amazon Kinesis。从 Kinesis 中，您可以监控活动流，或者其他服务和应用程序可以使用活动流进行进一步分析。您可以使用 Amazon CLI 命令 `describe-db-instances` 或 RDS API `DescribeDBInstances` 操作查找底层 Kinesis 流名称。

Amazon RDS 为您管理 Kinesis 流，如下所示：
+ Amazon RDS 自动创建具有 24 小时保留期的 Kinesis 流。
+  如有必要，Amazon RDS 会扩展 Kinesis 流。
+  如果停止了数据库活动流或删除了数据库实例，Amazon RDS 将删除 Kinesis 流。

监控以下类别的活动并将其放入活动流审核日志中：
+ **SQL 命令** – 将审计所有 SQL 命令，以及预编译语句、内置函数和采用 PL/SQL 的函数。将审核对存储过程的调用。还将审核在存储过程或函数中发出的任何 SQL 语句。
+ **其他数据库信息** – 受监控的活动包括完整的 SQL 语句、来自 DML 命令的受影响行的行数、访问的对象以及唯一的数据库名称。数据库活动流还监控绑定变量和存储过程参数。
**重要**  
每个语句的完整 SQL 文本在活动流审核日志中可见，包括任何敏感数据。但是，如果 Oracle 可以从上下文中确定数据库用户密码，则会对该密码进行修订，如下面的 SQL 语句所示。  

  ```
  ALTER ROLE role-name WITH password
  ```
+ **连接信息** – 受监控的活动包括会话和网络信息、服务器进程 ID 和退出代码。

如果在监控数据库实例时活动流发生故障，则会使用 RDS 事件通知您。

在以下各节中，您可以访问、审计和处理数据库活动流。

**Topics**
+ [

# 从 Amazon Kinesis 访问活动流
](DBActivityStreams.KinesisAccess.md)
+ [

# 数据库活动流的审计日志内容和示例
](DBActivityStreams.AuditLog.md)
+ [

# 数据库活动流的 databaseActivityEventList JSON 数组
](DBActivityStreams.AuditLog.databaseActivityEventList.md)
+ [

# 使用 Amazon 开发工具包处理数据库活动流
](DBActivityStreams.CodeExample.md)

# 从 Amazon Kinesis 访问活动流
<a name="DBActivityStreams.KinesisAccess"></a>

在为数据库启用活动流时，将会为您创建一个 Kinesis 流。您可以从 Kinesis 实时监控数据库活动。要进一步分析数据库活动，您可以将 Kinesis 流连接到使用者应用程序。您还可以将流连接到合规性管理应用程序，例如 IBM 的 Security Guardium 或 Imperva 的 SecureSphere Database Audit and Protection。

您可以从 RDS 控制台或 Kinesis 控制台访问您的 Kinesis 流。

**使用 RDS 控制台从 Kinesis 中访问活动流**

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 选择已启动活动流的 Amazon RDS 数据库实例。

1. 选择**配置**。

1. 在 **Database activity stream**（数据库活动流）下，选择 **Kinesis stream**（Kinesis 流）下的链接。

1. 在 Kinesis 控制台中，选择 **Monitoring**（监控）以开始观察数据库活动。

**使用 Kinesis 控制台从 Kinesis 中访问活动流**

1. 打开 Kinesis 控制台，网址为：[https://console.aws.amazon.com/kinesis](https://console.amazonaws.cn/kinesis)。

1. 从 Kinesis 流列表中选择您的活动流。

   活动流的名称包含前缀 `aws-rds-das-db-`，后跟数据库的资源 ID。以下是示例。

   ```
   aws-rds-das-db-NHVOV4PCLWHGF52NP
   ```

   要使用 Amazon RDS 控制台查找数据库的资源 ID，请从数据库列表中选择数据库实例，然后选择 **Configuration**（配置）选项卡。

   要使用 Amazon CLI 查找活动流的完整 Kinesis 流名称，请使用 [describe-db-instances](https://docs.amazonaws.cn/cli/latest/reference/rds/describe-db-instances.html) CLI 请求并记下响应中的 `ActivityStreamKinesisStreamName` 值。

1. 选择**监控**以开始观察数据库活动。

有关使用 Amazon Kinesis 的更多信息，请参阅[什么是 Amazon Kinesis Data Streams？](https://docs.amazonaws.cn/streams/latest/dev/introduction.html)

# 数据库活动流的审计日志内容和示例
<a name="DBActivityStreams.AuditLog"></a>

受监控的事件在数据库活动流中表示为 JSON 字符串。结构包含一个 JSON 对象，该对象包含一个 `DatabaseActivityMonitoringRecord`，后者反过来包含活动事件的 `databaseActivityEventList` 阵列。

**注意**  
对于数据库活动流，`paramList` JSON 数组不包含来自 Hibernate 应用程序的空值。

**Topics**
+ [

## 活动流的审计日志示例
](#DBActivityStreams.AuditLog.Examples)
+ [

## DatabaseActivityMonitoringRecords JSON 对象
](#DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords)
+ [

## databaseActivityEvents JSON 对象
](#DBActivityStreams.AuditLog.databaseActivityEvents)

## 活动流的审计日志示例
<a name="DBActivityStreams.AuditLog.Examples"></a>

以下是活动事件记录的已解密 JSON 审核日志示例。

**Example CONNECT SQL 语句的活动事件记录**  
以下活动事件记录显示 JDBC 瘦客户端（`clientApplication`）使用 `CONNECT` SQL 语句（`command`）针对 Oracle 数据库进行的登录。  

```
{
    "class": "Standard",
    "clientApplication": "JDBC Thin Client",
    "command": "LOGON",
    "commandText": null,
    "dbid": "0123456789",
    "databaseName": "ORCL",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:15:36.233787",
    "netProtocol": "tcp",
    "objectName": null,
    "objectType": null,
    "paramList": [],
    "pid": 17904,
    "remoteHost": "123.456.789.012",
    "remotePort": "25440",
    "rowCount": null,
    "serverHost": "987.654.321.098",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 987654321,
    "startTime": null,
    "statementId": 1,
    "substatementId": null,
    "transactionId": "0000000000000000",
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": "CREATE SESSION",
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DBID": 123456789
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((ADDRESS\u003d(PROTOCOL\u003dtcp)(HOST\u003d205.251.233.183)(PORT\u003d25440))));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "a1b2c3d4e5f6.amazon.com",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "unknown",
        "OS_USERNAME": "sumepate",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 1,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5124715
    }
}
```
以下活动事件记录显示 SQL Server 数据库的登录失败。  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "LOGIN",
            "clientApplication": "Microsoft SQL Server Management Studio",
            "command": "LOGIN FAILED",
            "commandText": "Login failed for user 'test'. Reason: Password did not match that for the login provided. [CLIENT: local-machine]",
            "databaseName": "",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 0,
            "logTime": "2022-10-06 21:34:42.7113072+00",
            "netProtocol": null,
            "objectName": "",
            "objectType": "LOGIN",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 0,
            "startTime": null,
            "statementId": "0x1eb0d1808d34a94b9d3dcf5432750f02",
            "substatementId": 1,
            "transactionId": "0",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 0,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "",
                "target_server_principal_name": "",
                "schema_name": "",
                "is_column_permission": false,
                "object_id": 0,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "<action_info "xmlns=\"http://schemas.microsoft.com/sqlserver/2008/sqlaudit_data\"><pooled_connection>0</pooled_connection><error>0x00004818</error><state>8</state><address>local machine</address><PasswordFirstNibbleHash>B</PasswordFirstNibbleHash></action_info>"-->,
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000000",
                "data_sensitivity_information": "",
                "session_server_principal_name": "",
                "connection_id": "98B4F537-0F82-49E3-AB08-B9D33B5893EF",
                "audit_schema_version": 1,
                "database_principal_id": 0,
                "server_principal_sid": null,
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```
如果未启用数据库活动流，则 JSON 文档中的最后一个字段为 `"engineNativeAuditFields": { }`。

**Example CREATE TABLE 语句的活动事件记录**  
以下示例显示 Oracle 数据库的 `CREATE TABLE` 事件。  

```
{
    "class": "Standard",
    "clientApplication": "sqlplus@ip-12-34-5-678 (TNS V1-V3)",
    "command": "CREATE TABLE",
    "commandText": "CREATE TABLE persons(\n    person_id NUMBER GENERATED BY DEFAULT AS IDENTITY,\n    first_name VARCHAR2(50) NOT NULL,\n    last_name VARCHAR2(50) NOT NULL,\n    PRIMARY KEY(person_id)\n)",
    "dbid": "0123456789",
    "databaseName": "ORCL",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:22:49.535239",
    "netProtocol": "beq",
    "objectName": "PERSONS",
    "objectType": "TEST",
    "paramList": [],
    "pid": 17687,
    "remoteHost": "123.456.789.0",
    "remotePort": null,
    "rowCount": null,
    "serverHost": "987.654.321.01",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 1234567890,
    "startTime": null,
    "statementId": 43,
    "substatementId": null,
    "transactionId": "090011007F0D0000",
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": "CREATE SEQUENCE, CREATE TABLE",
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((PROTOCOL\u003dbeq)(HOST\u003d123.456.789.0)));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "ip-10-13-0-122",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "pts/1",
        "OS_USERNAME": "rdsdb",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 12,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5133083
    }
}
```
以下示例显示 SQL Server 数据库的 `CREATE TABLE` 事件。  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "SCHEMA",
            "clientApplication": "Microsoft SQL Server Management Studio - Query",
            "command": "ALTER",
            "commandText": "Create table [testDB].[dbo].[TestTable2](\r\ntextA varchar(6000),\r\n    textB varchar(6000)\r\n)",
            "databaseName": "testDB",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 1,
            "logTime": "2022-10-06 21:44:38.4120677+00",
            "netProtocol": null,
            "objectName": "dbo",
            "objectType": "SCHEMA",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 84,
            "startTime": null,
            "statementId": "0x5178d33d56e95e419558b9607158a5bd",
            "substatementId": 1,
            "transactionId": "4561864",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 2,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "dbo",
                "target_server_principal_name": "",
                "schema_name": "",
                "is_column_permission": false,
                "object_id": 1,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "",
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000000",
                "data_sensitivity_information": "",
                "session_server_principal_name": "test",
                "connection_id": "EE1FE3FD-EF2C-41FD-AF45-9051E0CD983A",
                "audit_schema_version": 1,
                "database_principal_id": 1,
                "server_principal_sid": "0x010500000000000515000000bdc2795e2d0717901ba6998cf4010000",
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```

**Example SELECT 语句的活动事件记录**  
以下示例显示 Oracle 数据库的 `SELECT` 事件。  

```
{
    "class": "Standard",
    "clientApplication": "sqlplus@ip-12-34-5-678 (TNS V1-V3)",
    "command": "SELECT",
    "commandText": "select count(*) from persons",
    "databaseName": "1234567890",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:25:18.850375",
    "netProtocol": "beq",
    "objectName": "PERSONS",
    "objectType": "TEST",
    "paramList": [],
    "pid": 17687,
    "remoteHost": "123.456.789.0",
    "remotePort": null,
    "rowCount": null,
    "serverHost": "987.654.321.09",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 1080639707,
    "startTime": null,
    "statementId": 44,
    "substatementId": null,
    "transactionId": null,
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": null,
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((PROTOCOL\u003dbeq)(HOST\u003d123.456.789.0)));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "ip-12-34-5-678",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "pts/1",
        "OS_USERNAME": "rdsdb",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 13,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5136972
    }
}
```
以下示例显示 SQL Server 数据库的 `SELECT` 事件。  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "TABLE",
            "clientApplication": "Microsoft SQL Server Management Studio - Query",
            "command": "SELECT",
            "commandText": "select * from [testDB].[dbo].[TestTable]",
            "databaseName": "testDB",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 1,
            "logTime": "2022-10-06 21:24:59.9422268+00",
            "netProtocol": null,
            "objectName": "TestTable",
            "objectType": "TABLE",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 62,
            "startTime": null,
            "statementId": "0x03baed90412f564fad640ebe51f89b99",
            "substatementId": 1,
            "transactionId": "4532935",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 2,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "dbo",
                "target_server_principal_name": "",
                "schema_name": "dbo",
                "is_column_permission": true,
                "object_id": 581577110,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "",
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000001",
                "data_sensitivity_information": "",
                "session_server_principal_name": "test",
                "connection_id": "AD3A5084-FB83-45C1-8334-E923459A8109",
                "audit_schema_version": 1,
                "database_principal_id": 1,
                "server_principal_sid": "0x010500000000000515000000bdc2795e2d0717901ba6998cf4010000",
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```

## DatabaseActivityMonitoringRecords JSON 对象
<a name="DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords"></a>

数据库活动事件记录位于包含以下信息的 JSON 对象中。


****  

| JSON 字段 | 数据类型 | 描述 | 
| --- | --- | --- | 
|  `type`  | 字符串 |  JSON 记录的类型。值为 `DatabaseActivityMonitoringRecords`。  | 
| version | 字符串 |  数据库活动监控记录的版本。Oracle 数据库使用版本 1.3，SQL Server 使用版本 1.4。这些引擎版本引入了 engineNativeAuditFields JSON 对象。  | 
|  [databaseActivityEvents](#DBActivityStreams.AuditLog.databaseActivityEvents)  | 字符串 |  包含活动事件的 JSON 对象。  | 
| 键 | 字符串 | 用于解密 [databaseActivityEventList JSON 数组](DBActivityStreams.AuditLog.databaseActivityEventList.md) 的加密密钥  | 

## databaseActivityEvents JSON 对象
<a name="DBActivityStreams.AuditLog.databaseActivityEvents"></a>

`databaseActivityEvents` JSON 对象包含以下信息。

### JSON 记录中的顶级字段
<a name="DBActivityStreams.AuditLog.topLevel"></a>

 审核日志中的每个事件都包装在 JSON 格式的记录中。此记录包含以下字段。

**类型**  
 此字段始终具有值 `DatabaseActivityMonitoringRecords`。

**版本**  
 此字段表示数据库活动流数据协议或合同的版本。它定义了哪些字段可用。

**databaseActivityEvents**  
 表示一个或多个活动事件的加密字符串。它表示为 base64 字节数组。解密字符串时，结果是 JSON 格式的记录，其中包含字段，如本节中的示例所示。

**key**  
 用于加密 `databaseActivityEvents` 字符串的加密数据密钥。这与您在启动数据库活动流时提供的 Amazon KMS key 密钥相同。

 以下示例显示了此记录的格式。

```
{
  "type":"DatabaseActivityMonitoringRecords",
  "version":"1.3",
  "databaseActivityEvents":"encrypted audit records",
  "key":"encrypted key"
}
```

```
           "type":"DatabaseActivityMonitoringRecords",
           "version":"1.4",
           "databaseActivityEvents":"encrypted audit records",
           "key":"encrypted key"
```

执行以下步骤来解密 `databaseActivityEvents` 字段的内容：

1.  使用您在启动数据库活动流时提供的 KMS 密钥解密 `key` JSON 字段中的值。这样做将以明文形式返回数据加密密钥。

1.  对 `databaseActivityEvents` JSON 字段中的值进行 Base64 解码，以获取审核负载的二进制格式的密文。

1.  使用您在第一步中解码的数据加密密钥解密二进制密文。

1.  解压解已解密的负载。
   +  已加密的负载在 `databaseActivityEvents` 字段中。
   +  `databaseActivityEventList` 字段包含审核记录数组。此数组中的 `type` 字段可以是 `record` 或 `heartbeat`。

审核日志活动事件记录是包含以下信息的 JSON 对象。


****  

| JSON 字段 | 数据类型 | 描述 | 
| --- | --- | --- | 
|  `type`  | 字符串 |  JSON 记录的类型。值为 `DatabaseActivityMonitoringRecord`。  | 
| instanceId | 字符串 | 数据库实例资源标识符。它对应于数据库实例属性 DbiResourceId。 | 
|  [databaseActivityEventList JSON 数组](DBActivityStreams.AuditLog.databaseActivityEventList.md)   | 字符串 |  活动审核记录或检测信号消息的数组。  | 

# 数据库活动流的 databaseActivityEventList JSON 数组
<a name="DBActivityStreams.AuditLog.databaseActivityEventList"></a>

审核日志负载是解密的 `databaseActivityEventList` JSON 数组。以下表列表按字母顺序列出了审计日志的解密 `DatabaseActivityEventList` 数组中每个活动事件的字段。

如果在 Oracle 数据库中启用了统一审计，审计记录将填充在此新的审计跟踪中。`UNIFIED_AUDIT_TRAIL` 视图通过从审计跟踪中检索审计记录以表格形式显示审计记录。启动数据库活动流时，`UNIFIED_AUDIT_TRAIL` 中的一列映射到 `databaseActivityEventList` 数组中的一个字段。

**重要**  
事件结构可能会发生变化。Amazon RDS 可能会将新字段添加到未来的活动事件中。在解析 JSON 数据的应用程序中，请确保您的代码可以忽略未知字段名称或对其采取适当操作。

## Amazon RDS for Oracle 的 databaseActivityEventList 字段
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.ro"></a>

以下是 Amazon RDS for Oracle 的 `databaseActivityEventList` 字段。


| 字段 | 数据类型 | 源 | 描述 | 
| --- | --- | --- | --- | 
|  `class`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `AUDIT_TYPE` 列  |  活动事件的类。这对应于 `UNIFIED_AUDIT_TRAIL` 视图中的 `AUDIT_TYPE` 列。Amazon RDS for Oracle 的有效值如下： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html) 有关更多信息，请参阅 Oracle 文档中的 [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/UNIFIED_AUDIT_TRAIL.html#GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D)。  | 
|  `clientApplication`  |  字符串  |  `CLIENT_PROGRAM_NAME`中的`UNIFIED_AUDIT_TRAIL`  |  客户端报告的其用于连接的应用程序。由于客户端不必提供此信息，因此值可以为 null。示例值为 `JDBC Thin Client`。  | 
|  `command`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `ACTION_NAME` 列  |  用户执行的操作名称。要了解完整操作，请同时阅读命令名称和 `AUDIT_TYPE` 值。示例值为 `ALTER DATABASE`。  | 
|  `commandText`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `SQL_TEXT` 列  |  与事件关联的 SQL 语句。示例值为 `ALTER DATABASE BEGIN BACKUP`。  | 
|  `databaseName`  |  字符串  |  `V$DATABASE` 中的 `NAME` 列  |  数据库的名称。  | 
|  `dbid`  |  number  |  `UNIFIED_AUDIT_TRAIL` 中的 `DBID` 列  |  数据库的数字标识符。示例值为 `1559204751`。  | 
|  `dbProtocol`  |  字符串  |  不适用  |  数据库协议。在该测试版中，值为 `oracle`。  | 
|  `dbUserName`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `DBUSERNAME` 列  |  已审核其操作的数据库用户的名称。示例值为 `RDSADMIN`。  | 
|  `endTime`  |  字符串  |  不适用  |  此字段不用于 RDS for Oracle 且始终为 Null。  | 
|  `engineNativeAuditFields`  |  object  |  `UNIFIED_AUDIT_TRAIL`  |  默认情况下，此对象为空。当您使用 `--engine-native-audit-fields-included` 选项启动活动流时，此对象包括以下列及其值： <pre>ADDITIONAL_INFO<br />APPLICATION_CONTEXTS<br />AUDIT_OPTION<br />AUTHENTICATION_TYPE<br />CLIENT_IDENTIFIER<br />CURRENT_USER<br />DBLINK_INFO<br />DBPROXY_USERNAME<br />DIRECT_PATH_NUM_COLUMNS_LOADED<br />DP_BOOLEAN_PARAMETERS1<br />DP_TEXT_PARAMETERS1<br />DV_ACTION_CODE<br />DV_ACTION_NAME<br />DV_ACTION_OBJECT_NAME<br />DV_COMMENT<br />DV_EXTENDED_ACTION_CODE<br />DV_FACTOR_CONTEXT<br />DV_GRANTEE<br />DV_OBJECT_STATUS<br />DV_RETURN_CODE<br />DV_RULE_SET_NAME<br />ENTRY_ID<br />EXCLUDED_OBJECT<br />EXCLUDED_SCHEMA<br />EXCLUDED_USER<br />EXECUTION_ID<br />EXTERNAL_USERID<br />FGA_POLICY_NAME<br />GLOBAL_USERID<br />INSTANCE_ID<br />KSACL_SERVICE_NAME<br />KSACL_SOURCE_LOCATION<br />KSACL_USER_NAME<br />NEW_NAME<br />NEW_SCHEMA<br />OBJECT_EDITION<br />OBJECT_PRIVILEGES<br />OLS_GRANTEE<br />OLS_LABEL_COMPONENT_NAME<br />OLS_LABEL_COMPONENT_TYPE<br />OLS_MAX_READ_LABEL<br />OLS_MAX_WRITE_LABEL<br />OLS_MIN_WRITE_LABEL<br />OLS_NEW_VALUE<br />OLS_OLD_VALUE<br />OLS_PARENT_GROUP_NAME<br />OLS_POLICY_NAME<br />OLS_PRIVILEGES_GRANTED<br />OLS_PRIVILEGES_USED<br />OLS_PROGRAM_UNIT_NAME<br />OLS_STRING_LABEL<br />OS_USERNAME<br />PROTOCOL_ACTION_NAME<br />PROTOCOL_MESSAGE<br />PROTOCOL_RETURN_CODE<br />PROTOCOL_SESSION_ID<br />PROTOCOL_USERHOST<br />PROXY_SESSIONID<br />RLS_INFO<br />RMAN_DEVICE_TYPE<br />RMAN_OBJECT_TYPE<br />RMAN_OPERATION<br />RMAN_SESSION_RECID<br />RMAN_SESSION_STAMP<br />ROLE<br />SCN<br />SYSTEM_PRIVILEGE<br />SYSTEM_PRIVILEGE_USED<br />TARGET_USER<br />TERMINAL<br />UNIFIED_AUDIT_POLICIES<br />USERHOST<br />XS_CALLBACK_EVENT_TYPE<br />XS_COOKIE<br />XS_DATASEC_POLICY_NAME<br />XS_ENABLED_ROLE<br />XS_ENTITY_TYPE<br />XS_INACTIVITY_TIMEOUT<br />XS_NS_ATTRIBUTE<br />XS_NS_ATTRIBUTE_NEW_VAL<br />XS_NS_ATTRIBUTE_OLD_VAL<br />XS_NS_NAME<br />XS_PACKAGE_NAME<br />XS_PROCEDURE_NAME<br />XS_PROXY_USER_NAME<br />XS_SCHEMA_NAME<br />XS_SESSIONID<br />XS_TARGET_PRINCIPAL_NAME<br />XS_USER_NAME</pre> 有关更多信息，请参阅 Oracle 数据库文档中的 [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162)。  | 
|  `errorMessage`  |  字符串  |  不适用  |  此字段不用于 RDS for Oracle 且始终为 Null。  | 
|  `exitCode`  |  number  |  `UNIFIED_AUDIT_TRAIL` 中的 `RETURN_CODE` 列  |  操作生成的 Oracle 数据库错误代码。如果操作成功，则值为 `0`。  | 
|  `logTime`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `EVENT_TIMESTAMP_UTC` 列  |  创建审计跟踪条目的时间戳。示例值为 `2020-11-27 06:56:14.981404`。  | 
|  `netProtocol`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `AUTHENTICATION_TYPE` 列  |  网络通信协议。示例值为 `TCP`。  | 
|  `objectName`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `OBJECT_NAME` 列  |  受操作影响的对象名称。示例值为 `employees`。  | 
|  `objectType`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `OBJECT_SCHEMA` 列  |  受操作影响的对象架构名称。示例值为 `hr`。  | 
|  `paramList`  |  list  |  `UNIFIED_AUDIT_TRAIL` 中的 `SQL_BINDS` 列  |  与 `SQL_TEXT` 关联的绑定变量列表（如有）。示例值为 `parameter_1,parameter_2`。  | 
|  `pid`  |  number  |  `UNIFIED_AUDIT_TRAIL` 中的 `OS_PROCESS` 列  |  Oracle 数据库进程的操作系统进程标识符。示例值为 `22396`。  | 
|  `remoteHost`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `AUTHENTICATION_TYPE` 列  |  客户端 IP 地址或生成会话的主机的名称。示例值为 `123.456.789.123`。  | 
|  `remotePort`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `AUTHENTICATION_TYPE` 列  |  客户端的端口号。Oracle 数据库环境中的典型值是 `1521`。  | 
|  `rowCount`  |  number  |  不适用  |  此字段不用于 RDS for Oracle 且始终为 Null。  | 
|  `serverHost`  |  字符串  |  数据库主机  |  数据库服务器主机的 IP 地址。示例值为 `123.456.789.123`。  | 
|  `serverType`  |  字符串  |  不适用  |  数据库服务器类型。此值始终为 `ORACLE`。  | 
|  `serverVersion`  |  字符串  |  数据库主机  |  Amazon RDS for Oracle 版本、发布更新（RU）和版本更新修订（RUR）。示例值为 `19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3`。  | 
|  `serviceName`  |  字符串  |  数据库主机  |  服务的名称。示例值为 `oracle-ee`。  | 
|  `sessionId`  |  number  |  `UNIFIED_AUDIT_TRAIL` 中的 `SESSIONID` 列  |  审计的会话标识符。示例是 `1894327130`。  | 
|  `startTime`  |  字符串  |  不适用  |  此字段不用于 RDS for Oracle 且始终为 Null。  | 
|  `statementId`  |  number  |  `UNIFIED_AUDIT_TRAIL` 中的 `STATEMENT_ID` 列  |  每个语句运行的数字 ID。一个语句可能会导致多个操作。示例值为 `142197`。  | 
|  `substatementId`  |  不适用  |  不适用  |  此字段不用于 RDS for Oracle 且始终为 Null。  | 
|  `transactionId`  |  字符串  |  `UNIFIED_AUDIT_TRAIL` 中的 `TRANSACTION_ID` 列  |  在其中修改对象事务的标识符。示例值为 `02000800D5030000`。  | 

## Amazon RDS for SQL Server 的 databaseActivityEventList 字段
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.rss"></a>

以下是 Amazon RDS for SQL Server 的 `databaseActivityEventList` 字段。


| 字段 | 数据类型 | 源 | 描述 | 
| --- | --- | --- | --- | 
|  `class`  |  字符串  |  ` sys.fn_get_audit_file.class_type` 映射到 `sys.dm_audit_class_type_map.class_type_desc`  |  活动事件的类。有关更多信息，请参阅 Microsoft 文档中的 [SQL Server 审计（数据库引擎）](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16)。  | 
|  `clientApplication`  |  字符串  |  `sys.fn_get_audit_file.application_name`  |  客户端报告的客户端连接的应用程序（SQL Server 版本 14 及更高版本）。在 SQL Server 版本 13 中，此字段为空。  | 
|  `command`  |  字符串  |  `sys.fn_get_audit_file.action_id` 映射到 `sys.dm_audit_actions.name`  |  SQL 语句的常规类别。此字段的值取决于类的值。  | 
|  `commandText`  |  字符串  |  `sys.fn_get_audit_file.statement`  |  此字段指示 SQL 语句。  | 
|  `databaseName`  |  字符串  |  `sys.fn_get_audit_file.database_name`  |  数据库的名称。  | 
|  `dbProtocol`  |  字符串  |  不适用  |  数据库协议。该值为 `SQLSERVER`。  | 
|  `dbUserName`  |  字符串  |  `sys.fn_get_audit_file.server_principal_name`  |  客户端身份验证的数据库用户。  | 
|  `endTime`  |  字符串  |  不适用  |  Amazon RDS for SQL Server 未使用此字段，值为空。  | 
|  `engineNativeAuditFields`  |  object  |  `sys.fn_get_audit_file` 中此列未列出的每个字段。  |  默认情况下，此对象为空。当您使用 `--engine-native-audit-fields-included` 选项启动活动流时，此对象包括其他原生引擎审计字段，此 JSON 映射不返回这些字段。  | 
|  `errorMessage`  |  字符串  |  不适用  |  Amazon RDS for SQL Server 未使用此字段，值为空。  | 
|  `exitCode`  |  整数  |  `sys.fn_get_audit_file.succeeded`  |  表示启动事件的操作是否成功。此字段不能为空。对于除登录事件以外的所有事件，此字段报告权限检查是成功还是失败，但不报告操作是成功还是失败。 值包括： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html)  | 
|  `logTime`  |  字符串  |  `sys.fn_get_audit_file.event_time`  |  由 SQL Server 记录的事件时间戳。  | 
|  `netProtocol`  |  字符串  |  不适用  |  Amazon RDS for SQL Server 未使用此字段，值为空。  | 
|  `objectName`  |  字符串  |  `sys.fn_get_audit_file.object_name`  |  数据库对象的名称（如果正在对某个对象运行 SQL 语句）。  | 
|  `objectType`  |  字符串  |  `sys.fn_get_audit_file.class_type` 映射到 `sys.dm_audit_class_type_map.class_type_desc`  |  数据库对象类型（如果正在对某个对象类型运行 SQL 语句）。  | 
|  `paramList`  |  字符串  |  不适用  |  Amazon RDS for SQL Server 未使用此字段，值为空。  | 
|  `pid`  |  整数  |  不适用  |  Amazon RDS for SQL Server 未使用此字段，值为空。  | 
|  `remoteHost`  |  字符串  |  `sys.fn_get_audit_file.client_ip`  |  发出 SQL 语句的客户端的 IP 地址或主机名（SQL Server 版本 14 及更高版本）。在 SQL Server 版本 13 中，此字段为空。  | 
|  `remotePort`  |  整数  |  不适用  |  Amazon RDS for SQL Server 未使用此字段，值为空。  | 
|  `rowCount`  |  整数  |  `sys.fn_get_audit_file.affected_rows`  |  SQL 语句所影响的表行的数量（SQL Server 版本 14 及更高版本）。此字段位于 SQL Server 版本 13 中。  | 
|  `serverHost`  |  字符串  |  数据库主机  |  主机数据库服务器的 IP 地址。  | 
|  `serverType`  |  字符串  |  不适用  |  数据库服务器类型。值为 `SQLSERVER`。  | 
|  `serverVersion`  |  字符串  |  数据库主机  |  数据库服务器版本，例如，对于 SQL Server 2017，为 15.00.4073.23.v1.R1。  | 
|  `serviceName`  |  字符串  |  数据库主机  |  服务的名称。示例值为 `sqlserver-ee`。  | 
|  `sessionId`  |  整数  |  `sys.fn_get_audit_file.session_id`  |  会话的唯一标识符。  | 
|  `startTime`  |  字符串  |  不适用  |  Amazon RDS for SQL Server 未使用此字段，值为空。  | 
|  `statementId`  |  字符串  |  `sys.fn_get_audit_file.sequence_group_id`  |  客户端的 SQL 语句的唯一标识符。对于生成的每个事件，标识符都不同。示例值为 `0x38eaf4156267184094bb82071aaab644`。  | 
|  `substatementId`  |  整数  |  `sys.fn_get_audit_file.sequence_number`  |  用于确定语句的序列号的标识符。当大型记录拆分为多条记录时，此标识符会有所帮助。  | 
|  `transactionId`  |  整数  |  `sys.fn_get_audit_file.transaction_id`  |  事务的标识符。如果没有任何活动的事务，则该值为零。  | 
|  `type`  |  字符串  |  生成的数据库活动流  |  事件类型。值为 `record` 或 `heartbeat`。  | 

# 使用 Amazon 开发工具包处理数据库活动流
<a name="DBActivityStreams.CodeExample"></a>

您可以使用 Amazon 开发工具包以编程方式处理活动流。以下功能完善的 Java 和 Python 示例是关于使用数据库活动流记录实现基于实例的实施。

------
#### [ Java ]

```
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.zip.GZIPInputStream;

import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.encryptionsdk.AwsCrypto;
import com.amazonaws.encryptionsdk.CryptoInputStream;
import com.amazonaws.encryptionsdk.jce.JceMasterKey;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.InvalidStateException;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.ShutdownException;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.ThrottlingException;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessor;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorCheckpointer;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorFactory;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.InitialPositionInStream;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibConfiguration;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShutdownReason;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker.Builder;
import com.amazonaws.services.kinesis.model.Record;
import com.amazonaws.services.kms.AWSKMS;
import com.amazonaws.services.kms.AWSKMSClientBuilder;
import com.amazonaws.services.kms.model.DecryptRequest;
import com.amazonaws.services.kms.model.DecryptResult;
import com.amazonaws.util.Base64;
import com.amazonaws.util.IOUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class DemoConsumer {

    private static final String STREAM_NAME = "aws-rds-das-[instance-external-resource-id]"; // aws-rds-das-db-ABCD123456
    private static final String APPLICATION_NAME = "AnyApplication"; //unique application name for dynamo table generation that holds kinesis shard tracking
    private static final String AWS_ACCESS_KEY = "[AWS_ACCESS_KEY_TO_ACCESS_KINESIS]";
    private static final String AWS_SECRET_KEY = "[AWS_SECRET_KEY_TO_ACCESS_KINESIS]";
    private static final String RESOURCE_ID = "[external-resource-id]"; // db-ABCD123456
    private static final String REGION_NAME = "[region-name]"; //us-east-1, us-east-2...
    private static final BasicAWSCredentials CREDENTIALS = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);
    private static final AWSStaticCredentialsProvider CREDENTIALS_PROVIDER = new AWSStaticCredentialsProvider(CREDENTIALS);

    private static final AwsCrypto CRYPTO = new AwsCrypto();
    private static final AWSKMS KMS = AWSKMSClientBuilder.standard()
            .withRegion(REGION_NAME)
            .withCredentials(CREDENTIALS_PROVIDER).build();

    class Activity {
        String type;
        String version;
        String databaseActivityEvents;
        String key;
    }

    class ActivityEvent {
        @SerializedName("class") String _class;
        String clientApplication;
        String command;
        String commandText;
        String databaseName;
        String dbProtocol;
        String dbUserName;
        String endTime;
        String errorMessage;
        String exitCode;
        String logTime;
        String netProtocol;
        String objectName;
        String objectType;
        List<String> paramList;
        String pid;
        String remoteHost;
        String remotePort;
        String rowCount;
        String serverHost;
        String serverType;
        String serverVersion;
        String serviceName;
        String sessionId;
        String startTime;
        String statementId;
        String substatementId;
        String transactionId;
        String type;
    }

    class ActivityRecords {
        String type;
        String clusterId; // note that clusterId will contain an empty string on RDS Oracle and RDS SQL Server
        String instanceId;
        List<ActivityEvent> databaseActivityEventList;
    }

    static class RecordProcessorFactory implements IRecordProcessorFactory {
        @Override
        public IRecordProcessor createProcessor() {
            return new RecordProcessor();
        }
    }

    static class RecordProcessor implements IRecordProcessor {

        private static final long BACKOFF_TIME_IN_MILLIS = 3000L;
        private static final int PROCESSING_RETRIES_MAX = 10;
        private static final long CHECKPOINT_INTERVAL_MILLIS = 60000L;
        private static final Gson GSON = new GsonBuilder().serializeNulls().create();

        private static final Cipher CIPHER;
        static {
            Security.insertProviderAt(new BouncyCastleProvider(), 1);
            try {
                CIPHER = Cipher.getInstance("AES/GCM/NoPadding", "BC");
            } catch (NoSuchAlgorithmException | NoSuchPaddingException | NoSuchProviderException e) {
                throw new ExceptionInInitializerError(e);
            }
        }

        private long nextCheckpointTimeInMillis;

        @Override
        public void initialize(String shardId) {
        }

        @Override
        public void processRecords(final List<Record> records, final IRecordProcessorCheckpointer checkpointer) {
            for (final Record record : records) {
                processSingleBlob(record.getData());
            }

            if (System.currentTimeMillis() > nextCheckpointTimeInMillis) {
                checkpoint(checkpointer);
                nextCheckpointTimeInMillis = System.currentTimeMillis() + CHECKPOINT_INTERVAL_MILLIS;
            }
        }

        @Override
        public void shutdown(IRecordProcessorCheckpointer checkpointer, ShutdownReason reason) {
            if (reason == ShutdownReason.TERMINATE) {
                checkpoint(checkpointer);
            }
        }

        private void processSingleBlob(final ByteBuffer bytes) {
            try {
                // JSON $Activity
                final Activity activity = GSON.fromJson(new String(bytes.array(), StandardCharsets.UTF_8), Activity.class);

                // Base64.Decode
                final byte[] decoded = Base64.decode(activity.databaseActivityEvents);
                final byte[] decodedDataKey = Base64.decode(activity.key);

                Map<String, String> context = new HashMap<>();
                context.put("aws:rds:db-id", RESOURCE_ID);

                // Decrypt
                final DecryptRequest decryptRequest = new DecryptRequest()
                        .withCiphertextBlob(ByteBuffer.wrap(decodedDataKey)).withEncryptionContext(context);
                final DecryptResult decryptResult = KMS.decrypt(decryptRequest);
                final byte[] decrypted = decrypt(decoded, getByteArray(decryptResult.getPlaintext()));

                // GZip Decompress
                final byte[] decompressed = decompress(decrypted);
                // JSON $ActivityRecords
                final ActivityRecords activityRecords = GSON.fromJson(new String(decompressed, StandardCharsets.UTF_8), ActivityRecords.class);

                // Iterate throught $ActivityEvents
                for (final ActivityEvent event : activityRecords.databaseActivityEventList) {
                    System.out.println(GSON.toJson(event));
                }
            } catch (Exception e) {
                // Handle error.
                e.printStackTrace();
            }
        }

        private static byte[] decompress(final byte[] src) throws IOException {
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(src);
            GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream);
            return IOUtils.toByteArray(gzipInputStream);
        }

        private void checkpoint(IRecordProcessorCheckpointer checkpointer) {
            for (int i = 0; i < PROCESSING_RETRIES_MAX; i++) {
                try {
                    checkpointer.checkpoint();
                    break;
                } catch (ShutdownException se) {
                    // Ignore checkpoint if the processor instance has been shutdown (fail over).
                    System.out.println("Caught shutdown exception, skipping checkpoint." + se);
                    break;
                } catch (ThrottlingException e) {
                    // Backoff and re-attempt checkpoint upon transient failures
                    if (i >= (PROCESSING_RETRIES_MAX - 1)) {
                        System.out.println("Checkpoint failed after " + (i + 1) + "attempts." + e);
                        break;
                    } else {
                        System.out.println("Transient issue when checkpointing - attempt " + (i + 1) + " of " + PROCESSING_RETRIES_MAX + e);
                    }
                } catch (InvalidStateException e) {
                    // This indicates an issue with the DynamoDB table (check for table, provisioned IOPS).
                    System.out.println("Cannot save checkpoint to the DynamoDB table used by the Amazon Kinesis Client Library." + e);
                    break;
                }
                try {
                    Thread.sleep(BACKOFF_TIME_IN_MILLIS);
                } catch (InterruptedException e) {
                    System.out.println("Interrupted sleep" + e);
                }
            }
        }
    }

    private static byte[] decrypt(final byte[] decoded, final byte[] decodedDataKey) throws IOException {
        // Create a JCE master key provider using the random key and an AES-GCM encryption algorithm
        final JceMasterKey masterKey = JceMasterKey.getInstance(new SecretKeySpec(decodedDataKey, "AES"),
                "BC", "DataKey", "AES/GCM/NoPadding");
        try (final CryptoInputStream<JceMasterKey> decryptingStream = CRYPTO.createDecryptingStream(masterKey, new ByteArrayInputStream(decoded));
             final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            IOUtils.copy(decryptingStream, out);
            return out.toByteArray();
        }
    }

    public static void main(String[] args) throws Exception {
        final String workerId = InetAddress.getLocalHost().getCanonicalHostName() + ":" + UUID.randomUUID();
        final KinesisClientLibConfiguration kinesisClientLibConfiguration =
                new KinesisClientLibConfiguration(APPLICATION_NAME, STREAM_NAME, CREDENTIALS_PROVIDER, workerId);
        kinesisClientLibConfiguration.withInitialPositionInStream(InitialPositionInStream.LATEST);
        kinesisClientLibConfiguration.withRegionName(REGION_NAME);
        final Worker worker = new Builder()
                .recordProcessorFactory(new RecordProcessorFactory())
                .config(kinesisClientLibConfiguration)
                .build();

        System.out.printf("Running %s to process stream %s as worker %s...\n", APPLICATION_NAME, STREAM_NAME, workerId);

        try {
            worker.run();
        } catch (Throwable t) {
            System.err.println("Caught throwable while processing data.");
            t.printStackTrace();
            System.exit(1);
        }
        System.exit(0);
    }

    private static byte[] getByteArray(final ByteBuffer b) {
        byte[] byteArray = new byte[b.remaining()];
        b.get(byteArray);
        return byteArray;
    }
}
```

------
#### [ Python ]

```
import base64
import json
import zlib
import aws_encryption_sdk
from aws_encryption_sdk import CommitmentPolicy
from aws_encryption_sdk.internal.crypto import WrappingKey
from aws_encryption_sdk.key_providers.raw import RawMasterKeyProvider
from aws_encryption_sdk.identifiers import WrappingAlgorithm, EncryptionKeyType
import boto3

REGION_NAME = '<region>'                    # us-east-1
RESOURCE_ID = '<external-resource-id>'      # db-ABCD123456
STREAM_NAME = 'aws-rds-das-' + RESOURCE_ID  # aws-rds-das-db-ABCD123456

enc_client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT)

class MyRawMasterKeyProvider(RawMasterKeyProvider):
    provider_id = "BC"

    def __new__(cls, *args, **kwargs):
        obj = super(RawMasterKeyProvider, cls).__new__(cls)
        return obj

    def __init__(self, plain_key):
        RawMasterKeyProvider.__init__(self)
        self.wrapping_key = WrappingKey(wrapping_algorithm=WrappingAlgorithm.AES_256_GCM_IV12_TAG16_NO_PADDING,
                                        wrapping_key=plain_key, wrapping_key_type=EncryptionKeyType.SYMMETRIC)

    def _get_raw_key(self, key_id):
        return self.wrapping_key


def decrypt_payload(payload, data_key):
    my_key_provider = MyRawMasterKeyProvider(data_key)
    my_key_provider.add_master_key("DataKey")
    decrypted_plaintext, header = enc_client.decrypt(
        source=payload,
        materials_manager=aws_encryption_sdk.materials_managers.default.DefaultCryptoMaterialsManager(master_key_provider=my_key_provider))
    return decrypted_plaintext


def decrypt_decompress(payload, key):
    decrypted = decrypt_payload(payload, key)
    return zlib.decompress(decrypted, zlib.MAX_WBITS + 16)


def main():
    session = boto3.session.Session()
    kms = session.client('kms', region_name=REGION_NAME)
    kinesis = session.client('kinesis', region_name=REGION_NAME)

    response = kinesis.describe_stream(StreamName=STREAM_NAME)
    shard_iters = []
    for shard in response['StreamDescription']['Shards']:
        shard_iter_response = kinesis.get_shard_iterator(StreamName=STREAM_NAME, ShardId=shard['ShardId'],
                                                         ShardIteratorType='LATEST')
        shard_iters.append(shard_iter_response['ShardIterator'])

    while len(shard_iters) > 0:
        next_shard_iters = []
        for shard_iter in shard_iters:
            response = kinesis.get_records(ShardIterator=shard_iter, Limit=10000)
            for record in response['Records']:
                record_data = record['Data']
                record_data = json.loads(record_data)
                payload_decoded = base64.b64decode(record_data['databaseActivityEvents'])
                data_key_decoded = base64.b64decode(record_data['key'])
                data_key_decrypt_result = kms.decrypt(CiphertextBlob=data_key_decoded,
                                                      EncryptionContext={'aws:rds:db-id': RESOURCE_ID})
                print (decrypt_decompress(payload_decoded, data_key_decrypt_result['Plaintext']))
            if 'NextShardIterator' in response:
                next_shard_iters.append(response['NextShardIterator'])
        shard_iters = next_shard_iters


if __name__ == '__main__':
    main()
```

------

# 数据库活动流的 IAM 策略示例
<a name="DBActivityStreams.ManagingAccess"></a>

具有数据库活动流的相应 Amazon Identity and Access Management（IAM）角色权限的任何用户均可以创建、启动、停止和修改数据库实例的活动流设置。这些操作包含在流的审核日志中。对于最佳合规性实践，我们建议您不要向 DBA 提供这些权限。

您可以使用 IAM 策略设置对数据库活动流的访问权限。有关 Amazon RDS 身份验证的更多信息，请参阅[Amazon RDS 的 Identity and Access Management](UsingWithRDS.IAM.md)。有关创建 IAM 策略的更多信息，请参阅 [创建和使用适用于 IAM 数据库访问的 IAM 策略](UsingWithRDS.IAMDBAuth.IAMPolicy.md)。

**Example 允许配置数据库活动流的策略**  
要为用户提供精细访问权限以修改活动流，请在 IAM 策略中使用服务特定的操作上下文密钥 `rds:StartActivityStream` 和 `rds:StopActivityStream`。以下 IAM 策略示例允许用户或角色配置活动流。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ConfigureActivityStreams",
            "Effect": "Allow",
            "Action": [
                "rds:StartActivityStream",
                "rds:StopActivityStream"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example 允许启动数据库活动流的策略**  
以下 IAM 策略示例允许用户或角色启动活动流。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowStartActivityStreams",
            "Effect":"Allow",
            "Action":"rds:StartActivityStream",
            "Resource":"*"
        }
    ]
}
```

**Example 允许停止数据库活动流的策略**  
以下 IAM 策略示例允许用户或角色停止活动流。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowStopActivityStreams",
            "Effect":"Allow",
            "Action":"rds:StopActivityStream",
            "Resource":"*"
        }
     ]
}
```

**Example 拒绝启动数据库活动流的策略**  
以下 IAM 策略示例阻止用户或角色启动活动流。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"DenyStartActivityStreams",
            "Effect":"Deny",
            "Action":"rds:StartActivityStream",
            "Resource":"*"
        }
     ]
}
```

**Example 拒绝停止数据库活动流的策略**  
以下 IAM 策略示例阻止用户或角色停止活动流。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"DenyStopActivityStreams",
            "Effect":"Deny",
            "Action":"rds:StopActivityStream",
            "Resource":"*"
        }
    ]
}
```

# 使用 Amazon GuardDuty RDS 保护功能监控威胁
<a name="guard-duty-rds-protection"></a>

Amazon GuardDuty 是一项威胁检测服务，可帮助保护您的账户、容器、工作负载和 Amazon 环境中的数据。GuardDuty 使用机器学习（ML）模型以及异常和威胁检测功能，持续监控不同的日志源和运行时活动，以识别环境中的潜在安全风险和恶意活动并确定其优先级。

GuardDuty RDS 保护功能会分析和剖析登录事件，找出对 Amazon RDS 数据库的潜在访问威胁。当您开启 RDS 保护功能时，GuardDuty 会监控来自 RDS 数据库的 RDS 登录事件。RDS 保护功能会监控这些事件并对其进行剖析，以了解潜在的内部威胁或外部行为者。

有关启用 GuardDuty RDS 保护功能的更多信息，请参阅《Amazon GuardDuty 用户指南》**中的 [GuardDuty RDS 保护](https://docs.amazonaws.cn/guardduty/latest/ug/rds-protection.html)。

当 RDS 保护功能检测到潜在威胁（例如成功或失败的登录尝试中的异常模式）时，GuardDuty 会生成新的调查结果，其中包含有关可能受损数据库的详细信息。您可以在 Amazon GuardDuty 控制台的调查发现摘要部分查看调查发现的详细信息。调查发现详细信息因调查发现类型而异。主要详细信息、资源类型和资源角色决定了任何调查发现中可用的信息类型。有关调查发现的常见详细信息和调查发现类型的更多信息，请分别参阅《Amazon GuardDuty 用户指南》**中的[调查发现详细信息](https://docs.amazonaws.cn/guardduty/latest/ug/guardduty_findings-summary.html)和 [GuardDuty RDS 保护调查发现类型](https://docs.amazonaws.cn/guardduty/latest/ug/findings-rds-protection.html)。

您可以在提供 RDS 保护功能的任何 Amazon Web Services 区域，为任何 Amazon Web Services 账户开启或关闭此功能。未启用 RDS 保护功能时，GuardDuty 不会检测可能受损的 RDS 数据库，也不会提供受损的详细信息。

现有 GuardDuty 账户可以启用 RDS 保护功能，试用期为 30 天。对于新的 GuardDuty 账户，RDS 保护功能已启用，并包含在 30 天免费试用期中。有关更多信息，请参阅《Amazon GuardDuty 用户指南》**中的[估计 GuardDuty 成本](https://docs.amazonaws.cn/guardduty/latest/ug/monitoring_costs.html)。

有关 GuardDuty 尚不支持 RDS 保护功能的 Amazon Web Services 区域的信息，请参阅《Amazon GuardDuty User Guide》**中的 [Region-specific feature availability](https://docs.amazonaws.cn/guardduty/latest/ug/guardduty_regions.html#gd-regional-feature-availability)。

有关 GuardDuty RDS 保护支持的 RDS 数据库版本的信息，请参阅《Amazon GuardDuty User Guide》**中的 [Supported Amazon Aurora, Amazon RDS, and Aurora Limitless databases](https://docs.amazonaws.cn/guardduty/latest/ug/rds-protection.html#rds-pro-supported-db)。