如何查询AWS DMS任务指定时间范围内的已传输数据总量
AWS DMS特定任务时间段传输总数据量查询方案
方案1:通过CloudWatch控制台直接查询(无需编码,最便捷)
DMS会自动将任务运行指标上报到CloudWatch,你可以直接在CloudWatch控制台完成聚合计算,不需要额外开发:
- 打开CloudWatch控制台,进入「指标」-「所有指标」,选择DMS的任务指标维度,找到你指定任务对应的
FullLoadThroughputBytes(全量加载阶段吞吐量)和CDCIncomingBytes/CDCOutgoingBytes(增量阶段吞吐量,按需选择统计维度)指标 - 切换到「Graphed metrics」标签页,将统计方式调整为Sum,时间范围选择你需要的区间(比如最近30天)
- 在「Options」设置中调整单位为GB/TB,即可直接得到对应时间段的总传输数据量
注意:如果你的任务包含全量+增量两个运行阶段,需要把全量指标的统计结果和增量指标的统计结果相加,才是整个时间段内的总传输数据量。如果仅需要统计增量阶段的传输量,仅计算CDC相关指标即可。
方案2:通过boto3脚本查询(适合多任务/定期查询场景)
你提到的boto3方案可通过调用CloudWatch的get_metric_statistics接口批量拉取指标聚合结果,核心示例代码片段如下:
import boto3 from datetime import datetime, timedelta cloudwatch = boto3.client('cloudwatch') # 替换为你的DMS任务ARN dms_task_arn = "arn:aws:dms:us-east-1:xxxxxx:task:xxxxxxxxxxxx" # 统计粒度,单位秒,最长可设置为86400即1天 period = 3600 start_time = datetime.utcnow() - timedelta(days=30) end_time = datetime.utcnow() # 拉取全量阶段传输总量 full_load_resp = cloudwatch.get_metric_statistics( Namespace='AWS/DMS', MetricName='FullLoadThroughputBytes', Dimensions=[{'Name': 'ReplicationTaskIdentifier', 'Value': dms_task_arn.split(':')[-1]}], StartTime=start_time, EndTime=end_time, Period=period, Statistics=['Sum'] ) full_load_total = sum([p['Sum'] for p in full_load_resp['Datapoints']]) # 拉取增量阶段传输总量 cdc_resp = cloudwatch.get_metric_statistics( Namespace='AWS/DMS', MetricName='CDCOutgoingBytes', Dimensions=[{'Name': 'ReplicationTaskIdentifier', 'Value': dms_task_arn.split(':')[-1]}], StartTime=start_time, EndTime=end_time, Period=period, Statistics=['Sum'] ) cdc_total = sum([p['Sum'] for p in cdc_resp['Datapoints']]) total_bytes = full_load_total + cdc_total total_gb = total_bytes / (1024 ** 3) total_tb = total_bytes / (1024 ** 4) print(f"近30天总传输量:{total_gb:.2f} GB / {total_tb:.3f} TB")
内容的提问来源于stack exchange,提问作者marcin2x4
相关产品推荐
相关产品推荐

