监控 AWS DMS 任务 - AWS 数据库迁移服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

监控 AWS DMS 任务

监控是保持 AWS DMS 和您的 AWS 解决方案的可靠性、可用性和性能的重要方面。您应该从 AWS 解决方案的各个部分收集监控数据,以便您可以更轻松地调试多点故障(如果发生)。AWS 提供了多种工具来监控您的 AWS DMS 任务和资源并对潜在事件做出响应。

AWS DMS 事件和通知

AWS DMS 使用 Amazon Simple Notification Service (Amazon SNS) 在发生 AWS DMS 事件时提供通知,例如,创建或删除复制实例。AWS DMS 将事件分组为各个类别,您可以订阅这些类别以便在发生该类别中的事件时收到通知。例如,如果您订阅了指定复制实例的“创建”类别,则只要发生了与创建相关的事件影响到您的复制实例,您就会收到通知。您可以通过 AWS 区域的 Amazon SNS 支持的任何形式使用这些通知,如电子邮件、短信或者调用 HTTP 端点。有关更多信息,请参阅在 AWS Database Migration Service 中使用 Amazon SNS 事件和通知

任务状态

您可以查看任务状态和监控任务的控制表,以便监控任务的进度。任务状态指示 AWS DMS 任务及其关联资源的状况。它包含此类指示,如同正在创建、启动、运行或停止任务一样。此外,它还包含任务正在迁移的表的当前状态,例如,表已开始或正在进行完全加载时,并包含表已执行的插入、删除和更新次数等详细信息。有关监控任务和任务资源条件的更多信息,请参阅 任务状态任务期间的表状态。有关控制表的更多信息,请参阅控制表任务设置

Amazon CloudWatch 警报和日志

使用 Amazon CloudWatch 警报,您可以监控指定时间段内的一个或多个任务指标。如果指标超过给定阈值,则会向 Amazon SNS 主题发送通知。CloudWatch 警报将不会调用操作,因为这些操作处于特定状态。而是必须在状态已改变并在指定的若干个时间段内保持不变后才调用。AWS DMS 还使用 CloudWatch 在迁移过程中记录任务信息。您可以使用 AWS CLI 或 AWS DMS API 查看有关任务日志的信息。有关将 CloudWatch 与 AWS DMS 搭配使用的更多信息,请参阅使用 Amazon CloudWatch 监控复制任务。有关监控 AWS DMS 指标的更多信息,请参阅AWS Database Migration Service 指标。有关使用 AWS DMS 任务日志的更多信息,请参阅 查看和管理 AWS DMS 任务日志

Time Travel 日志

要记录和调试复制任务,可以使用 AWS DMS Time Travel。在此方法中,您可以使用 Amazon S3 来存储日志,并使用加密密钥对其进行加密。您可以使用日期时间筛选器检索 S3 日志,然后根据需要查看、下载日志以及对日志进行模糊处理。由此,您可以安全地“回到过去”来调查数据库活动。

您可以将 Time Travel 与 DMS 支持的 PostgreSQL 源端点以及 DMS 支持的 PostgreSQL 和 MySQL 目标端点配合使用。您只能为完全加载和 CDC 任务以及仅 CDC 任务启用 Time Travel。要打开 Time Travel 或修改任何现有的 Time Travel 设置,请确保您的任务已停止。

有关 Time Travel 日志的更多信息,请参阅Time Travel 任务设置。有关使用 Time Travel 日志的最佳实践,请参阅使用 Time Travel 对复制任务进行故障排除

AWS CloudTrail 日志

AWS DMS 与 AWS CloudTrail 集成,后者是一项服务,可用于记录 AWS DMS 中由用户、IAM 角色或 AWS 服务所执行的操作。CloudTrail 将对 AWS DMS 的所有 API 调用均作为事件捕获,包括来自 AWS DMS 控制台的调用和对 AWS DMS API 操作的代码调用。如果您创建跟踪记录,则可以使 CloudTrail 事件持续传送到 Amazon S3 存储桶(包括 AWS DMS 的事件)。如果您不配置跟踪记录,则仍可在 CloudTrail 控制台中的 Event history(事件历史记录)中查看最新事件。使用 CloudTrail 收集的信息,您可以确定向 AWS DMS 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。有关更多信息,请参阅使用 AWS DMS 记录 AWS CloudTrail API 调用

数据库日志

您可以使用 AWS 数据库服务的 AWS Management Console、AWS CLI 或 API 查看、下载和监控任务终端节点的数据库日志。有关更多信息,请参阅 AWS 文档中的数据库服务文档。

有关更多信息,请参阅以下主题。

任务状态

任务状态指示任务的情况。下表显示了任务可能具有的状态:

任务状态 描述

Creating

AWS DMS 在创建任务。

正在运行

任务正在执行指定的迁移工作。

Stopped

任务已停止。

Stopping

正在停止任务。这通常表明任务中有用户干预。

Deleting

正在删除任务,通常源于用户的干预请求。

Failed

任务已失败。有关更多信息,请参阅任务日志文件。

Error

任务因错误而停止。在概述选项卡的最后一条失败消息部分中,提供了任务错误的简要描述。

运行时出错

任务正在运行,状态为出错。这通常表示任务中的一个或多个表无法迁移。该任务继续根据选择规则加载其他表。

Starting

任务正在连接到复制实例以及源和目标终端节点。应用所有筛选器和转换。

Ready (就绪)

任务已准备好运行。此状态通常在“creating”状态之后。

Modifying

正在修改任务,通常是由于修改了任务设置的用户操作造成。

正在移动

任务正在移动到另一个复制实例。复制将保持此状态,直到移动完成。复制任务正在移动时,唯一允许执行的操作是删除任务。

失败的移动

任务移动由于任何原因而失败,例如目标复制实例上没有足够的存储空间。当复制任务处于这种状态时,可以启动、修改、移动或删除该任务。

测试

为此任务指定的数据库迁移正在进行测试,以响应 StartReplicationTaskAssessmentRunStartReplicationTaskAssessment 操作的运行。

任务状态栏提供了任务进度的估计值。此估计值的质量取决于源数据库的表统计数据的质量;表统计数据的质量越好,估计值就越准确。对于只有一个表而且该表没有估算行统计数据的任务,我们无法提供任何类型的完成百分比估算值。在此情况下,可使用任务状态和加载行的指示来确认任务是否确实在运行且取得进展。

请注意,对于“上次更新时间”列,DMS 控制台仅指示 AWS DMS 上次更新表的表统计数据记录的时间。它不指示上次更新表的时间。

除了使用 DMS 控制台外,您还可以使用 AWS CLI 中的 aws dms describe-replication-tasks 命令,输出当前复制任务的描述,包括任务状态,如以下示例所示。

{ "ReplicationTasks": [ { "ReplicationTaskIdentifier": "moveit2", "SourceEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:6GGI6YPWWGAYUVLKIB732KEVWA", "TargetEndpointArn": "arn:aws:dms:us-east-1:123456789012:endpoint:EOM4SFKCZEYHZBFGAGZT3QEC5U", "ReplicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:T3OM7OUB5NM2LCVZF7JPGJRNUE", "MigrationType": "full-load", "TableMappings": ...output omitted... , "ReplicationTaskSettings": ...output omitted... , "Status": "stopped", "StopReason": "Stop Reason FULL_LOAD_ONLY_FINISHED", "ReplicationTaskCreationDate": 1590524772.505, "ReplicationTaskStartDate": 1590619805.212, "ReplicationTaskArn": "arn:aws:dms:us-east-1:123456789012:task:K55IUCGBASJS5VHZJIINA45FII", "ReplicationTaskStats": { "FullLoadProgressPercent": 100, "ElapsedTimeMillis": 0, "TablesLoaded": 0, "TablesLoading": 0, "TablesQueued": 0, "TablesErrored": 0, "FreshStartDate": 1590619811.528, "StartDate": 1590619811.528, "StopDate": 1590619842.068 } } ] }

任务期间的表状态

AWS DMS 控制台更新表在迁移期间相关状态的信息。下表显示了可能的状态值:


             AWS Database Migration Service 复制实例
状态 描述

表不存在

AWS DMS 在源端点上找不到表。

加载前

完全加载过程已启用,但尚未启动。

完全加载

完全加载过程正在进行。

表已完成

完全加载已完成。

表已取消

已取消加载表。

表错误

加载表时出错。

使用 Amazon CloudWatch 监控复制任务

您可以使用 Amazon CloudWatch 警报或事件,以便更密切地跟踪您的迁移。有关 Amazon CloudWatch 的更多信息,请参阅《Amazon CloudWatch 用户指南》中的什么是 Amazon CloudWatch、Amazon CloudWatch Events 和 Amazon CloudWatch Logs?。请注意,在使用 Amazon CloudWatch 时,需要支付相应的费用。

如果您的复制任务未创建 CloudWatch 日志,请参阅故障排除指南中的AWS DMS不创建 CloudWatch 日志

AWS DMS 控制台显示了每个任务的基本 CloudWatch 统计信息,例如:任务状态、完成百分比、已用时间、表统计信息等,如下所示。选择复制任务,然后选择 CloudWatch 指标选项卡。

要查看和修改 CloudWatch 任务日志设置,请选择修改任务日志记录。有关更多信息,请参阅日志记录任务设置


            AWS DMS 监控

当您选择表统计数据选项卡时,AWS DMS 控制台显示每个表的性能统计数据,包括插入数、删除数和更新数。


            AWS DMS 监控

此外,如果您从复制实例页面中选择一个复制实例,则可以通过选择 CloudWatch 指标选项卡来查看该实例的性能指标。


            AWS DMS 监控

AWS Database Migration Service 指标

AWS DMS 提供以下指标的统计数据:

  • 主机指标 – 复制主机的性能和利用率统计数据,由 Amazon CloudWatch 提供。有关可用指标的完整列表,请参阅复制实例指标

  • 复制任务指标 – 复制任务的统计数据,包括传入和已提交更改,以及复制主机与源数据库和目标数据库之间的延迟。有关可用指标的完整列表,请参阅复制任务指标

  • 表指标 – 迁移过程中的表的统计数据,包括插入数、更新数、删除数和完成的 DDL 语句。

任务指标划分为复制主机与源终端节点之间的统计数据,以及复制主机与目标终端节点之间的统计数据。您可以将两个相关的统计数据加在一起,确定某个任务的统计数据总计。例如,您可以合并 CDCLatencySourceCDCLatencyTarget 值以确定总延迟时间或副本滞后。

任务指标值受您源数据库上当前活动的影响。例如,如果事务已开始但尚未提交,CDCLatencySource 指标将继续增长,直至提交该事务。

对于复制实例,需要澄清一下 FreeableMemory 指标。FreeableMemory 并不指示实际的可用内存。它是当前使用的可释放内存 (以用于其他用途);它是复制实例上使用的缓冲区和缓存的组合。

虽然 FreeableMemory 指标不反映实际的可用内存,但 FreeableMemorySwapUsage 指标组合可以指示复制实例是否过载。

请监控这两个指标是否出现以下情况:

  • FreeableMemory 指标接近于零。

  • SwapUsage 指标增加或发生波动。

如果出现上述任一情况,则表示应考虑移动到更大的复制实例。还应考虑减少在复制实例上运行的任务数量和类型。完全加载任务所需的内存比仅复制更改的任务需要的内存多。

要粗略估计 AWS DMS 迁移任务的实际内存需求,您可以使用以下参数。

LOB 列

迁移范围内每个表中平均的 LOB 列数。

可并行加载的表数量上限

AWS DMS 在一个任务中并行加载的最大表数量。

默认值是 8。

LOB 块大小

AWS DMS 将数据复制到目标数据库时使用的 LOB 块大小,以 KB 为单位。

完全加载时的提交率

AWS DMS 可并行传输的最大记录数。

默认值是 10000。

LOB 大小

单个 LOB 的最大大小,以 KB 为单位。

批量数组大小

端点驱动程序提取或处理的最大行数。此值取决于驱动程序设置。

默认值是 1,000。

确定这些值后,您可以使用以下方法之一来估算迁移任务所需的内存量。这些方法取决于您在迁移任务中为 LOB 列设置选择的选项。

  • 对于完整 LOB 模式,请使用以下公式。

    Required memory = (LOB columns) * (Maximum number of tables to load in parallel) * (LOB chunk size) * (Commit rate during full load)

    举一个例子,您的源表平均包含 2 个 LOB 列,而 LOB 块的大小为 64 KB。如果您使用 Maximum number of tables to load in parallelCommit rate during full load 的默认值,则任务所需的内存量如下所示。

    Required memory = 2 * 8 * 64 * 10,000 = 10,240,000 KB

    注意

    要降低完全加载时的提交率的值,请打开 AWS DMS 控制台,选择数据库迁移任务,然后创建或修改任务。展开高级设置,然后输入完全加载时的提交率的值。

  • 对于受限 LOB 模式,请使用以下公式。

    Required memory = (LOB columns) * (Maximum number of tables to load in parallel) * (LOB size) * (Bulk array size)

    举一个例子,您的源表平均包含 2 个 LOB 列,而单个 LOB 的最大大小为 4096 KB。如果您使用 Maximum number of tables to load in parallelBulk array size 的默认值,则任务所需的内存量如下所示。

    Required memory = 2 * 8 * 4,096 * 1,000 = 65,536,000 KB

要让 AWS DMS 以最佳性能执行转换,进行转换时必须有 CPU 可用。CPU 过载和没有足够的 CPU 资源可能会导致迁移速度缓慢。AWS DMS 可能是 CPU 密集型任务,尤其是在执行异构迁移和复制(例如从 Oracle 迁移到 PostgreSQL)时。对于这些情况,C4 复制实例类是理想选择。有关更多信息,请参阅为您的迁移选择正确的 AWS DMS 复制实例

复制实例指标

复制实例监控包括针对以下统计数据的 Amazon CloudWatch 指标。

指标

描述

AvailableMemory

估计可用于启动新应用程序的内存量(没有交换)。有关更多信息,请参阅 Linux man-pages/proc/memInfo 一节中的 MemAvailable 值。

单位:字节

CPUAllocated

为任务分配的 CPU 最大百分比(0 表示没有限制)。

AWS DMS 根据 CloudWatch 控制台中 ReplicationTaskIdentifierReplicationInstanceIdentifer 维度的组合提出这个指标。使用 ReplicationInstanceIdentifier, ReplicationTaskIdentifier 类别查看此指标。

单位:百分比

CPU 利用率

当前实例上正在使用的已分配 vCPU(虚拟 CPU)的百分比。

单位:百分比

DiskQueueDepth

等待访问磁盘的未完成 I/O(读取/写入请求)的数量。

单位:计数

可用存储空间

可用存储空间的大小。

单位:字节

FreeMemory

可供应用程序、页面缓存和内核自身数据结构使用的物理内存量。有关更多信息,请参阅 Linux man-pages/proc/memInfo 一节中的 MemFree 值。

单位:字节

FreeableMemory

随机存取内存的可用大小。

单位:字节

MemoryAllocated

为任务分配的最大内存量(0 表示没有限制)。

AWS DMS 根据 CloudWatch 控制台中 ReplicationTaskIdentifierReplicationInstanceIdentifer 维度的组合提出这个指标。使用 ReplicationInstanceIdentifier, ReplicationTaskIdentifier 类别查看此指标。

单位:MiB

写入 IOPS

每秒平均磁盘写入 I/O 操作数。

单位:计数/秒

读取 IOPS

每秒平均磁盘读取 I/O 操作数。

单位:计数/秒

写入吞吐量

每秒写入磁盘的平均字节数。

单位:字节/秒

读取吞吐量

每秒从磁盘读取的平均字节数。

单位:字节/秒

WriteLatency

每个磁盘 I/O(输出)操作所需的平均时间。

单位:毫秒

ReadLatency

每个磁盘 I/O(输入)操作所需的平均时间。

单位:毫秒

SwapUsage

复制实例上使用的交换空间的大小。

单位:字节

NetworkTransmitThroughput

复制实例的传出(传输)网络流量,包括客户数据库流量以及用于监控和复制的 AWS DMS 流量。

单位:字节/秒

NetworkReceiveThroughput

复制实例的传入(接收)网络流量,包括客户数据库流量以及用于监控和复制的 AWS DMS 流量。

单位:字节/秒

复制任务指标

复制任务监控包括针对以下统计数据的指标。

指标

描述

FullLoadThroughputBandwidthTarget

目标在满负载情况下的传出数据传输速率,以每秒 KB 数为单位。

FullLoadThroughputRowsTarget

目标上的完全加载的传出更改,以行/秒为单位。

CDCIncomingChanges

在某个时间点等待应用于目标的总更改事件数。请注意,这与源终端节点的事务更改速率指标不同。对于该指标,较大的值通常表示 AWS DMS 无法及时应用捕获的更改,从而导致较高的目标延迟。

CDCChangesMemorySource

内存中累积并等待从源提交的行数。您可以将此指标与 CDCChangesDiskSource 一起查看。

CDCChangesMemoryTarget

内存中累积并等待提交到目标的行数。您可以将此指标与 CDCChangesDiskTarget 一起查看。

CDCChangesDiskSource

磁盘上累积并等待从源提交的行数。您可以将此指标与 CDCChangesMemorySource 一起查看。

CDCChangesDiskTarget

磁盘上累积并等待提交到目标的行数。您可以将此指标与 CDCChangesMemoryTarget 一起查看。

CDCThroughputBandwidthTarget

目标的传出数据传输速率,以每秒 KB 数为单位。CDCThroughputBandwidth 记录在采样点上传输的传出数据。如果未找到任务网络流量,则该值为零。由于 CDC 不发布长时间运行的事务,可能不会记录网络流量。

CDCThroughputRowsSource

源的传入任务更改,以行/秒为单位。

CDCThroughputRowsTarget

目标的传出任务更改,以行/秒为单位。

CDCLatencySource

从源端点中捕获的最后一个事件与 AWS DMS 实例的当前系统时间戳之间的间隔(秒)。CDCLatencySource 表示源实例和复制实例之间的延迟。高 CDCLatencySource 意味着从源捕获更改的过程会延迟。要确定正在进行的复制中的延迟,您可以将此指标与 CDCLatencyTarget 一起查看。如果 CDCLatencySource 和 CDCLatencyTarget 都很高,请先调查 CDCLatencySource。

当源和复制实例之间没有复制延迟时,CDCSourceLatency 可以为 0。当复制任务尝试读取源事务日志中的下一个事件,并且与上次读取源相比没有新事件时,CDCSourceLatency 也可能变为零。出现这种情况时,任务会将 CDCSourceLatency 重置为 0。

CDCLatencyTarget

在目标上等待提交的第一个事件时间戳与 AWS DMS 实例的当前系统时间戳之间的间隔(秒)。目标延迟是复制实例服务器时间,与转发到目标组件的最早未经确认的事件 ID 时间之间的差异。换句话说,目标延迟是复制实例的时间戳,与已应用但未经 TRG 端点确认的最早事件之间的时间戳之差 (99%)。当 CDCLatencyTarget 很高时,它表示将更改事件应用于目标的过程已延迟。要确定正在进行的复制中的延迟,您可以将此指标与 CDCLatencySource 一起查看。如果 CDCLatencyTarget 很高但是 CDCLatencySource 不高,请调查是否:

  • 目标中没有主键或索引

  • 目标实例或复制实例中出现资源瓶颈

  • 复制实例和目标之间存在网络问题

CPU 利用率

任务在多个内核上使用的 CPU 百分比。任务 CPUUtilization 的语义与复制 CPUUtilizaiton 的语义略有不同。如果 1 个 vCPU 已完全使用,则表示 100%;但如果有多个 vCPU 在使用中,则值可能高于 100%。

单位:百分比

SwapUsage

任务使用的交换区数量。

单位:字节

MemoryUsage

任务使用的控制组 (cgroup) memory.usage_in_bytes。DMS 使用 cgroup 来控制内存和 CPU 等系统资源的使用。该指标表示在为任务分配的 cgroup 中,该任务的内存使用量,以 MB 为单位。cgroup 限制基于可供您 DMS 复制实例类使用的资源。memory.usage_in_bytes 由驻留集大小 (RSS)、缓存和内存的交换组件组成。如果需要,操作系统可以回收缓存。我们建议您同时监控复制实例指标 AvailableMemory

AWS DMS 根据 CloudWatch 控制台中 ReplicationTaskIdentifierReplicationInstanceIdentifer 维度的组合提出这个指标。使用 ReplicationInstanceIdentifier, ReplicationTaskIdentifier 类别查看此指标。

查看和管理 AWS DMS 任务日志

在 AWS DMS 迁移过程中,您可以使用 Amazon CloudWatch 记录任务信息。您可以在选择任务设置时启用日志记录。有关更多信息,请参阅日志记录任务设置

要查看运行的任务的日志,请按照下列步骤操作:

  1. 打开 AWS DMS 控制台,然后从导航窗格中选择数据库迁移任务。此时将显示“数据库迁移任务”对话框。

  2. 选择角色的名称。此时将显示“概述详细信息”对话框。

  3. 找到迁移任务日志部分,然后选择查看 CloudWatch 日志

此外,您可以使用 AWS CLI 或 AWS DMS API 查看有关任务日志的信息。为此,请使用 describe-replication-instance-task-logs AWS CLI 命令或 AWS DMS API 操作 DescribeReplicationInstanceTaskLogs

例如,以下 AWS CLI 命令显示采用 JSON 格式的任务日志元数据。

$ aws dms describe-replication-instance-task-logs \ --replication-instance-arn arn:aws:dms:us-east-1:237565436:rep:CDSFSFSFFFSSUFCAY

命令中的示例响应如下所示。

{ "ReplicationInstanceTaskLogs": [ { "ReplicationTaskArn": "arn:aws:dms:us-east-1:237565436:task:MY34U6Z4MSY52GRTIX3O4AY", "ReplicationTaskName": "mysql-to-ddb", "ReplicationInstanceTaskLogSize": 3726134 } ], "ReplicationInstanceArn": "arn:aws:dms:us-east-1:237565436:rep:CDSFSFSFFFSSUFCAY" }

在此响应中,只有一个与复制实例关联的任务日志 (mysql-to-ddb)。此日志的大小为 3,726,124 字节。

您可以使用由 describe-replication-instance-task-logs 返回的信息来诊断和排查任务日志的问题。例如,如果您对任务启用详细的调试日志记录,则任务日志将快速增大,可能会消耗复制实例上的所有可用存储空间,并且导致实例状态更改为 storage-full。通过描述任务日志,您可以确定不再需要的日志;然后可以将其删除,从而释放存储空间。

要删除任务的任务日志,请将任务设置 DeleteTaskLogs 设置为 true。例如,以下 JSON 使用 AWS CLI modify-replication-task 命令或 AWS DMS API ModifyReplicationTask 操作在修改任务时删除任务日志。

{ "Logging": { "DeleteTaskLogs":true } }

使用 AWS DMS 记录 AWS CloudTrail API 调用

AWS DMS 与 AWS CloudTrail 集成,后者是在 AWS 中记录用户、角色或 AWS DMS 服务所执行操作的服务。CloudTrail 将对 AWS DMS 的所有 API 调用均作为事件捕获,包括来自 AWS DMS 控制台的调用和对 AWS DMS API 操作的代码调用。如果您创建跟踪记录,则可以使 CloudTrail 事件持续传送到 Amazon S3 存储桶(包括 AWS DMS 的事件)。如果您不配置跟踪记录,则仍可在 CloudTrail 控制台中的 Event history(事件历史记录)中查看最新事件。使用 CloudTrail 收集的信息,您可以确定向 AWS DMS 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。

要了解有关 CloudTrail 的更多信息,请参阅《AWS CloudTrail 用户指南》。

CloudTrail 中的 AWS DMS 信息

在您创建 AWS 账户时,将在该账户上启用 CloudTrail。当 AWS DMS 中发生活动时,该活动将记录在 CloudTrail 事件中,并与其他 AWS 服务事件一同保存在 Event history (事件历史记录) 中。您可以在 AWS 账户中查看、搜索和下载最新事件。有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件

要持续记录 AWS 账户中的事件(包括 AWS DMS 的事件),请创建跟踪。通过跟踪记录,CloudTrail 可将日志文件传送至 Amazon S3 存储桶。预设情况下,在控制台中创建跟踪时,此跟踪应用于所有 AWS 区域。此跟踪记录来自 AWS 分区中的所有 AWS 区域的事件,并将日志文件传送至您指定的 Amazon S3 存储桶。此外,您可以配置其他AWS服务,进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息,请参阅:

CloudTrail 记录所有 AWS DMS 操作,AWS Database Migration Service API 参考中介绍了这些操作。例如,对 CreateReplicationInstanceTestConnectionStartReplicationTask 操作的调用会在 CloudTrail 日志文件中生成条目。

每个事件或日志条目都包含有关生成请求的人员信息。身份信息可帮助您确定以下内容:

  • 请求是使用根用户凭证还是 IAM 用户凭证发出的。

  • 请求是使用角色还是联合身份用户的临时安全凭证发出的。

  • 请求是否由其它 AWS 服务发出。

有关更多信息,请参阅 CloudTrail userIdentity 元素

了解 AWS DMS 日志文件条目

跟踪是一种配置,可用于将事件作为日志文件传送到您指定的 Amazon S3 桶。CloudTrail 日志文件包含一个或多个日志条目。一个事件表示来自任何源的一个请求,包括有关请求的操作、操作的日期和时间、请求参数等方面的信息。CloudTrail 日志文件不是公用 API 调用的有序堆栈跟踪,因此它们不会按任何特定顺序显示。

下面的示例显示了一个 CloudTrail 日志条目,该条目说明了 RebootReplicationInstance 操作。

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AKIAIOSFODNN7EXAMPLE:johndoe", "arn": "arn:aws:sts::123456789012:assumed-role/admin/johndoe", "accountId": "123456789012", "accessKeyId": "ASIAYFI33SINADOJJEZW", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-08-01T16:42:09Z" }, "sessionIssuer": { "type": "Role", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:role/admin", "accountId": "123456789012", "userName": "admin" } } }, "eventTime": "2018-08-02T00:11:44Z", "eventSource": "dms.amazonaws.com", "eventName": "RebootReplicationInstance", "awsRegion": "us-east-1", "sourceIPAddress": "72.21.198.64", "userAgent": "console.amazonaws.com", "requestParameters": { "forceFailover": false, "replicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:EX4MBJ2NMRDL3BMAYJOXUGYPUE" }, "responseElements": { "replicationInstance": { "replicationInstanceIdentifier": "replication-instance-1", "replicationInstanceStatus": "rebooting", "allocatedStorage": 50, "replicationInstancePrivateIpAddresses": [ "172.31.20.204" ], "instanceCreateTime": "Aug 1, 2018 11:56:21 PM", "autoMinorVersionUpgrade": true, "engineVersion": "2.4.3", "publiclyAccessible": true, "replicationInstanceClass": "dms.t2.medium", "availabilityZone": "us-east-1b", "kmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/f7bc0f8e-1a3a-4ace-9faa-e8494fa3921a", "replicationSubnetGroup": { "vpcId": "vpc-1f6a9c6a", "subnetGroupStatus": "Complete", "replicationSubnetGroupArn": "arn:aws:dms:us-east-1:123456789012:subgrp:EDHRVRBAAAPONQAIYWP4NUW22M", "subnets": [ { "subnetIdentifier": "subnet-cbfff283", "subnetAvailabilityZone": { "name": "us-east-1b" }, "subnetStatus": "Active" }, { "subnetIdentifier": "subnet-d7c825e8", "subnetAvailabilityZone": { "name": "us-east-1e" }, "subnetStatus": "Active" }, { "subnetIdentifier": "subnet-6746046b", "subnetAvailabilityZone": { "name": "us-east-1f" }, "subnetStatus": "Active" }, { "subnetIdentifier": "subnet-bac383e0", "subnetAvailabilityZone": { "name": "us-east-1c" }, "subnetStatus": "Active" }, { "subnetIdentifier": "subnet-42599426", "subnetAvailabilityZone": { "name": "us-east-1d" }, "subnetStatus": "Active" }, { "subnetIdentifier": "subnet-da327bf6", "subnetAvailabilityZone": { "name": "us-east-1a" }, "subnetStatus": "Active" } ], "replicationSubnetGroupIdentifier": "default-vpc-1f6a9c6a", "replicationSubnetGroupDescription": "default group created by console for vpc id vpc-1f6a9c6a" }, "replicationInstanceEniId": "eni-0d6db8c7137cb9844", "vpcSecurityGroups": [ { "vpcSecurityGroupId": "sg-f839b688", "status": "active" } ], "pendingModifiedValues": {}, "replicationInstancePublicIpAddresses": [ "18.211.48.119" ], "replicationInstancePublicIpAddress": "18.211.48.119", "preferredMaintenanceWindow": "fri:22:44-fri:23:14", "replicationInstanceArn": "arn:aws:dms:us-east-1:123456789012:rep:EX4MBJ2NMRDL3BMAYJOXUGYPUE", "replicationInstanceEniIds": [ "eni-0d6db8c7137cb9844" ], "multiAZ": false, "replicationInstancePrivateIpAddress": "172.31.20.204", "patchingPrecedence": 0 } }, "requestID": "a3c83c11-95e8-11e8-9d08-4b8f2b45bfd5", "eventID": "b3c4adb1-e34b-4744-bdeb-35528062a541", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }

AWS DMS 上下文日志记录

AWS DMS 使用上下文日志记录为您提供有关正在进行的迁移的信息。上下文日志记录将诸如以下内容的信息写入任务的 CloudWatch 日志:

  • 有关任务与源数据库和目标数据库连接的信息。

  • 复制任务行为。您可以使用任务日志来诊断复制问题。

  • AWS DMS 在源数据库和目标数据库上执行的不带数据的 SQL 语句。您可以使用 SQL 日志来诊断意外的迁移行为。

  • 流式传输每个 CDC 事件的位置详细信息。

上下文日志记录仅在 AWS DMS 版本 3.5.0 或更高版本中可用。

默认情况下 AWS DMS 开启上下文日志记录。要控制上下文日志记录,请将 EnableLogContext 任务设置设为 truefalse,或者在控制台中修改任务。

AWS DMS 每三分钟将上下文日志信息写入 CloudWatch 日志的复制任务。请确保您的复制实例有足够的空间来存储其应用程序日志。有关使用管理任务日志的更多信息,请参阅查看和管理 AWS DMS 任务日志

对象类型

AWS DMS 为以下对象类型在 CloudWatch 中生成上下文日志。

对象类型 描述
TABLE_NAME 这些日志条目包含当前任务映射规则范围内表的相关信息。您可以使用这些条目来检查迁移期间特定时间段内的表事件。
SCHEMA_NAME 这些日志条目包含当前任务映射规则所使用的架构的相关信息。您可以使用这些条目来确定在迁移期间,AWS DMS 在特定时间段内使用了哪个架构。
TRANSACTION_ID 这些条目包含从源数据库捕获的每个 DML/DDL 更改的事务 ID。您可以使用这些日志条目来确定在给定事务期间发生了哪些更改。
CONNECTION_ID 这些条目包含连接 ID。您可以使用这些日志条目来确定 AWS DMS 在每个迁移步骤中使用哪个连接。
STATEMENT 这些条目包含用于获取、处理和应用每项迁移更改的 SQL 代码。
STREAM_POSITION 这些条目包含源数据库上的每个迁移操作在事务日志文件中的位置。这些条目的格式因源数据库引擎类型而异。在配置仅 CDC 的复制时,您还可以使用此信息来确定恢复检查点的起始位置。

日志记录示例

本节提供了可用于监控复制和诊断复制问题的日志记录示例。

连接日志示例

本节提供了包含连接 ID 的日志示例。

2023-02-22T10:09:29 [SOURCE_CAPTURE ]I: Capture record 1 to internal queue from Source {operation:START_REGULAR (43), connectionId:27598, streamPosition:0000124A/6800A778.NOW} (streamcomponent.c:2920) 2023-02-22T10:12:30 [SOURCE_CAPTURE ]I: Capture record 0 to internal queue from Source {operation:IDLE (51), connectionId:27598} (streamcomponent.c:2920) 2023-02-22T11:25:27 [SOURCE_CAPTURE ]I: Capture record 0 to internal queue from Source {operation:IDLE (51), columnName:region, connectionId:27598} (streamcomponent.c:2920)

任务行为日志示例

本节提供了有关复制任务日志行为的日志示例。您可以使用此信息来诊断复制问题,例如状态为 IDLE 的任务。

以下 SOURCE_CAPTURE 日志表明没有可从源数据库日志文件中读取的事件,并且包含的 TARGET_APPLY 记录表明,没有从 AWS DMS CDC 组件收到任何可应用到目标数据库的事件。这些事件还包含先前应用的与事件相关的上下文详细信息。

2023-02-22T11:23:24 [SOURCE_CAPTURE ]I: No Event fetched from wal log (postgres_endpoint_wal_engine.c:1369) 2023-02-22T11:24:29 [TARGET_APPLY ]I: No records received to load or apply on target , waiting for data from upstream. The last context is {operation:INSERT (1), tableName:sales_11, schemaName:public, txnId:18662441, connectionId:17855, statement:INSERT INTO "public"."sales_11"("sales_no","dept_name","sale_amount","sale_date","region") values (?,?,?,?,?),

SQL 语句日志示例

本节提供了在源数据库和目标数据库上运行 SQL 语句的日志示例。您在日志中看到的 SQL 语句仅显示 SQL 语句,不显示数据。以下 TARGET_APPLY 日志显示了在目标上运行的 INSERT 语句。

2023-02-22T11:26:07 [TARGET_APPLY ]I: Applied record 2193305 to target {operation:INSERT (1), tableName:sales_111, schemaName:public, txnId:18761543, connectionId:17855, statement:INSERT INTO "public"."sales_111"("sales_no","dept_name","sale_amount","sale_date","region") values (?,?,?,?,?),

限制

以下限制适用于 AWS DMS 上下文日志记录:

  • AWS DMS 为所有端点类型创建极少的日志记录,仅以下端点类型有特定于引擎的大量上下文日志记录可用。我们建议在使用这些端点类型时开启上下文日志记录。

    • MySQL

    • PostgreSQL

    • Oracle

    • Microsoft SQL Server

    • MongoDB/Amazon DocumentDB

    • Amazon S3