监控 AWS DMS 任务 - AWS Database Migration Service

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

监控 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 中使用事件和通知

任务状态

您可以查看任务状态和监控任务的控制表,以便监控任务的进度。任务状态指示 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 任务日志

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 地址、何人发出的请求、请求的发出时间以及其他详细信息。有关更多信息,请参阅Logging AWS DMS API calls with AWS CloudTrail

数据库日志

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

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

任务状态

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

任务状态 Description

创建

AWS DMS 正在创建任务。

正在运行

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

Stopped

任务已停止。

正在停止

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

删除

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

已失败

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

正在启动

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

Ready

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

正在修改

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

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

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

任务期间的表状态

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


                     AWS Database Migration Service 复制实例
State Description

表不存在

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

加载前

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

完全加载

完全加载过程正在进行。

表已完成

完全加载已完成。

表已取消

已取消加载表。

表错误

加载表时出错。

使用 Amazon CloudWatch 监控复制任务

您可以使用 Amazon CloudWatch 警报或事件来更密切地跟踪您的迁移。有关 Amazon CloudWatch 的更多信息,请参阅 中的Amazon CloudWatch什么是 Amazon CloudWatch Events、Amazon CloudWatch Logs 和 ?Amazon CloudWatch 用户指南 请注意,使用 Amazon CloudWatch 会产生费用。

控制台显示每个任务的基本 AWS DMS 统计数据,包括任务状态、完成百分比、已用时间以及表统计数据,如下所示。CloudWatch选择复制任务,然后选择任务监控选项卡。


                AWS DMS 监控

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


                AWS DMS 监控

此外,如果从复制实例页中选择一个复制实例,您可以选择监控选项卡以查看该实例的性能指标。


                AWS DMS 监控

AWS Database Migration Service指标

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

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

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

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

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

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

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

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

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

  • FreeableMemory 指标接近于零。

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

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

复制实例指标

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

CPUUtilization

使用的 CPU 量。

单位:百分比

FreeStorageSpace

可用存储空间的大小。

单位:字节

FreeableMemory

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

单位:字节

WriteIOPS

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

单位:计数/秒

ReadIOPS

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

单位:计数/秒

WriteThroughput

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

单位:Bytes/Second

ReadThroughput

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

单位:Bytes/Second

WriteLatency

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

单位:毫秒

ReadLatency

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

单位:毫秒

SwapUsage

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

单位:字节

NetworkTransmitThroughput

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

单位:字节/秒

NetworkReceiveThroughput

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

单位:字节/秒

复制任务指标

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

FullLoadThroughputBandwidthSource

以每秒 KB 为单位,从源的完全加载接收的传入数据。

FullLoadThroughputBandwidthTarget

从目标完全加载传输的传出数据,以 KB/秒为单位。

FullLoadThroughputRowsSource

源上的完全加载的传入更改,以行/秒为单位。

FullLoadThroughputRowsTarget

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

CDCIncomingChanges

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

CDCChangesMemorySource

内存中累积并等待从源提交的行数。您可以同时查看此指标和 CDCChangesDiskSource。

CDCChangesMemoryTarget

内存中累积并等待提交到目标的行数。您可以同时查看此指标和 CDCChangesDiskTarget。

CDCChangesDiskSource

磁盘上累积并等待从源提交的行数。您可以同时查看此指标和 CDCChangesMemorySource。

CDCChangesDiskTarget

磁盘上累积并等待提交到目标的行数。您可以同时查看此指标和 CDCChangesMemoryTarget。

CDCThroughputBandwidthSource

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

CDCThroughputBandwidthTarget

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

CDCThroughputRowsSource

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

CDCThroughputRowsTarget

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

CDCLatencySource

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

CDCLatencyTarget

在目标上等待提交的第一个事件时间戳与 AWS DMS 实例的当前系统时间戳之间的间隔(秒)。CDCLatencyTarget 表示复制实例和目标之间的延迟。如果 CDCLatencyTarget 较高,则表示将更改事件应用于目标的过程延迟。要确定持续复制中的延迟,您可以将此指标与 CDCLatencySource 一起查看。 如果 CDCLatencyTarget 较高但 CDCLatencySource 不高,请调查:

  • 目标中没有主键或索引

  • 目标或复制实例中存在资源瓶颈

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

CPUUtilization

任务正在使用的 CPU 百分比。单位:百分比

CPUAllocated

为任务均匀分配的 CPU 百分比 (0 表示没有限制)。单位:百分比

MemoryAllocated

任务的最大内存分配 (0 表示无限制)。单位:MiB

SwapUsage

任务使用的交换内存量。单位:字节

MemoryUsage

任务占用的驻留集大小 (RSS)。它表示主内存 (RAM) 中保留的任务所占用的内存部分。由于已占用内存的某些部分已被换页,或者可执行文件的某些部分从未加载,因此 MemoryUsage 不包含交换空间或文件系统上保留的内存。

FreeMemory

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

单位:字节

AvailableMemory

估计可用于启动新应用程序(无需交换)的内存量。有关更多信息,请参阅 MemAvailableLinux man-pages/proc/memInfo 部分中的 值。

单位:字节

查看和管理 AWS DMS 任务日志

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

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

  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。 通过描述任务日志,您可以确定不再需要的日志;然后可以删除它们,从而释放存储空间。

注意

在删除日志之前停止正在运行的关联任务。当关联的任务在继续运行时,无法使用 AWS CLI 或 AWS DMS 控制台删除日志。

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

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

Logging AWS DMS API calls with AWS CloudTrail

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

要了解 CloudTrail 的更多信息,请参阅 AWS CloudTrail User Guide

AWS DMS information in CloudTrail

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

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

所有 AWS DMS 操作均由 CloudTrail 记录下来并记载到 AWS Database Migration Service API Reference 中。例如,对 CreateReplicationInstanceTestConnectionStartReplicationTask 操作的调用在 CloudTrail 日志文件中生成一些条目。

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

  • Whether the request was made with root or IAM user credentials.

  • Whether the request was made with temporary security credentials for a role or federated user.

  • Whether the request was made by another AWS service.

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

Understanding AWS DMS log file entries

跟踪是一种配置,可用于将事件作为日志文件传送到您指定的 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" }