在本文中,我们将学习如何使用 Amazon CloudWatch 监控 Amazon DynamoDB 的操作计数。通过 CloudWatch,您可以追踪表的读写容量、操作的延迟及请求计数,从而优化您的数据库性能和成本。以下是获取每个操作类型如 GetItem 和 DeleteItem成功请求计数的方法。
Amazon DynamoDB 持续向 Amazon CloudWatch 发送其行为指标。通过 CloudWatch,您可以监控诸如每个表的配置和消耗的读写容量、读取和写入节流事件的计数,以及每种调用类型的平均延迟等指标。有客户询问如何获取每种操作类型的成功请求计数例如,进行了多少次 GetItem 或 DeleteItem 调用,以更好地理解使用情况和成本。在这篇文章中,我将向您展示如何检索这个指标。
首先,让我们看看哪些指标是现成可用的。在 DynamoDB 控制台中,如果您导航到某个特定表,监控选项卡将显示该表从 CloudWatch 提取的一长串方便指标。以下截图展示了一个示例。
假设您发现某段时间内读取消耗上升。您可以展开读取使用情况的图表,以显示每秒消耗的读取容量单位如下面的截图所示,在每分钟的时间段内。
读取使用情况图表显示了计费相关的消费速率,但并未显示每段时间内发出了多少请求或请求的类型。发生了多少次 GetItem、BatchGetItem、Query 或 Scan 调用呢?一个接近的图表是每种操作类型的平均延迟。以下截图显示了在相关时间段内 GetItem 和 BatchGetItem 调用的平均延迟。
您可以通过将顶部中心的统计数据从 平均值 更改为 样本计数 来将此平均延迟指标转换为计数指标。这将为您提供每个时间段内收集的延迟样本数量,这对于我们的目的来说是完美的,因为这与成功的 GetItem 和 BatchGetItem 调用数量相匹配。现在它是一个成功请求计数图表。以下截图显示了调整后的图表。请忽略左上角仍然显示为毫秒,因为通过更改统计数据,我们将单位从“平均毫秒延迟”更改为“延迟测量数量”,即请求数量。
这种简单的调整为您提供了跟踪每种操作类型每个时间段内成功调用数量的方法。
关于时间段的说明:DynamoDB CloudWatch 指标可用的最小时间段为一分钟。报告“每秒”使用或请求的指标是基于更大时间段推断的平均值。这意味着,如果在一分钟内看到每秒 1000 个请求,实际上意味着在这一分钟内有 60000 个请求。较长的 CloudWatch 历史数据往往聚合为 5 或 15 分钟的时间段。
您可以创建一个 CloudWatch 仪表板,显示给定表的每种操作类型的计数。CloudWatch 仪表板是一个可自定义的页面,您可以在 CloudWatch 控制台中使用它来以单个视图监控资源。仪表板的定义可以基于 JSON 文件,您可以在 操作 菜单中查看和编辑,如以下截图所示。
以下示例 JSON 仪表板定义显示了给定表的所有标准操作类型的请求计数。要使用它,请调整代码以提供您的表名和 AWS 区域如果不是 useast1。然后,在 CloudWatch 仪表板中,您可以创建一个新仪表板,提供名称,取消添加小部件,然后在 操作 菜单中选择 查看/编辑源,并将您修改过的 JSON 作为源提供。
json{ periodOverride auto widgets [ { type metric x 0 y 0 width 24 height 12 properties { metrics [ [ AWS/DynamoDB SuccessfulRequestLatency TableName YOURTABLENAME Operation GetItem ] [ PutItem ] [ UpdateItem ] [ DeleteItem ] [ Query ] [ Scan ] [ BatchGetItem ] [ BatchWriteItem ] [ TransactGetItems ] [ TransactWriteItems ] ] view timeSeries stacked false region useast1 stat SampleCount period 60 } } ]}

生成的仪表板随后如下图所示。
express梯子您可以尝试在 操作 菜单下更改周期控制粒度。请记住,您不能选择比 1 分钟更细的粒度,历史数据可能需要 5 或 15 分钟周期。
您可以在仪表板中添加表达式,以显示总读取、总写入和总请求,如以下扩展 JSON 所示。
json{ periodOverride auto widgets [ { height 12 width 24 y 0 x 0 type metric properties { metrics [ [ AWS/DynamoDB SuccessfulRequestLatency TableName YOURTABLENAME Operation GetItem { id getItem } ] [ PutItem { id putItem } ] [ UpdateItem { id updateItem } ] [ DeleteItem { id deleteItem } ] [ Query { id query } ] [ Scan { id scan } ] [ BatchGetItem { id batchGetItem } ] [ BatchWriteItem { id batchWriteItem } ] [ TransactGetItems { id transactGetItems } ] [ TransactWriteItems { id transactWriteItems } ] [ { expression SUM([getItem query scan batchGetItem transactGetItems]) label Total Reads id totalReads } ] [ { expression SUM([putItem updateItem deleteItem batchWriteItem transactWriteItems]) label Total Writes id totalWrites } ] [ { expression SUM(METRICS()) label Total Requests id totalRequests } ] ] view timeSeries stacked false region useast1 stat SampleCount period 60 } } ]}
自定义仪表板每月会产生少量费用,尽管前几个是免费的,因此请确保删除任何未使用的自定义仪表板。您可以通过控制台或命令行以与创建仪表板相同的方式删除自定义仪表板。
在本文中,我们展示了如何使用延迟指标在 CloudWatch 中跟踪 DynamoDB 的操作计数,并将统计数据从 平均值 更改为 样本计数。我们提供了配置指标的步骤,并提供了一个 CloudWatch 仪表板源 JSON 文件以跟踪给定表中的所有操作计数。这段 25 分钟的视频展示了屏幕录制,带您完成这个过程。
尝试在您自己的 DynamoDB 表中使用这些方法,并在评论区告知我们您的反馈。您可以在 DynamoDB 文章 和 Jason Hunter 在 AWS 数据库博客 上撰写的其他文章中找到更多内容。
Jason Hunter 是一名来自加利福尼亚的首席解决方案架构师,专注于 Amazon DynamoDB。他自 2003 年以来一直与 NoSQL 数据库合作,以卓越的贡献而闻名于 Java、开源和 XML 领域。
2026-01-27 12:39:42
亚马逊托管Apache Flink服务的实时成本节约关键要点在本文中,你将了解到如何通过在亚马逊托管Apache Flink服务上运行应用程序来优化成本。这包括:自由度和灵活性:Apache Flin...
快速入门 AWS IoT Core 的新共享订阅功能关键要点在本篇文章中,我们将介绍 AWS IoT Core 的共享订阅功能,包括其工作原理、设置步骤,以及如何通过该功能实现负载均衡。共享订阅使多个...