使用 Amazon CloudWatch 监控 Kinesis Client Library - Amazon Kinesis Data Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon CloudWatch 监控 Kinesis Client Library

适用于 Amazon Kinesis Data Streams 的 Kinesis Client Library(KCL)会代表您发布自定义 Amazon CloudWatch 指标,并使用您 KCL 应用程序的名称作为命名空间。您可以通过导航至 CloudWatch 控制台并选择自定义指标来查看这些指标。有关自定义指标的更多信息,请参阅《Amazon CloudWatch 用户指南》中的发布自定义指标

对于由 KCL 上传到 CloudWatch 的指标,系统会象征性地收取少许费用;具体而言,将收取 Amazon CloudWatch 自定义指标Amazon CloudWatch API 请求费用。有关更多信息,请参阅 Amazon CloudWatch 定价

指标和命名空间

用于上传指标的命名空间是您在启动 KCL 时指定的应用程序名称。

指标级别和维度

可通过两个选项控制上传到 CloudWatch 的指标:

指标级别

每个指标分配有一个独立的级别。在您设置指标报告级别后,独立级别低于报告级别的指标将不会发送到 CloudWatch。级别如下:NONESUMMARYDETAILED。默认设置为 DETAILED;即,所有指标都将发送到 CloudWatch。NONE 报告级别意味着不会发送任何指标。有关将哪些级别分配到哪些指标的信息,请参阅 指标的列表

启用的维度

每个 KCL 指标都有会发送到 CloudWatch 的关联维度。在 KCL 2.x 中,如果将 KCL 配置为处理单个数据流,则默认启用所有指标维度(OperationShardIdWorkerIdentifier)。此外,在 KCL 2.x 中,如果将 KCL 配置为处理单个数据流,则无法禁用 Operation 维度。在 KCL 2.x 中,如果将 KCL 配置为处理多个数据流,则默认启用所有指标维度(OperationShardIdStreamIdWorkerIdentifier)。此外,在 KCL 2.x 中,如果将 KCL 配置为处理多个数据流,则无法禁用 OperationStreamId 维度。StreamId 维度仅对 per-shard 指标有效。

在 KCL 1.x 中,默认只启用 OperationShardId 维度,而 WorkerIdentifier 维度会被禁用。在 KCL 1.x 中,无法禁用 Operation 维度。

有关 CloudWatch 指标维度的更多信息,请参阅《Amazon CloudWatch 用户指南》中“Amazon CloudWatch 的概念”主题下的维度部分。

启用 WorkerIdentifier 维度后,如果特定 KCL 工作程序每次重新启动时使用的是不同的工作程序 ID 属性值,则会将新的指标组和新的 WorkerIdentifier 维度值组发送到 CloudWatch。如果您需要 WorkerIdentifier 维度值在特定的 KCL 工作程序重新启动时保持不变,则必须在每个工作程序初始化时显式指定相同的工作程序 ID 值。请注意,每个有效 KCL 工作程序的工作程序 ID 值在所有 KCL 工作程序中必须是唯一的。

指标配置

指标级别和启用的维度可使用 KinesisClientLibConfiguration 实例进行配置,该实例将在启动 KCL 应用程序时将传递给工作程序。在 MultiLangDaemon 案例中,metricsLevelmetricsEnabledDimensions 属性可在用于启动 MultiLangDaemon KCL 应用程序的 .properties 文件中指定。

可向指标级别分配下列三个值之一:NONE、SUMMARY 或 DETAILED。启用的维度值在 CloudWatch 指标允许的维度的列表中必须是以逗号分隔的字符串。KCL 应用程序使用的维度为 OperationShardIdWorkerIdentifier

指标的列表

下表列出了按作用域和操作分组的 KCL 指标。

Per-KCL-Application 指标

这些指标跨应用程序作用域内的所有 KCL 工作程序聚合一起,就像 Amazon CloudWatch 命名空间所定义的那样。

InitializeTask

InitializeTask 操作负责初始化 KCL 应用程序的记录处理器。此操作的逻辑包括从 Kinesis Data Streams 中获取分片迭代器并初始化记录处理程序。

指标 描述
KinesisDataFetcher.getIterator.Success

每个 KCL 应用程序的成功 GetShardIterator 操作数。

指标级别:详细

单位:计数

KinesisDataFetcher.getIterator.Time

给定 KCL 应用程序的每个 GetShardIterator 操作所花费的时间。

指标级别:详细

单位:毫秒

RecordProcessor.initialize.Time

记录处理器的初始化方法所花费的时间。

指标级别:汇总

单位:毫秒

成功

成功的记录处理程序初始化的数目。

指标级别:汇总

单位:计数

时间

KCL 工作程序初始化记录处理器所花费的时间。

指标级别:汇总

单位:毫秒

ShutdownTask

ShutdownTask 操作初始化分片处理的关闭顺序。这可能是因为分片被拆分或合并,或者当分片租赁从工作程序中丢失时。在这两种情况下,将调用记录处理程序 shutdown() 函数。在分片被拆分或合并的情况下也会发现新的分片,这将创建一个或两个新的分片。

指标 描述
CreateLease.Success

新的子分片在父分片关闭后成功添加到 KCL 应用程序 DynamoDB 表的次数。

指标级别:详细

单位:计数

CreateLease.Time

在 KCL 应用程序 DynamoDB 表中添加新的子分片信息所花费的时间。

指标级别:详细

单位:毫秒

UpdateLease.Success

记录处理程序关闭期间成功的最终检查点的数目。

指标级别:详细

单位:计数

UpdateLease.Time

记录处理程序关闭期间检查点操作所花费的时间。

指标级别:详细

单位:毫秒

RecordProcessor.shutdown.Time

记录处理器的关闭方法所花费的时间。

指标级别:汇总

单位:毫秒

成功

成功的关闭任务的数目。

指标级别:汇总

单位:计数

时间

KCL 工作程序关闭任务所花费的时间。

指标级别:汇总

单位:毫秒

ShardSyncTask

ShardSyncTask 操作会发现对 Kinesis 数据流的分片信息所做的更改,因此 KCL 应用程序可处理新的分片。

指标 描述
CreateLease.Success

将新的分片信息添加到 KCL 应用程序 DynamoDB 表的成功尝试次数。

指标级别:详细

单位:计数

CreateLease.Time

在 KCL 应用程序 DynamoDB 表中添加新的分片信息所花费的时间。

指标级别:详细

单位:毫秒

成功

成功的分片同步操作的数目。

指标级别:汇总

单位:计数

时间

分片同步操作所花费的时间。

指标级别:汇总

单位:毫秒

BlockOnParentTask

如果一个分片被拆分或与其他分片合并,则会创建新的子分片。BlockOnParentTask 操作确保新分片的记录处理在 KCL 完全处理父分片之前不会开始。

指标 描述
成功

父分片完成的成功检查的数目。

指标级别:汇总

单位:计数

时间

父分片完成所花费的时间。

指标级别:汇总

单位:毫秒

PeriodicShardSyncManager

PeriodicShardSyncManager 负责检查 KCL 消费端应用程序正在处理的数据流、识别具有部分租约的数据流并转交出去进行同步。

当 KCL 配置为处理单个数据流(随后将 NumStreamsToSync 和 NumStreamsWithPartialLeases 的值设置为 1),且 KCL 也配置为处理多个数据流时,以下指标可用。

指标 描述
NumStreamsToSync

消费端应用程序正在处理的数据流(每个 Amazon 账户)的数量,这些数据流包含部分租约并且必须移交以进行同步。

指标级别:汇总

单位:计数

NumStreamsWithPartialLeases

消费端应用程序正在处理的数据流(每个 Amazon 账户)的数量,这些数据流包含部分租约。

指标级别:汇总

单位:计数

成功

PeriodicShardSyncManager 能够成功识别消费端应用程序正在处理的数据流中部分租约的次数。

指标级别:汇总

单位:计数

时间

PeriodicShardSyncManager 检查消费端应用程序正在处理的数据流以确定哪些数据流需要分片同步所花费的时间(以毫秒为单位)。

指标级别:汇总

单位:毫秒

MultistreamTracker

MultistreamTracker 接口能够让您构建可以同时处理多个数据流的 KCL 消费端应用程序。

指标 描述
DeletedStreams.Count

在指定时段内删除的数据流数量。

指标级别:汇总

单位:计数

ActiveStreams.Count

正在处理的活动数据流的数量。

指标级别:汇总

单位:计数

StreamsPendingDeletion.Count

依据 FormerStreamsLeasesDeletionStrategy 待删除的数据流的数量。

指标级别:汇总

单位:计数

Per-Worker 指标

这些指标跨使用 Kinesis 数据流(例如 Amazon EC2 实例)中的数据的所有记录处理器进行聚合。

RenewAllLeases

RenewAllLeases 操作定期续订由特定工作程序实例拥有的分片租约。

指标 描述
RenewLease.Success

工作程序成功续订租约的数目。

指标级别:详细

单位:计数

RenewLease.Time

租约续订操作所花费的时间。

指标级别:详细

单位:毫秒

CurrentLeases

续订所有租约后由工作程序拥有的分片租约数。

指标级别:汇总

单位:计数

LostLeases

在尝试续订由工作程序拥有的所有租约后丢失的分片租约数。

指标级别:汇总

单位:计数

成功

工作程序的成功的租约续订操作次数。

指标级别:汇总

单位:计数

时间

续订工作程序的所有租约所花费的时间。

指标级别:汇总

单位:毫秒

TakeLeases

TakeLeases 操作使所有 KCL 工作程序之间的记录处理达到平衡。如果当前 KCL 工作程序拥有的分片租约少于所需的分片租约,则将从已过载的另一个工作程序中提取分片租约。

指标 描述
ListLeases.Success

成功从 KCL 应用程序 DynamoDB 表中检索所有分片租约的次数。

指标级别:详细

单位:计数

ListLeases.Time

从 KCL 应用程序 DynamoDB 表中检索所有分片租约所花费的时间。

指标级别:详细

单位:毫秒

TakeLease.Success

工作程序成功从其他 KCL 工作程序中提取分片租约的次数。

指标级别:详细

单位:计数

TakeLease.Time

利用该工作程序提取的租约更新租约表所花费的时间。

指标级别:详细

单位:毫秒

NumWorkers

工作程序总数,由特定工作程序标识。

指标级别:汇总

单位:计数

NeededLeases

当前工作程序为平衡分片处理负载所需的分片租约数。

指标级别:详细

单位:计数

LeasesToTake

工作程序将尝试提取的租约的数目。

指标级别:详细

单位:计数

TakenLeases

工作程序已成功提取的租约的数目。

指标级别:汇总

单位:计数

TotalLeases

KCL 应用程序正在处理的分片的总数。

指标级别:详细

单位:计数

ExpiredLeases

未由任何工作程序处理的分片的总数,由特定工作程序标识。

指标级别:汇总

单位:计数

成功

TakeLeases 操作已成功完成的次数。

指标级别:汇总

单位:计数

时间

工作程序的 TakeLeases 操作所花费的时间。

指标级别:汇总

单位:毫秒

Per-Shard 指标

这些指标跨单个记录处理程序聚合一起。

ProcessTask

ProcessTask 操作利用当前迭代器位置调用 GetRecords 以从流中检索记录并调用记录处理器 processRecords 函数。

指标 描述
KinesisDataFetcher.getRecords.Success

每个 Kinesis 数据流分片的成功 GetRecords 操作数。

指标级别:详细

单位:计数

KinesisDataFetcher.getRecords.Time

Kinesis 数据流分片的每个 GetRecords 操作所花费的时间。

指标级别:详细

单位:毫秒

UpdateLease.Success

给定分片的记录处理程序完成的成功检查点的数目。

指标级别:详细

单位:计数

UpdateLease.Time

给定分片的每个检查点操作所花费的时间。

指标级别:详细

单位:毫秒

DataBytesProcessed

每个 ProcessTask 调用所处理的记录的总大小(以字节为单位)。

指标级别:汇总

单位:字节

RecordsProcessed

每个 ProcessTask 调用所处理的记录的数量。

指标级别:汇总

单位:计数

ExpiredIterator

调用 GetRecords 时收到的 ExpiredIteratorException 的数量。

指标级别:汇总

单位:计数

MillisBehindLatest 当前迭代器晚于分片中最新记录 (tip) 的时间。此值为小于或等于响应中最新一条记录的时间和当前时间之间的时差。与比较最新一条响应记录中的时间戳相比,此指标可以更精确地反映分片相对于末端的距离。此值适用于最近一批记录,而不是每条记录中所有时间戳的平均值。

指标级别:汇总

单位:毫秒

RecordProcessor.processRecords.Time

记录处理器的 processRecords 方法所花费的时间。

指标级别:汇总

单位:毫秒

成功

成功处理任务操作的数目。

指标级别:汇总

单位:计数

时间

处理任务操作所花费的时间。

指标级别:汇总

单位:毫秒