Amazon Kinesis Data Streams
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

利用 Amazon CloudWatch 监控 Kinesis 客户端库

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

对于由 KCL 上传到 CloudWatch 的指标,需要收取名义上的费用;具体而言,将收取 Amazon CloudWatch 自定义指标Amazon CloudWatch API 请求 费用。有关更多信息,请参阅 Amazon CloudWatch 定价

指标和命名空间

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

指标级别和维度

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

指标级别

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

启用的维度

每个 KCL 指标都有一个也将发送到 CloudWatch 的关联维度。将始终上传并且不会禁用 Operation 维度。默认情况下,将禁用 WorkerIdentifier,并且仅上传 OperationShardId 维度。

有关 CloudWatch 指标维度的更多信息,请参阅 Amazon CloudWatch 用户指南 中的“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 指标。

针对 KCL 应用程序的指标

这些指标跨应用程序作用域内的所有 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 data stream 的分片信息所做的更改,因此 KCL 应用程序可处理新的分片。

指标 描述
CreateLease.Success

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

指标级别:详细

单位:计数

CreateLease.Time

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

指标级别:详细

单位:毫秒

成功

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

指标级别:汇总

单位:计数

时间

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

指标级别:汇总

单位:毫秒

BlockOnParentTask

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

指标 描述
成功

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

指标级别:汇总

单位:计数

时间

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

指标级别:汇总

单位:毫秒

Per-Worker 指标

这些指标跨使用 Kinesis data stream(例如 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 data stream 分片的成功 GetRecords 操作的数量。

指标级别:详细

单位:计数

KinesisDataFetcher.getRecords.Time

Kinesis data stream 分片的每个 GetRecords 操作所花费的时间。

指标级别:详细

单位:毫秒

UpdateLease.Success

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

指标级别:详细

单位:计数

UpdateLease.Time

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

指标级别:详细

单位:毫秒

DataBytesProcessed

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

指标级别:汇总

单位:字节

RecordsProcessed

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

指标级别:汇总

单位:计数

ExpiredIterator

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

指标级别:汇总

单位:计数

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

指标级别:汇总

单位:毫秒

RecordProcessor.processRecords.Time

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

指标级别:汇总

单位:毫秒

成功

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

指标级别:汇总

单位:计数

时间

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

指标级别:汇总

单位:毫秒