我应该使用哪些指标来监控和排查 Kinesis Data Streams 问题?

上次更新时间:2020 年 6 月 30 日

我想监控 Amazon Kinesis Data Streams 的传入和传出数据。我应该使用哪些指标?

解决方法

使用流级别指标

您可以使用 Amazon CloudWatch 指标来持续监控您的 Amazon Kinesis 数据流的性能及其吞吐量。下列指标可帮助您监控创建器和使用器问题:

  • GetRecords.IteratorAgeMilliseconds:测量所有 GetRecords 请求的流中的最后一条记录的存在时间,单位为毫秒。该指标的值为零表示记录当前处在流中。首选较低的值。要监控任何性能问题,请增加流中的使用器数量,以便更快地处理数据。要优化您的应用程序代码,增加使用器数量以减少正在处理的记录中的延迟。
  • ReadProvisionedThroughputExceeded:测量在指定时间段内受限、超出 Kinesis Data Streams 的服务或分片限制的 GetRecords 调用的数量。值为“零”表示数据使用器未超出服务配额。任何其它值都表示超过了吞吐量限制,需要额外的分片。该指标确认流中没有超过 5 次读取/秒/分片或 2 MB/秒/分片的操作。您可以启用增强监控以验证流中没有热分片。
  • WriteProvisionedThroughputExceeded:测量 PUT 或数据创建器(如 ReadProvisionedThroughputExceeded)来帮助确定流是否正受到限制。这超过了写入到分片时 Data Streams 的服务配额。请确保 PUT 请求不超过 1 MB/秒/分片或 1000 条记录/秒/分片。请确保分区键均匀分布,并且启用了增强监测以验证流中的热分片。根据分片饱和度,请考虑更新流中的分片数量,以便提高吞吐量。
  • PutRecord.SuccessPutRecords.Success:测量在指定时间段内数据创建器放入流中的 PutRecords 请求的成功记录数量。此指标确认已失败记录的有效重试逻辑。
  • GetRecords.Success:测量指定时间段内流中的成功 GetRecords 请求的数量。它确认失败记录的有效重试逻辑。
  • GetRecords.Latency:测量在指定时间段内流上的每个 GetRecords 操作所用的时间。确认有足够的物理资源或者记录处理逻辑用于增加流吞吐量。处理大批量的数据,以降低您的应用程序中的网络和其他下游延迟。对于 Kinesis 客户端库 (KCL),请调查 ProcessTask.Time 指标以监控滞后的应用程序的处理时间。GetRecords.Latency 指标确认 IDLE_TIME_BETWEEN_READS_IN_MILLIS 设置已设为跟随流处理。
  • PutRecords.Latency:测量在指定时间段内流上的每个 PutRecords 操作所用的时间。如果 PutRecords.Latency 值较高,将记录聚合到较大的文件中,以使批处理数据进入 Kinesis 数据流。您也可以使用多个线程来写入数据。PutRecords API 上的限制和重试逻辑可能会影响延迟以及流上的每个 PutRecords 操作所用的时间。

然后,使用所示指标的平均值统计数据监控流的性能和吞吐量。

注意:对于 GetRecords.IteratorAgeMilliseconds,应当使用最大值统计数据以降低滞后于任何读取操作的使用器的数据丢失风险。配置 CloudWatch 警报以在触发就某一指标进行评估的任何数据点。有关 CloudWatch 警报的更多信息,请参阅使用 Amazon CloudWatch 警报

如果您使用的是增强扇出功能,请使用以下指标监控 Kinesis Data Streams:

  • SubscribeToShard.RateExceeded: 测量超过允许的操作次数或因为有效的订阅已存在而导致订阅尝试失败的每秒调用数量。
  • SubscribeToShard.Success:验证 SubscribeToShard 操作是否成功。
  • SubscribeToShardEvent.Success:验证活动订阅的成功发布事件。
  • SubscribeToShardEvent.Bytes:测量分片中在指定时间段内接收的字节数量。
  • SubscribeToShardEvent.Records:测量分片中在指定时间段内接收的记录数量。
  • SubscribeToShardEvent.MillisBehindLatest:测量当前时间与 SubscribeToShard 事件写入到流的上一个记录的时间之差。

启用增强分片级别指标

在 CloudWatch 中启用分片级别指标以监控特定任务并对数据创建器和使用器进行故障排除。例如,启用分片级别指标可帮助您确定工作负载分布不均匀之类的问题。

要启用增强监控,请执行以下步骤:

注意:您也可以使用 EnableEnhancedMonitoring API request 或 enable-enhanced-monitoring AWS CLI

1.    打开 Kinesis 控制台

2.    选择特定区域

3.    从导航窗格中选择数据流

4.    在数据流名称下,选择您的 Kinesis 数据流。

5.    选择配置

6.    在增强(分片级别)指标下,选择编辑

7.    从下拉菜单中,选择您的增强监控指标。

8.    选择保存更改以应用配置设置。

使用 API 调用的其他故障排除

您也可以使用以下 API 调用来从 Kinesis Data Streams 读取或写入数据:

  • CreateStream:限制为每个账户每秒 5 个事务处理。
  • DeleteStream:限制为每个账户每秒 5 个事务处理。
  • ListStreams:限制为每个账户每秒 5 个事务处理。
  • GetShardIterator:限制为每个打开的分片每个账户每秒 5 个事务处理。
  • MergeShards:限制为每个账户每秒 5 个事务处理。
  • DescribeStream:限制为每个账户每秒 10 个事务处理。
  • DescribeStreamSummary:限制为每个账户每秒 20 个事务处理。

当您使用这些 API 调用时,您可以监控任何 AWS CloudTrail 日志中的限制。有关 Kinesis Data Streams API 调用和 CloudTrail 的更多信息,请参阅使用 AWS CloudTrail 记录 Amazon Kinesis Data Streams API 调用


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?