使用 Amazon CloudWatch 监控 Kinesis Client Library
适用于 Amazon Kinesis Data Streams 的 Kinesis Client Library(KCL)会代表您发布自定义 Amazon CloudWatch 指标,并使用您 KCL 应用程序的名称作为命名空间。您可以通过导航至 CloudWatch 控制台
对于由 KCL 上传到 CloudWatch 的指标,系统会象征性地收取少许费用;具体而言,将收取 Amazon CloudWatch 自定义指标和 Amazon CloudWatch API 请求费用。有关更多信息,请参阅 Amazon CloudWatch 定价
指标和命名空间
用于上传指标的命名空间是您在启动 KCL 时指定的应用程序名称。
指标级别和维度
可通过两个选项控制上传到 CloudWatch 的指标:
- 指标级别
-
每个指标分配有一个独立的级别。在您设置指标报告级别后,独立级别低于报告级别的指标将不会发送到 CloudWatch。级别如下:
NONE、SUMMARY和DETAILED。默认设置为DETAILED;即,所有指标都将发送到 CloudWatch。NONE报告级别意味着不会发送任何指标。有关将哪些级别分配到哪些指标的信息,请参阅 指标的列表。 - 启用的维度
-
每个 KCL 指标都有会发送到 CloudWatch 的关联维度。在 KCL 2.x 中,如果将 KCL 配置为处理单个数据流,则默认启用所有指标维度(
Operation、ShardId和WorkerIdentifier)。此外,在 KCL 2.x 中,如果将 KCL 配置为处理单个数据流,则无法禁用Operation维度。在 KCL 2.x 中,如果将 KCL 配置为处理多个数据流,则默认启用所有指标维度(Operation、ShardId、StreamId和WorkerIdentifier)。此外,在 KCL 2.x 中,如果将 KCL 配置为处理多个数据流,则无法禁用Operation和StreamId维度。StreamId维度仅对 per-shard 指标有效。在 KCL 1.x 中,默认只启用
Operation和ShardId维度,而WorkerIdentifier维度会被禁用。在 KCL 1.x 中,无法禁用Operation维度。有关 CloudWatch 指标维度的更多信息,请参阅《Amazon CloudWatch 用户指南》中“Amazon CloudWatch 的概念”主题下的维度部分。
启用
WorkerIdentifier维度后,如果特定 KCL 工作程序每次重新启动时使用的是不同的工作程序 ID 属性值,则会将新的指标组和新的WorkerIdentifier维度值组发送到 CloudWatch。如果您需要WorkerIdentifier维度值在特定的 KCL 工作程序重新启动时保持不变,则必须在每个工作程序初始化时显式指定相同的工作程序 ID 值。请注意,每个有效 KCL 工作程序的工作程序 ID 值在所有 KCL 工作程序中必须是唯一的。
指标配置
指标级别和启用的维度可使用 KinesisClientLibConfiguration 实例进行配置,该实例将在启动 KCL 应用程序时将传递给工作程序。在 MultiLangDaemon 案例中,metricsLevel 和 metricsEnabledDimensions 属性可在用于启动 MultiLangDaemon KCL 应用程序的 .properties 文件中指定。
可向指标级别分配下列三个值之一:NONE、SUMMARY 或 DETAILED。启用的维度值在 CloudWatch 指标允许的维度的列表中必须是以逗号分隔的字符串。KCL 应用程序使用的维度为 Operation、ShardId 和 WorkerIdentifier。
指标的列表
下表列出了按作用域和操作分组的 KCL 指标。
Per-KCL-application 指标
这些指标跨应用程序作用域内的所有 KCL 工作程序聚合一起,就像 Amazon CloudWatch 命名空间所定义的那样。
主题
LeaseAssignmentManager
LeaseAssignmentManager 操作负责向工作程序分配租约,并重新平衡工作程序之间的租约,以实现工作程序资源的均匀利用。此操作的逻辑包括从租约表中读取租约相关元数据,以及从工作程序指标表中读取指标,并执行租约分配。
| 指标 | 描述 |
|---|---|
|
LeaseAndWorkerMetricsLoad.Time |
指在租约分配管理器 (LAM) 中加载所有租约和工作程序指标条目所花费的时间,LAM 是 KCL 3.x 中引入的新租约分配和负载均衡算法。 指标级别:详细 单位:毫秒 |
| TotalLeases |
当前 KCL 应用程序的租约总数。 指标级别:汇总 单位:计数 |
| NumWorkers |
当前 KCL 应用程序中的工作程序总数。 指标级别:汇总 单位:计数 |
|
AssignExpiredOrUnassignedLeases.Time |
指在内存中对过期租约进行分配的时间。 指标级别:详细 单位:毫秒 |
| LeaseSpillover |
指由于达到每个工作程序的最大租约数或最大吞吐量限制而未分配的租约数。 指标级别:汇总 单位:计数 |
|
BalanceWorkerVariance.Time |
指在内存中进行工作程序之间租约平衡的时间。 指标级别:详细 单位:毫秒 |
|
NumOfLeasesReassignment |
指在当前重新分配迭代中重新分配的租约总数。 指标级别:汇总 单位:计数 |
|
FailedAssignmentCount |
指对 DynamoDB 租约表进行 AssignLease 调用失败的次数。 指标级别:详细 单位:计数 |
|
ParallelyAssignLeases.Time |
指向 DynamoDB 租约表刷新分配的时间。 指标级别:详细 单位:毫秒 |
|
ParallelyAssignLeases.Success |
指成功刷新分配的次数。 指标级别:详细 单位:计数 |
|
TotalStaleWorkerMetricsEntry |
指必须清理的工作程序指标条目总数。 指标级别:详细 单位:计数 |
| StaleWorkerMetricsCleanup.Time |
指从 DynamoDB 工作程序指标表中删除工作程序指标条目的时间。 指标级别:详细 单位:毫秒 |
| Time |
指标级别:汇总 单位:毫秒 |
| 成功 |
指标级别:汇总 单位:计数 |
| ForceLeaderRelease |
表示租约分配管理器已连续 3 次失败,且领导工作程序正在卸除领导权。 指标级别:汇总 单位:计数 |
|
NumWorkersWithInvalidEntry |
指视为无效的工作程序指标条目的数量。 指标级别:汇总 单位:计数 |
|
NumWorkersWithFailingWorkerMetric |
指工作程序指标条目数量,其中一个工作程序指标值为 -1(表示工作程序指标值不可用)。 指标级别:汇总 单位:计数 |
|
LeaseDeserializationFailureCount |
指租约表中未能反序列化的租约条目。 指标级别:汇总 单位:计数 |
InitializeTask
InitializeTask 操作负责初始化 KCL 应用程序的记录处理器。此操作的逻辑包括从 Kinesis Data Streams 中获取分片迭代器并初始化记录处理程序。
| 指标 | 描述 |
|---|---|
| KinesisDataFetcher.getIterator.Success |
每个 KCL 应用程序的成功 指标级别:详细 单位:计数 |
| KinesisDataFetcher.getIterator.Time |
给定 KCL 应用程序的每个 指标级别:详细 单位:毫秒 |
| RecordProcessor.initialize.Time |
记录处理器的初始化方法所花费的时间。 指标级别:汇总 单位:毫秒 |
| 成功 |
成功的记录处理程序初始化的数目。 指标级别:汇总 单位:计数 |
| Time |
KCL 工作程序初始化记录处理器所花费的时间。 指标级别:汇总 单位:毫秒 |
ShutdownTask
ShutdownTask 操作初始化分片处理的关闭顺序。这可能是因为分片被拆分或合并,或者当分片租赁从工作程序中丢失时。在这两种情况下,将调用记录处理程序 shutdown() 函数。在分片被拆分或合并的情况下也会发现新的分片,这将创建一个或两个新的分片。
| 指标 | 描述 |
|---|---|
| CreateLease.Success |
新的子分片在父分片关闭后成功添加到 KCL 应用程序 DynamoDB 表的次数。 指标级别:详细 单位:计数 |
| CreateLease.Time |
在 KCL 应用程序 DynamoDB 表中添加新的子分片信息所花费的时间。 指标级别:详细 单位:毫秒 |
| UpdateLease.Success |
记录处理程序关闭期间成功的最终检查点的数目。 指标级别:详细 单位:计数 |
| UpdateLease.Time |
记录处理程序关闭期间检查点操作所花费的时间。 指标级别:详细 单位:毫秒 |
| RecordProcessor.shutdown.Time |
记录处理器的关闭方法所花费的时间。 指标级别:汇总 单位:毫秒 |
| 成功 |
成功的关闭任务的数目。 指标级别:汇总 单位:计数 |
| Time |
KCL 工作程序关闭任务所花费的时间。 指标级别:汇总 单位:毫秒 |
ShardSyncTask
ShardSyncTask 操作会发现对 Kinesis 数据流的分片信息所做的更改,因此 KCL 应用程序可处理新的分片。
| 指标 | 描述 |
|---|---|
| CreateLease.Success |
将新的分片信息添加到 KCL 应用程序 DynamoDB 表的成功尝试次数。 指标级别:详细 单位:计数 |
| CreateLease.Time |
在 KCL 应用程序 DynamoDB 表中添加新的分片信息所花费的时间。 指标级别:详细 单位:毫秒 |
| 成功 |
成功的分片同步操作的数目。 指标级别:汇总 单位:计数 |
| Time |
分片同步操作所花费的时间。 指标级别:汇总 单位:毫秒 |
BlockOnParentTask
如果一个分片被拆分或与其他分片合并,则会创建新的子分片。BlockOnParentTask 操作确保新分片的记录处理在 KCL 完全处理父分片之前不会开始。
| 指标 | 描述 |
|---|---|
| 成功 |
父分片完成的成功检查的数目。 指标级别:汇总 单位:计数 |
| Time |
父分片完成所花费的时间。 指标级别:汇总 单位:毫秒 |
PeriodicShardSyncManager
PeriodicShardSyncManager 负责检查 KCL 消费端应用程序正在处理的数据流、识别具有部分租约的数据流并转交出去进行同步。
当 KCL 配置为处理单个数据流(随后将 NumStreamsToSync 和 NumStreamsWithPartialLeases 的值设置为 1),且 KCL 也配置为处理多个数据流时,以下指标可用。
| 指标 | 描述 |
|---|---|
| NumStreamsToSync |
消费端应用程序正在处理的数据流(每个 Amazon 账户)的数量,这些数据流包含部分租约并且必须移交以进行同步。 指标级别:汇总 单位:计数 |
| NumStreamsWithPartialLeases |
消费端应用程序正在处理的数据流(每个 Amazon 账户)的数量,这些数据流包含部分租约。 指标级别:汇总 单位:计数 |
| 成功 |
指标级别:汇总 单位:计数 |
| Time |
指标级别:汇总 单位:毫秒 |
MultistreamTracker
MultistreamTracker 接口能够让您构建可以同时处理多个数据流的 KCL 消费端应用程序。
| 指标 | 描述 |
|---|---|
| DeletedStreams.Count |
在指定时段内删除的数据流数量。 指标级别:汇总 单位:计数 |
| ActiveStreams.Count |
正在处理的活动数据流的数量。 指标级别:汇总 单位:计数 |
| StreamsPendingDeletion.Count |
依据 指标级别:汇总 单位:计数 |
Per-worker 指标
这些指标跨使用 Kinesis 数据流(例如 Amazon EC2 实例)中的数据的所有记录处理器进行聚合。
WorkerMetricStatsReporter
WorkerMetricStatReporter 操作负责定期向工作程序指标表发布当前工作程序指标。LeaseAssignmentManager 操作使用这些指标来执行租约分配。
| 指标 | 描述 |
|---|---|
|
InMemoryMetricStatsReporterFailure |
指由于某些工作程序指标失效而无法捕获内存中工作程序指标值的次数。 指标级别:汇总 单位:计数 |
|
WorkerMetricStatsReporter.Time |
指标级别:汇总 单位:毫秒 |
|
WorkerMetricStatsReporter.Success |
指标级别:汇总 单位:计数 |
LeaseDiscovery
LeaseDiscovery 操作负责确定由 LeaseAssignmentManager 操作分配给当前工作程序的新租约。此操作的逻辑包括通过读取租约表的全局二级索引来确定分配给当前工作程序的租约。
| 指标 | 描述 |
|---|---|
|
ListLeaseKeysForWorker.Time |
指在租约表上调用全局二级索引并获取分配给当前工作程序的租约键的时间。 指标级别:详细 单位:毫秒 |
|
FetchNewLeases.Time |
指从租约表中获取所有新租约的时间。 指标级别:详细 单位:毫秒 |
|
NewLeasesDiscovered |
指分配给工作程序的新租约总数。 指标级别:详细 单位:计数 |
|
Time |
指标级别:汇总 单位:毫秒 |
|
成功 |
指标级别:汇总 单位:计数 |
|
OwnerMismatch |
指 GSI 响应和租约表的一致性读取中出现所有者不匹配的次数。 指标级别:详细 单位:计数 |
RenewAllLeases
RenewAllLeases 操作定期续订由特定工作程序实例拥有的分片租约。
| 指标 | 描述 |
|---|---|
| RenewLease.Success |
工作程序成功续订租约的数目。 指标级别:详细 单位:计数 |
| RenewLease.Time |
租约续订操作所花费的时间。 指标级别:详细 单位:毫秒 |
| CurrentLeases |
续订所有租约后由工作程序拥有的分片租约数。 指标级别:汇总 单位:计数 |
| LostLeases |
在尝试续订由工作程序拥有的所有租约后丢失的分片租约数。 指标级别:汇总 单位:计数 |
| 成功 |
工作程序的成功的租约续订操作次数。 指标级别:汇总 单位:计数 |
| Time |
续订工作程序的所有租约所花费的时间。 指标级别:汇总 单位:毫秒 |
TakeLeases
TakeLeases 操作使所有 KCL 工作程序之间的记录处理达到平衡。如果当前 KCL 工作程序拥有的分片租约少于所需的分片租约,则将从已过载的另一个工作程序中提取分片租约。
| 指标 | 描述 |
|---|---|
| ListLeases.Success |
成功从 KCL 应用程序 DynamoDB 表中检索所有分片租约的次数。 指标级别:详细 单位:计数 |
| ListLeases.Time |
从 KCL 应用程序 DynamoDB 表中检索所有分片租约所花费的时间。 指标级别:详细 单位:毫秒 |
| TakeLease.Success |
工作程序成功从其他 KCL 工作程序中提取分片租约的次数。 指标级别:详细 单位:计数 |
| TakeLease.Time |
利用该工作程序提取的租约更新租约表所花费的时间。 指标级别:详细 单位:毫秒 |
| NumWorkers |
工作程序总数,由特定工作程序标识。 指标级别:汇总 单位:计数 |
| NeededLeases |
当前工作程序为平衡分片处理负载所需的分片租约数。 指标级别:详细 单位:计数 |
| LeasesToTake |
工作程序将尝试提取的租约的数目。 指标级别:详细 单位:计数 |
| TakenLeases |
工作程序已成功提取的租约的数目。 指标级别:汇总 单位:计数 |
| TotalLeases |
KCL 应用程序正在处理的分片的总数。 指标级别:详细 单位:计数 |
| ExpiredLeases |
未由任何工作程序处理的分片的总数,由特定工作程序标识。 指标级别:汇总 单位:计数 |
| 成功 |
指标级别:汇总 单位:计数 |
| Time |
工作程序的 指标级别:汇总 单位:毫秒 |
Per-shard 指标
这些指标跨单个记录处理程序聚合一起。
ProcessTask
ProcessTask 操作利用当前迭代器位置调用 GetRecords 以从流中检索记录并调用记录处理器 processRecords 函数。
| 指标 | 描述 |
|---|---|
| KinesisDataFetcher.getRecords.Success |
每个 Kinesis 数据流分片的成功 指标级别:详细 单位:计数 |
| KinesisDataFetcher.getRecords.Time |
Kinesis 数据流分片的每个 指标级别:详细 单位:毫秒 |
| UpdateLease.Success |
给定分片的记录处理程序完成的成功检查点的数目。 指标级别:详细 单位:计数 |
| UpdateLease.Time |
给定分片的每个检查点操作所花费的时间。 指标级别:详细 单位:毫秒 |
| DataBytesProcessed |
每个 指标级别:汇总 单位:字节 |
| RecordsProcessed |
每个 指标级别:汇总 单位:计数 |
| ExpiredIterator |
调用 指标级别:汇总 单位:计数 |
| MillisBehindLatest | 当前迭代器晚于分片中最新记录 (tip) 的时间。此值为小于或等于响应中最新一条记录的时间和当前时间之间的时差。与比较最新一条响应记录中的时间戳相比,此指标可以更精确地反映分片相对于末端的距离。此值适用于最近一批记录,而不是每条记录中所有时间戳的平均值。 指标级别:汇总 单位:毫秒 |
| RecordProcessor.processRecords.Time |
记录处理器的 指标级别:汇总 单位:毫秒 |
| 成功 |
成功处理任务操作的数目。 指标级别:汇总 单位:计数 |
| Time |
处理任务操作所花费的时间。 指标级别:汇总 单位:毫秒 |