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 はイベントをサブスクライブ可能なカテゴリにグループ分けするため、そのカテゴリのイベントが発生すると、通知が来ます。たとえば、特定のレプリケーション インスタンスの作成カテゴリにサブスクライブした場合は、レプリケーション インスタンスに影響を与える作成関連のイベントが発生するたびに通知を受け取ります。これらの通知は、メールメッセージ、テキストメッセージ、HTTP エンドポイントの呼び出しなど、AWS リージョン用にAmazon SNSでサポートされているいずれの形式でも使用できます。詳細については、「AWS Database Migration Service での Amazon SNS イベントと通知の使用」をご参照ください。

タスクのステータス

タスクのステータスを確認し、タスクの統制テーブルをモニタリングすることで、タスクの進行状況を監視できます。タスクのステータスは、AWS DMS のタスクとタスクに関連付けられたリソースの状態を示します。これによって、作成、開始、実行、停止など、タスクの現在の状態がわかります。また、テーブルの全読み込みが開始または進行中など、タスクが移行中のテーブルの現在の状態や、テーブルで挿入、削除、更新が発生した数などの詳細も含まれます。タスクおよびタスクリソースの条件モニタリングについては、「タスクのステータス」と「タスク実行中のテーブルの状態」をご参照ください。統制テーブルの詳細については、「制御テーブルタスク設定」をご参照ください。

Amazon CloudWatch アラームとログ

Amazon CloudWatch アラームを使用すると、指定した期間について 1 つ以上のタスク メトリクスを監視できます。メトリクスが特定のしきい値を超すと、Amazon SNS トピックに通知が送信されます。CloudWatch アラームは、特定の状態にあるという理由ではアクションを呼び出しません。むしろ状態が変化して、その状態が指定期間数について持続している必要があります。また、AWS DMS は、移行プロセス中にも CloudWatch を使用してタスク情報をログに記録します。AWS CLI または AWS DMS API を使用すると、タスクログに関する情報を表示できます。AWS DMS と CloudWatch の併用の詳細については、「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 のターゲットエンドポイントで使用できます。Time Travel は、フルロードタスクと CDC タスクと、CDC のみのタスクでのみ有効にできます。Time Travel を有効にしたり、既存の Time Travel 設定を変更するには、タスクが停止していることを確認する必要があります。

Time Travel ログの詳細については「Time Travel タスクの設定」を参照してください。Time Travel ログの使用のベスト プラクティスについては、「Time Travel を使用したレプリケーションタスクのトラブルシューティング」を参照してください。

AWS CloudTrail ログ

AWS DMS は、ユーザー、IAM ロール、または AWS DMS にある AWS サービスによって実行されたアクションを記録するサービスである AWS CloudTrail と統合されています。CloudTrail は、AWS DMS コンソールからのコールや AWS DMS API オペレーションへのコード コールを含む、AWS DMS の全 API コールをイベントとして取得します。証跡を作成する場合は、AWS DMS のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的な配信を有効にすることができます 証跡を設定しない場合でも、「CloudTrail」 コンソールの 「イベント履歴」 で最新のイベントを表示できます。CloudTrail で収集した情報を使用して、AWS DMS に対して行ったリクエスト、リクエスト元の IP アドレス、リクエスト者、リクエスト日時などの詳細を確認できます。詳細については、「AWS CloudTrail による AWS DMS API コールのログ記録」を参照してください。

データベースログ

AWS マネジメントコンソール、AWS CLI、または AWS データベースサービスの API を使用して、タスクエンドポイントのデータベースログを表示、ダウンロード、監視できます。詳細については、AWS ドキュメントのデータベースサービス用ドキュメントをご参照ください。

詳細については、以下のトピックをご参照ください。

タスクのステータス

タスクのステータスはタスクの状態を提供します。以下の表では、タスクがなる得るステータスを示しています。

タスクのステータス 説明

作成

AWS DMS タスクを作成しています。

実行中

タスクが指定された移行処理を実行中です。

停止

タスクが停止されました。

停止中

タスクが停止中です。これは通常、タスクでのユーザーによる介入を示します。

削除

タスクが (通常はユーザーによる介入のためリクエストから) 削除中です。

失敗

タスクが失敗しました。詳細については、タスクのログファイルをご参照ください。

エラー

エラーが原因でジョブは停止した。タスクのエラーの簡潔な説明は、[概要] タブの最後のエラーメッセージセクションに記載されている。

エラーを伴って実行中

タスクがエラーステータスで実行されている。これは通常、タスク内の単一または複数のテーブルを移行できなかったことを示す。タスクは選択ルールに従ってその他のテーブルのロードを続ける。

スタート

タスクがレプリケーション インスタンスに、さらにソースおよびターゲットエンドポイントに接続中です。フィルタと変換を適用中です。

準備完了

タスクの実行準備ができました。このステータスになるのは通常、「creating」状態の後です。

変更

タスクが (通常はユーザーによるタスク設定の変更アクションのため) 変更中です。

Moving] (移動

タスクは別のレプリケーション インスタンスに移動中です。レプリケーションは移動が完了するまでは、この状態のままになります。タスクの削除は、移動中にレプリケーション タスクで許可されている唯一のオペレーションです。

[Failed-move] (失敗した移動)

ターゲット レプリケーション インスタンスに十分なストレージ領域がないなど、何らかの理由でタスクの移動が失敗しました。レプリケーション タスクがこの状態になると、スタート、変更、移動、または削除できます。

テスト

このタスクに指定されたデータベース移行は、StartReplicationTaskAssessmentRun オペレーションまたは StartReplicationTaskAssessment オペレーションの実行に応じてテストされている。

タスクのステータスバーで、タスクの進捗状況を予測できます。この予測の正確さはソースデータベースのテーブル統計の正確さによって異なります。テーブル統計が正確であればあるほど、正確に予測できます。予測された列の統計がないテーブルが 1 つだけのタスクでは、どのような種類であっても完了率の予測を提供できません。この場合、タスクのステータスと、ロードされた列の表示を使って、タスクが実際に実行されて進行していることを確認できます。

DMS コンソールの「最終更新」列はテーブルに対して AWS DMS が最後にテーブル統計レコードを更新した時刻を示すのみであることにご注意ください。これはテーブルの最終更新時間を示すものではありません。

DMS コンソールを使用する以外にも、次の例のとおり、AWS CLIaws 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 がソース エンドポイントでテーブルを見つけられません。

ロード前

フルロードプロセスが有効になっていますが、まだ開始されていません。

Full load

全ロードプロセスが進行中です。

テーブル完了

全ロードが完了しました。

テーブル取消

テーブルのロードがキャンセルされました。

テーブルエラー

テーブルのロード時にエラーが発生しました。

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 コンソールで [Table statistics] (テーブル統計) タブを選択すると、挿入、削除、更新の数など、各テーブルのパフォーマンス統計が表示されます。

AWS DMS モニタリング

さらに、[レプリケーションインスタンス] ページでレプリケーションインスタンスを選択して、[CloudWatch メトリクス] タブをクリックすると、インスタンスのパフォーマンスメトリクスを確認できます。

AWS DMS モニタリング

AWS Database Migration Service のメトリクス

AWS DMS には、次の統計情報が表示されます:

  • [Host Metrics] (ホストメトリクス) – Amazon CloudWatch により提供されるレプリケーション ホストのパフォーマンスおよび使用状況の統計。使用可能なメトリクスの完全なリストについては、「レプリケーションインスタンスのメトリクス」をご参照ください。

  • [Replication Task Metrics] (レプリケーション タスク メトリクス) – 受信した変更とコミットされた変更、レプリケーション ホストとソースおよびターゲットデータベースの間のレイテンシーなど、レプリケーション タスクの統計。使用可能なメトリクスの完全なリストについては、「レプリケーションタスクのメトリクス」をご参照ください。

  • [Table Metrics] (テーブルメトリクス) 挿入、更新、削除、完了した DDL ステートメントの数など、移行が進行中のテーブルの統計。

タスクメトリクスは、レプリケーションホストおよびソースエンドポイントの統計と、レプリケーションホストおよびターゲットエンドポイントの統計に分けられます。CDCLatencySourceCDCLatencyTarget を使用して、これらの関連する統計を比較することで、タスクのレイテンシーの原因を特定できます。たとえば、CDCLatencySource 値が CDCLatencyTarget 値とほぼ同じである場合は、まずソース側を確認する必要があります。ただし、CDCLatencyTargetCDCLatencySource よりも高い場合は、ターゲット側のレイテンシーを注意して確認する必要があります。

タスクメトリック値は、ソースデータベースにおける現在のアクティビティの影響を受ける可能性があります。たとえば、トランザクションが開始したが、コミットされていない場合、CDCLatencySource メトリクスはトランザクションがコミットされるまで大きくなり続けます。

レプリケーションインスタンスの場合、FreeableMemory メトリクスには説明が必要です。解放可能なメモリは、実際の使用可能な空きメモリを示しているわけではありません。これは、解放して他の用途に使用できる現在使用中のメモリであり、レプリケーションインスタンスで使用されているバッファとキャッシュの組み合わせです。

FreeableMemory メトリクスに実際の使用可能な空きメモリは反映されませんが、FreeableMemory および SwapUsage メトリクスの組み合わせにより、レプリケーションインスタンスが過負荷になっているかどうかがわかります。

次の状態について、これらの 2 つのメトリクスをモニタリングします。

  • FreeableMemory メトリクスが 0 に近づいている。

  • SwapUsage メトリクスが増加または変動する。

これらの 2 つの状態のいずれかが表示された場合は、より大きなレプリケーションインスタンスへの移行を検討する必要があります。また、レプリケーションインスタンスで実行中のタスクの数とタイプを減らすことも検討してください。全ロードタスクは、変更をレプリケートするだけのタスクよりも多くのメモリを必要とします。

AWS DMS 移行タスクの実際のメモリ要件を見積もるには、次のパラメータを使用します。

LOB 列

移行範囲の各テーブルの LOB 列の平均数

並列にロードするテーブルの最大数

AWS DMS が単一のタスクで並列にロードするテーブルの最大数。

デフォルト値は 8 です。

LOB チャンクのサイズ

AWS DMS がデータをターゲットデータベースにレプリケートするために使用する LOB チャンクのキロバイト単位のサイズ

フルロード時のレートの確定

AWS DMS が並列に転送できるレコードの最大数。

デフォルト値は 10,000 です。

LOB のサイズ

個々の LOB のキロバイト単位の最大サイズ

一括の配列のサイズ

エンドポイントドライバーがフェッチまたは処理する行の最大数。この値は、ドライバーの設定によって異なります。

デフォルト値は 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 の最大サイズが 4,096 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 は特に Oracle から PostgreSQL へなどの異種間で移行やレプリケーションを実行する場合は、CPU の負荷が大きくなることがあります。

レプリケーションインスタンスのメトリクス

レプリケーションインスタンスのモニタリングには、次の統計に関する Amazon CloudWatch メトリクスがあります。

メトリクス

説明

AvailableMemory (利用可能メモリ)

スワップなしで新しいアプリケーションの開始に使用可能なメモリ容量の推定。詳細については、Linux man ページ/proc/memInfo セクションに記載されている MemAvailable の値をご参照ください。

単位: バイト

[CPUAllocated](割り当て済み CPU)

タスクに最大割り当てられた CPU のパーセンテージ (0 は無制限を意味する)。

AWS DMS は、CloudWatch コンソールの ReplicationInstanceIdentiferReplicationTaskIdentifier を使用する。このメトリクスを表示するには、ReplicationInstanceIdentifier, ReplicationTaskIdentifier カテゴリを使用する。

単位: パーセント

CPUUtilization (CPU使用度)

割り当てられた vCPU (仮想 CPU) のうち、現在インスタンス上に使用されているものに対する比率。

単位: パーセント

DiskQueueDepth

ディスクアクセス待機中未処理の読み取り/書き込みリクエスト) (I/O) の数。

単位: カウント

FreeStorageSpace

使用可能なストレージ領域の容量。

単位: バイト

[FreeMemory](空きメモリ)

アプリケーションおよびページキャッシュ、カーネル独自のデータ構造で使用できる物理メモリ量。詳細については、Linux man ページ/proc/memInfo セクションに記載されている MemFree の値をご参照ください。

単位: バイト

FreeableMemory

使用可能な RAM の容量。

単位: バイト

[MemoryAllocated](割り当てメモリ)

タスクの最大割り当てメモリ (0 は無制限を意味する)。

AWS DMS は、CloudWatch コンソールの ReplicationInstanceIdentiferReplicationTaskIdentifier を使用する。このメトリクスを表示するには、ReplicationInstanceIdentifier, ReplicationTaskIdentifier カテゴリを使用する。

単位: MiB

WriteIOPS

1 秒あたりのディスク書き込み I/O オペレーションの平均回数。

単位: カウント/秒

ReadIOPS

1 秒あたりのディスク読み取り I/O オペレーションの平均回数。

単位: カウント/秒

WriteThroughput

1 秒あたりのディスクへの平均書き込みバイト数。

単位: バイト/秒

ReadThroughput

1 秒あたりのディスクからの平均読み取りバイト数。

単位: バイト/秒

WriteLatency

1 回のディスク I/O (出力) 操作にかかる平均時間。

単位: ミリ秒

ReadLatency

1 回のディスク I/O (入力) 操作にかかる平均時間。

単位: ミリ秒

SwapUsage

レプリケーションインスタンスで使用されるスワップ領域の量。

単位: バイト

NetworkTransmitThroughput 顧客データベーストラフィックを含むレプリケーションインスタンスの送信 (Transmit) ネットワークトラフィック。

単位: バイト/秒

NetworkReceiveThroughput

顧客データベーストラフィックを含むレプリケーションインスタンスの受信 (Receive) ネットワークトラフィック。

単位: バイト/秒

レプリケーションタスクのメトリクス

レプリケーションタスクのモニタリングには、次の統計のメトリクスがあります。

メトリクス

説明

FullLoadThroughputBandwidthTarget

ターゲットに送信される全ロードによるネットワーク帯域幅 (1 秒あたりの KB 数)。

FullLoadThroughputRowsTarget

ターゲットに送信される全ロードによる変更 (1 秒あたりの行数)。

CDCIncomingChanges

ターゲットへの適用を待機している、特定の時点での変更イベントの合計数。これは、ソースエンドポイントのトランザクション変更レートの測定と同じではありません。通常、このメトリクスの大多数は、 AWS DMS をキャプチャされた変更にタイムリーに適用できず、ターゲットのレイテンシーが高くなっていることを示します。

CDCChangesMemorySource

メモリに累積され、ソースからのコミットを待機している行の数。このメトリックは CDCChangesDiskSource とともに表示できます。

CDCChangesMemoryTarget (CDC変更メモリターゲット)

メモリに累積され、ターゲットへのコミットを待機している行の数。このメトリックは CDCChangesDiskTarget とともに表示できます。

CDCChangesDiskSource (CDC変更ディスクソース)

ディスクに累積され、ソースからのコミットを待機している行の数。このメトリックは CDCChangesMemorySource とともに表示できます。

CDCChangesDiskTarget (CDC変更ディスクターゲット)

ディスクに累積され、ターゲットへのコミットを待機している行の数。このメトリックは CDCChangesMemoryTarget とともに表示できます。

CDCThroughputBandwidthTarget (CDCスループット帯域幅ターゲット)

ターゲットに送信される送信データ (KB/秒)。CDCThroughputBandwidth は、サンプリングポイントで送信された送信データを記録 ネットワーク トラフィックが見つからない場合、値は 0 です。CDC は長時間実行トランザクションを発行しないため、ネットワークトラフィックは記録されない場合があります。

CDCThroughputRowsSource (CDCスループット行ソース)

ソースから受信したタスクの変更 (1 秒あたりの行数)。

CDCThroughputRowsTarget (CDCスループット行ターゲット)

ターゲットに送信されるタスクの変更 (1 秒あたりの行数)。

CDCLatencySource (CDCレイテンシーソース)

ソース エンドポイントからキャプチャされた最後のイベントと、AWS DMS インスタンスの現在のシステム タイムスタンプの間の間隔 (秒)。CDCLatencySource は、ソースインスタンスとレプリケーション インスタンス間のレイテンシーを表します。高い CDCLatencySource は、ソースからの変更をキャプチャするプロセスが遅延することを意味します。進行中のレプリケーションのレイテンシーを特定するには、このメトリクスを CDCLatencyTarget とともに表示できます。CDCLatencySource と CDCLatencyTarget の両方が高い場合は、まず CDCLatencySource を調べてください。

ソースとレプリケーションインスタンスの間にレプリケーションの遅延がない場合、CDCSourceLatency は 0 になることがある。レプリケーションタスクがソースのトランザクションログの次のイベントを読み取ろうとし、最後にソースから読み取った時と比較して新しいイベントがない場合にも、CDCSourceLatency がゼロになる可能性がある。このような状況の場合、タスクは CDCSourceLatency を 0 にリセットする。

CDCLatencyTarget (CDCレイテンシーターゲット)

ターゲットのコミットを待機中の最初のイベント タイムスタンプと AWS DMS インスタンスの現在のタイムスタンプの間の間隔 (秒)。ターゲットのレイテンシーは、レプリケーションインスタンスのサーバー時間と、ターゲットコンポーネントに転送された最も古い未確定のイベント ID との差。つまり、ターゲットのレイテンシーは、レプリケーションインスタンスと、適用されても TRG エンドポイントがまだ確認していない最も古いイベントとの間のタイムスタンプの差 (99%)。CDCLatencyTarget が高い場合は、ターゲットに変更イベントを適用するプロセスが遅延していることを示します。進行中のレプリケーションのレイテンシーを特定するには、このメトリクスを CDCLatencySource とともに表示できます。CDCLatencyTarget が高くても CDCLatencySource が高くない場合は、次の場合に調査してください。

  • ターゲットにプライマリキーまたはインデックスがありません

  • ターゲット インスタンスまたはレプリケーション インスタンスでリソースのボトルネックが発生する

  • レプリケーショ ンインスタンスとターゲットの間にネットワークの問題がある

CPUUtilization (CPU使用度)

複数のコアでタスクによって使用されている CPU の割合。タスク CPUUtilizaion のセマンティクスは、レプリケーション CPUUtilization とは少し異なります。1 つの vCPU が完全に使用されている場合は 100% を示しますが、複数の vCPUs が使用されている場合は 100% を超える可能性があります。

単位: パーセント

SwapUsage

タスクで使用されるスワップの量。

単位: バイト

MemoryUsage

タスクが使用した制御グループ (cgroup) の memory.usage_in_bytes。DMS は cgroup を使用して、メモリや CPU などのシステムリソースの使用を制御する。このメトリクスは、タスクに割り当てられた cgroup 内のタスクのメモリ使用量をメガバイト単位で示す。cgroup の制限は、DMS レプリケーションインスタンスクラスで利用できるリソースに基づいている。memory.usage_in_bytes は、メモリの常駐セット サイズ (RSS)、キャッシュ、スワップコンポーネントで構成される。オペレーティングシステムは、必要に応じてキャッシュメモリを再利用できる。レプリケーションインスタンスメトリクス AvailableMemory もモニタリングすることが推奨される。

AWS DMS は、CloudWatch コンソールの ReplicationInstanceIdentiferReplicationTaskIdentifier を使用する。このメトリクスを表示するには、ReplicationInstanceIdentifier, ReplicationTaskIdentifier カテゴリを使用する。

AWS DMS タスクログの表示と管理

Amazon CloudWatch を使用して、AWS DMS 移行プロセス中にタスク情報をログに記録できます。タスク設定を選択すると、ログ記録が有効になります。詳細については、「ロギングタスク設定」を参照してください。

実行されたタスクのログを表示するには、以下の手順に従います。

  1. AWS DMS コンソールを開き、ナビゲーションペインから [データベース移行タスク] を選択します。[データベース移行タスク] ダイアログが表示されます。

  2. タスクの名前を選択します。[概要の詳細] ダイアログが表示されます。

  3. [移行タスクログ] セクションを見つけ、[CloudWatch ログの表示] を選択します。

さらに、 AWS CLI または AWS DMS API を使用して、タスクログに関する情報を表示できます。そのためには、describe-replication-instance-task-logs AWS CLI 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" }

このレスポンスでは、1 つのタスクログ (mysql-to-ddb) がレプリケーションインスタンスに関連付けられています。このログのサイズは、3,726,124 バイトです。

describe-replication-instance-task-logs により返される情報を使用して、タスクログの問題を診断およびトラブルシューティングできます。たとえば、タスクの詳細なデバッグログを有効にした場合、タスクログはすぐに大きくなるため、レプリケーション インスタンスに使用可能なストレージを消耗し、インスタンスステータスが storage-full に変化する可能性があります。タスクログを記述することによって、必要ないタスクログを判断できます。これにより、それらのタスクログを削除してストレージ領域を解放できます。

タスクのタスクログを削除するには、タスク設定 DeleteTaskLogs を true に設定します。たとえば、AWS CLI modify-replication-task コマンドまたは AWS DMS API ModifyReplicationTask アクションを使用してタスクを変更するときに、次の JSON はタスクログを削除します。

{ "Logging": { "DeleteTaskLogs":true } }
注記

レプリケーションインスタンスごとに、AWS DMS は 10 日を経過したログを削除します。

AWS CloudTrail による AWS DMS API コールのログ記録

AWS DMS は AWS CloudTrail と統合されています。これは、AWS DMS のユーザー、ロール、または AWS のサービスによって実行されたアクションを記録するサービスです。CloudTrail は、AWS DMS コンソールからのコールや AWS DMS API オペレーションへのコードコールを含む、AWS DMS の全 API コールをイベントとして取得します。証跡を作成する場合は、AWS DMS のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的な配信を有効にすることができます 証跡を設定しない場合でも、「CloudTrail」 コンソールの 「イベント履歴」 で最新のイベントを表示できます。CloudTrail が収集した情報を使用して、AWS DMS に対して行われた要求、要求が行われた IP アドレス、要求を行った人、要求が行われた日時、および追加の詳細を判別できます。

CloudTrail の詳細については、「AWS CloudTrail ユーザーガイド」を参照してください。

AWS DMSCloudTrail の 情報

CloudTrailは、アカウントを作成するとAWSアカウントで有効になります。AWS DMS でアクティビティが発生すると、そのアクティビティは Event history イベント履歴で AWS のその他のサービスのイベントと共に CloudTrail イベントに記録されます。最近のイベントは、AWSアカウントで表示、検索、ダウンロードできます。詳細については、CloudTrail イベント履歴でのイベントの表示をご参照ください。

AWSのイベントなど、AWS DMSアカウントのイベントの継続的なレコードについては、追跡を作成します。追跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成すると、すべての AWS リージョンに証跡が適用されます。追跡では、AWS パーティション内のすべての AWS リージョンからのイベントをログに記録し、指定した Simple Storage Service (Amazon S3)バケットにログファイルを配信します。さらに、CloudTrail ログで収集したイベントデータをより詳細に分析し、それに基づく対応するためにその他の AWS のサービスを設定できます。詳細については、次を参照してください。

すべての AWS DMS アクションは CloudTrail によってログに記録され、AWS Database Migration Service API リファレンスに記録されます。例えば、CreateReplicationInstanceTestConnectionStartReplicationTask の各アクションを呼び出すと、CloudTrail ログファイルにエントリが生成されます。

各イベントまたはログエントリには、誰がリクエストを生成したかという情報が含まれます。同一性情報は次の判断に役立ちます。

  • リクエストが、ルートと IAM ユーザー認証情報のどちらを使用して送信されたか。

  • リクエストがロールまたはフェデレーションユーザーの一時的なセキュリティ認証情報を使用して行われたかどうか。

  • リクエストが別の AWS サービスによって行われたかどうか。

詳細については、「CloudTrail userIdentity 要素」 を参照してください。

AWS DMS ログファイルエントリの理解

追跡は、指定したAmazon S3バケットにイベントをログファイルとして配信するように設定できます。CloudTrail のログファイルは、単一か複数のログエントリを含みます。イベントはあらゆるソースからの単一のリクエストを表し、リクエストされたアクション、アクションの日時、リクエストのパラメータなどの情報が含まれます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、特定の順序では表示されません。

次は、RebootReplicationInstance アクションを示す CloudTrail ログエントリの例です。

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AKIAIOSFODNN7EXAMPLE:johndoe", "arn": "arn:aws:sts::123456789012:assumed-role/admin/johndoe", "accountId": "123456789012", "accessKeyId": "ASIAIOSFODNN7EXAMPLE", "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 タスク設定を true または false に設定するか、コンソールでタスクを変更します。

AWS DMS は、コンテキストログの情報を 3 分ごとに 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 ログは、ソースデータベースのログファイルから読み取ることができるイベントがないことを示しており、ターゲットデータベースに適用する AWS DMS CDC コンポーネントから受信したイベントがないことを示す TARGET_APPLY レコードが含まれています。上記のイベントには、以前に適用したイベント関連のコンテキストの詳細も含まれています。

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