

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

# 监控 Kinesis Data Streams
<a name="monitoring"></a>

您可使用以下功能监控 Amazon Kinesis Data Streams 中的数据流：
+ [CloudWatch 指标](monitoring-with-cloudwatch.md) — Kinesis Data Streams 向 CloudWatch 亚马逊发送自定义指标，并对每个直播进行详细监控。
+ [Kinesis Agent](agent-health.md) — Kinesis 代理发布自定义 CloudWatch 指标，以帮助评估代理是否按预期运行。
+ [API 日志记录](logging-using-cloudtrail.md) – Kinesis Data Streams 使用 AWS CloudTrail 记录 API 调用并将数据存储在 Amazon S3 存储桶中。
+ [Kinesis Client Library](monitoring-with-kcl.md) – Kinesis Client Library（KCL）提供针对分片、工作程序和 KCL 应用程序的指标。
+ [Kinesis Producer Library](monitoring-with-kpl.md) – Amazon Kinesis Producer Library（KPL）提供针对分片、工作程序和 KPL 应用程序的指标。

有关常见监控问题、疑虑和问题排查的更多信息，请参阅以下文章：
+  [我应该使用哪些指标来监控和排查 Kinesis Data Streams 问题？](https://aws.amazon.com/premiumsupport/knowledge-center/kinesis-data-streams-troubleshoot/)
+ [为什么 Kinesis Data Streams 中的 IteratorAgeMilliseconds 价值不断增加？](https://aws.amazon.com/premiumsupport/knowledge-center/kinesis-data-streams-iteratorage-metric/)

# 使用亚马逊监控亚马逊 Kinesis Data Streams 服务 CloudWatch
<a name="monitoring-with-cloudwatch"></a>

亚马逊 Kinesis Data Streams 和 CloudWatch Amazon 已集成，因此您可以收集、查看和 CloudWatch分析 Kinesis 数据流的指标。例如，要跟踪分片使用情况，您可监控 `IncomingBytes` 和 `OutgoingBytes` 指标并将它们与流中分片数量进行比较。

系统会自动收集您配置的流指标和分片级指标，并将其推送到 CloudWatch 每分钟。指标会存档两周。两周后，数据会被丢弃。

下表介绍了适用于 Kinesis Data Streams 的基本型流级别监控和增强型分片级别监控。


| Type | 说明 | 
| --- | --- | 
|  基本 (流级)  |  每分钟自动发送流级数据是免费的。  | 
|  增强（分片级）  |  每分钟发送分片级数据需要额外付费。要获得此级别的数据，您必须使用 [EnableEnhancedMonitoring](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_EnableEnhancedMonitoring.html) 操作专门针对该流启用它。 有关定价的信息，请参阅 [Amazon CloudWatch 产品页面](https://aws.amazon.com/cloudwatch)。  | 

## Amazon Kinesis Data Streams 维度和指标
<a name="kinesis-metrics"></a>

Kinesis Data Streams 将指标发送 CloudWatch 到两个级别：流级别和分片级别（可选）。流级别指标适用于一般条件下的最常见的监控使用案例。分片级指标用于特定的监控任务，通常与问题排查相关，通过 [EnableEnhancedMonitoring](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_EnableEnhancedMonitoring.html) 操作启用。

有关从 CloudWatch 指标收集的统计数据的说明，请参阅 *Amazon CloudWatch 用户指南*中的[CloudWatch 统计数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#Statistic)。

**Topics**
+ [基本的流级指标](#kinesis-metrics-stream)
+ [增强的分片级指标](#kinesis-metrics-shard)
+ [Amazon Kinesis Data Streams 指标的维度](#kinesis-metricdimensions)
+ [推荐的 Amazon Kinesis Data Streams 指标](#kinesis-metric-use)

### 基本的流级指标
<a name="kinesis-metrics-stream"></a>

`AWS/Kinesis` 命名空间包括以下流级指标。

Kinesis Data Streams 将这些直播级别的指标发送 CloudWatch 到每分钟。这些指标始终可用。


| 指标 | 说明 | 
| --- | --- | 
| GetRecords.Bytes |  在指定时段内测量的从 Kinesis 流中检索的字节数。统计数据 Minimum、Maximum 和 Average 表示指定时段内流的单个 `GetRecords` 操作中的字节数。 分片级别指标名称：`OutgoingBytes` 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：字节  | 
| GetRecords.IteratorAge |  不再使用此指标。使用 `GetRecords.IteratorAgeMilliseconds`。  | 
| GetRecords.IteratorAgeMilliseconds |  在指定时段内测量的，对某个 Kinesis 流进行的所有 `GetRecords` 调用中最后一条记录的存在时间。存在时间是当前时间与最后一条 `GetRecords` 调用记录写入流的时间之差。Minimum 和 Maximum 统计数据可用于跟踪 Kinesis 消费端应用程序的进度。值为“零”表示正在读取的记录已完全与流匹配。 分片级别指标名称：`IteratorAgeMilliseconds` 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Samples 单位：毫秒  | 
| GetRecords.Latency |  在指定时段内测量的每个 `GetRecords` 操作所用的时间。 尺寸： StreamName 统计数据：Minimum、Maximum、Average 单位：毫秒  | 
| GetRecords.Records |  在指定时段内测量的从分片中检索的记录数。统计数据 Minimum、Maximum 和 Average 表示指定时段内流的单个 `GetRecords` 操作中的记录数。 分片级别指标名称：`OutgoingRecords` 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| GetRecords.Success |  在指定时段内测量的每个流中的成功 `GetRecords` 操作数。 尺寸： StreamName 统计数据：Average、Sum、Samples 单位：计数  | 
| IncomingBytes |  在指定时段内成功放入 Kinesis 流的字节数。该指标包含来自 `PutRecord` 和 `PutRecords` 的字节数。统计数据 Minimum、Maximum 和 Average 表示指定时段内流的单个 put 操作中的字节数。 分片级别指标名称：`IncomingBytes` 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：字节  | 
| IncomingRecords |  在指定时段内成功放入 Kinesis 流的记录数。该指标包含来自 `PutRecord` 和 `PutRecords` 的记录数。统计数据 Minimum、Maximum 和 Average 表示指定时段内流的单个 put 操作中的记录数。 分片级别指标名称：`IncomingRecords` 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| PutRecord.Bytes |  在指定时段内使用 `PutRecord` 操作放入 Kinesis 流的字节数。 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：字节  | 
| PutRecord.Latency |  在指定时段内测量的每个 `PutRecord` 操作所用的时间。 尺寸： StreamName 统计数据：Minimum、Maximum、Average 单位：毫秒  | 
| PutRecord.Success |  在指定时段内测量的每个 Kinesis 流中的成功 `PutRecord` 操作数。平均值反映了对流的成功写入的百分比。 尺寸： StreamName 统计数据：Average、Sum、Samples 单位：计数  | 
| PutRecords.Bytes |  在指定时段内使用 `PutRecords` 操作放入 Kinesis 流的字节数。 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：字节  | 
| PutRecords.Latency |  在指定时段内测量的每个 `PutRecords` 操作所用的时间。 尺寸： StreamName 统计数据：Minimum、Maximum、Average 单位：毫秒  | 
| PutRecords.Records |  此指标已弃用。使用 `PutRecords.SuccessfulRecords`。 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| PutRecords.Success |  在指定时段内测量的，每个 Kinesis 流中至少有一条记录成功的 `PutRecords` 操作的数量。 尺寸： StreamName 统计数据：Average、Sum、Samples 单位：计数  | 
| PutRecords.TotalRecords |  在指定时段内测量的，每个 Kinesis 数据流的 `PutRecords` 操作中发送的记录总数。 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| PutRecords.SuccessfulRecords |  在指定时段内测量的，每个 Kinesis 数据流的 `PutRecords` 操作中的成功记录数。 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| PutRecords.FailedRecords |  在指定时段内测量的，每个 Kinesis 数据流的 `PutRecords` 操作中因内部故障而遭拒的记录数。偶尔会出现内部故障，遇到之时请重试。 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| PutRecords.ThrottledRecords |  在指定时段内测量的，每个 Kinesis 数据流的 `PutRecords` 操作中因节流而遭拒的记录数。 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| ReadProvisionedThroughputExceeded |  在指定时段内针对流的受限的 `GetRecords` 调用数。此指标的最常用的统计数据为 Average。 当统计数据 Minimum 的值为 1 时，流的所有记录在指定时段内将受限。 当统计数据 Maximum 的值为 0（零）时，流的任何记录在指定时段内将不受限。 分片级别指标名称：`ReadProvisionedThroughputExceeded` 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| SubscribeToShard.RateExceeded | 当新订阅尝试失败时，将发出此指标，因为同一消费端已有活动订阅，或者超过了此操作允许的每秒调用数，也将发出此指标。尺寸： StreamName， ConsumerName | 
| SubscribeToShard.Success |  该指标记录 SubscribeToShard订阅是否成功建立。订阅最多只能有效 5 分钟。因此，该指标至少每 5 分钟发送一次。 尺寸： StreamName， ConsumerName  | 
| SubscribeToShardEvent.Bytes |  在指定时段内测量的从分片中接收的字节数。统计数据 Minimum、Maximum 和 Average 表示指定时段内单个事件中的已发布字节数。 分片级别指标名称：`OutgoingBytes` 尺寸： StreamName， ConsumerName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：字节  | 
| SubscribeToShardEvent.MillisBehindLatest |  读取记录距离流开头的毫秒数，表示消费端落后当前时间有多远。 尺寸： StreamName， ConsumerName 统计数据：Minimum、Maximum、Average、Samples 单位：毫秒  | 
| SubscribeToShardEvent.Records |  在指定时段内测量的从分片中接收的记录数。统计数据 Minimum、Maximum 和 Average 表示指定时段内单个事件中的记录数。 分片级别指标名称：`OutgoingRecords` 尺寸： StreamName， ConsumerName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| SubscribeToShardEvent.Success | 每次成功发布事件时都会发出此指标。只有在有活动订阅时，才会发出它。尺寸： StreamName， ConsumerName统计数据：Minimum、Maximum、Average、Sum、Samples单位：计数 | 
| WriteProvisionedThroughputExceeded |  在指定时段内因流限制而被拒绝的记录数。该指标包含来自 `PutRecord` 和 `PutRecords` 操作的限制。此指标的最常用的统计数据为 Average。 当统计数据 Minimum 的值不为零时，流的记录在指定时段内将受限。 当统计数据 Maximum 的值为 0（零）时，流的任何记录在指定时段内将不受限。 分片级别指标名称：`WriteProvisionedThroughputExceeded` 尺寸： StreamName 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 

### 增强的分片级指标
<a name="kinesis-metrics-shard"></a>

`AWS/Kinesis` 命名空间包括以下分片级指标。

Kinesis 每分钟向其发送以下分片级别的指标。 CloudWatch 每个指标维度都会创建 1 个 CloudWatch 指标，每月调用大约 43,200 `PutMetricData` 个 API。默认情况下，这些指标未启用。系统会对 Kinesis 发出的增强型指标收费。有关更多信息，请参阅 “[亚马逊* CloudWatch自定义指标” 标题下的亚马逊 CloudWatch *定价](https://aws.amazon.com/cloudwatch/pricing/)。按每个月每个指标每个分片收费。


| 指标 | 说明 | 
| --- | --- | 
| IncomingBytes |  在指定时段内成功放置到分片的字节数。该指标包含来自 `PutRecord` 和 `PutRecords` 的字节数。统计数据 Minimum、Maximum 和 Average 表示指定时段内分片的单个 put 操作中的字节数。 流级别指标名称：`IncomingBytes` 尺寸： StreamName， ShardId 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：字节  | 
| IncomingRecords |  在指定时段内成功放置到分片的记录数。该指标包含来自 `PutRecord` 和 `PutRecords` 的记录数。统计数据 Minimum、Maximum 和 Average 表示指定时段内分片的单个 put 操作中的记录数。 流级别指标名称：`IncomingRecords` 尺寸： StreamName， ShardId 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| IteratorAgeMilliseconds |  对某个分片进行的所有 `GetRecords` 调用中最后一条记录的存在时间，是在指定的时间段测量的。存在时间是当前时间与最后一条 `GetRecords` 调用记录写入流的时间之差。Minimum 和 Maximum 统计数据可用于跟踪 Kinesis 消费端应用程序的进度。值为 0（零）表示正在读取的记录已完全与流匹配。 流级别指标名称：`GetRecords.IteratorAgeMilliseconds` 尺寸： StreamName， ShardId 统计数据：Minimum、Maximum、Average、Samples 单位：毫秒  | 
| OutgoingBytes |  在指定时段内测量的从分片中检索的字节数。统计数据 Minimum、Maximum 和 Average 表示单个 `GetRecords` 操作中返回的字节数或指定时段内分片的单个 `SubscribeToShard` 事件中发布的字节数。 流级别指标名称：`GetRecords.Bytes` 尺寸： StreamName， ShardId 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：字节  | 
| OutgoingRecords |  在指定时段内测量的从分片中检索的记录数。统计数据 Minimum、Maximum 和 Average 表示单个 `GetRecords` 操作中返回的记录数或指定时段内分片的单个 `SubscribeToShard` 事件中发布的记录数。 流级别指标名称：`GetRecords.Records` 尺寸： StreamName， ShardId 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| ReadProvisionedThroughputExceeded |  在指定时段内针对分片的受限的 `GetRecords` 调用数。此异常计数涵盖了以下限制的所有维度：每秒读取每个分片 5 次或每分片每秒 2 MB。此指标的最常用的统计数据为 Average。 当统计数据 Minimum 的值为 1 时，分片的所有记录在指定时段内将受限。 当统计数据 Maximum 的值为 0（零）时，分片的任何记录在指定时段内将不受限。 流级别指标名称：`ReadProvisionedThroughputExceeded` 尺寸： StreamName， ShardId 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 
| WriteProvisionedThroughputExceeded |  在指定时段内因分片限制而被拒绝的记录数。此指标包括来自 `PutRecord` 和 `PutRecords` 操作的限制，并涵盖以下限制的所有维度：每分片每秒 1000 条记录或每分片每秒 1 MB。此指标的最常用的统计数据为 Average。 当统计数据 Minimum 的值不为零时，分片的记录在指定时段内将受限。 当统计数据 Maximum 的值为 0（零）时，分片的任何记录在指定时段内将不受限。 流级别指标名称：`WriteProvisionedThroughputExceeded` 尺寸： StreamName， ShardId 统计数据：Minimum、Maximum、Average、Sum、Samples 单位：计数  | 

### Amazon Kinesis Data Streams 指标的维度
<a name="kinesis-metricdimensions"></a>


|  维度  |  说明  | 
| --- | --- | 
|  StreamName  |  Kinesis 流的名称。所有可用统计数据按 `StreamName` 进行筛选。  | 

### 推荐的 Amazon Kinesis Data Streams 指标
<a name="kinesis-metric-use"></a>

Kinesis Data Streams 的客户可能会对 Amazon Kinesis Data Streams 的几个指标特别感兴趣。以下列表提供了推荐的指标及其用法。


| 指标 | 使用说明 | 
| --- | --- | 
|  `GetRecords.IteratorAgeMilliseconds`  |  跟踪流中所有分片和消费端的读取位置。如果某个迭代器的寿命超过了保留期的 50%（默认值为 24 小时，可配置为最高 7 天），则存在由于记录过期造成数据丢失的风险。我们建议您在最大值统计数据上使用 CloudWatch 警报，以便在此损失成为风险之前提醒您。要了解使用此指标的示例情景，请参阅[消费端记录处理滞后](troubleshooting-consumers.md#record-processing-falls-behind)。  | 
|  `ReadProvisionedThroughputExceeded`  |  当您的消费端端记录处理滞后时，有时难以确定瓶颈的位置。使用此指标可确定读取操作是否由于超出了读取吞吐量上限而受到限制。此指标的最常用的统计数据为 Average。  | 
| WriteProvisionedThroughputExceeded | 这与 ReadProvisionedThroughputExceeded 指标的用途相同，但是此指标用于流的创建者 (put) 端。此指标的最常用的统计数据为 Average。 | 
| PutRecord.Success, PutRecords.Success | 我们建议在 Average 统计数据上使用 CloudWatch 警报来指示何时无法进入直播。根据创建器所使用的对象选择一种或两种 put 类型。如果使用的是 Amazon Kinesis Producer Library（KPL），请使用 PutRecords.Success。 | 
| GetRecords.Success | 我们建议在 Average 统计数据上使用 CloudWatch 警报来指示数据流中何时出现记录失败。 | 

## 访问 Kinesis Data Streams 的亚马逊 CloudWatch 指标
<a name="cloudwatch-metrics"></a>

您可以使用控制台、命令行或 API 监控 Kinesis Data Streams CloudWatch 的指标。 CloudWatch 以下过程介绍如何使用这些不同的方式访问指标。

**使用 CloudWatch 控制台访问指标**

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航栏中，选择一个区域。

1. 在导航窗格中，选择**指标**。

1. 在 “**按类别划分的CloudWatch 指标**” 窗格中，选择 **Kinesis** 指标。

1. 单击相关行可查看指定**MetricName**和的统计信息**StreamName**。

   **注意：**除**读取吞吐量和**写入**吞吐 CloudWatch **量外，大多数控制台统计信息名称都与前面列出的相应指标名称相匹配。这些统计数据以 5 分钟为间隔计算：**写入吞吐量**监控`IncomingBytes` CloudWatch 指标，**读取吞吐量**监视器`GetRecords.Bytes`。

1. （可选）在图表窗格中，选择统计数据和时间段，然后使用这些设置创建 CloudWatch 警报。

**要访问指标，请使用 AWS CLI**  
使用[列表指标和命令](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html)。[get-metric-statistics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-statistics.html)

**使用 CloudWatch CLI 访问指标**  
使用 [mon-list-metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/cli/cli-mon-list-metrics.html) 和 [mon-get-stats](https://docs.aws.amazon.com/AmazonCloudWatch/latest/cli/cli-mon-get-stats.html) 命令。

**使用 CloudWatch API 访问指标**  
使用 [ListMetrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html) 和 [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html) 操作。

# 使用亚马逊监控 Kinesis Data Streams 代理运行状况 CloudWatch
<a name="agent-health"></a>

代理发布命名空间为的自定义 CloudWatch 指标**AWS KinesisAgent**。这些指标可帮助您评测代理是否按指定方式将数据提交到 Kinesis Data Streams、运行是否正常以及在数据创建器上是否使用适当数量的 CPU 和内存资源。记录数和发送的字节数等指标对于了解代理将数据提交到流的速率非常有用。当这些指标低于预期阈值一定的百分比或者降低为零时，可能表明存在配置问题、网络错误或代理运行状况问题。诸如主机上的 CPU 和内存消耗以及代理错误计数器等指标可用于指示数据创建器资源使用情况，并提供对潜在的配置或主机错误的深入分析。最后，代理还会记录服务异常，以帮助调查代理问题。这些指标在代理配置设置中指定的区域中报告`cloudwatch.endpoint`。 CloudWatch 从多个 Kinesis 代理发布的指标是汇总或合并的。有关代理配置的更多信息，请参阅[指定代理配置设置](writing-with-agents.md#agent-config-settings)。

## 使用监视器 CloudWatch
<a name="agent-metrics"></a>

Kinesis Data Streams 代理向发送以下指标 CloudWatch。


| 指标 | 说明 | 
| --- | --- | 
| BytesSent |  在指定时段内发送到 Kinesis Data Streams 的字节数。 单位：字节  | 
| RecordSendAttempts |  在指定的时间范围内对 `PutRecords` 的一次调用中尝试的记录数（第一次，或者作为重试）。 单位：计数  | 
| RecordSendErrors |  在指定时间范围内对 `PutRecords` 的一次调用中返回故障状态的记录数，包括重试。 单位：计数  | 
| ServiceErrors |  在指定时间范围内产生服务错误（限制错误之外的其他错误）的 `PutRecords` 调用次数。 单位：计数  | 

# 使用记录亚马逊 Kinesis Data Streams API 调用 AWS CloudTrail
<a name="logging-using-cloudtrail"></a>

Amazon Kinesis Data Streams AWS CloudTrail与一项服务集成，该服务提供用户、角色或 AWS 服务在 Kinesis Data Streams 中采取的操作的记录。 CloudTrail 将 Kinesis Data Streams 的所有 API 调用捕获为事件。捕获的调用包括来自 Kinesis Data Streams 控制台的调用以及对 Kinesis Data Streams API 操作的代码调用。如果您创建了跟踪，则可以允许将 CloudTrail 事件持续传输到 Amazon S3 存储桶，包括 Kinesis Data Streams 的事件。如果您未配置跟踪，您仍然可以在 CloudTrail 控制台的 “事件**历史记录” 中查看最新的事件**。使用收集的信息 CloudTrail，您可以确定向 Kinesis Data Streams 发出的请求、发出请求的 IP 地址、谁发出了请求、何时发出请求以及其他详细信息。

要了解更多信息 CloudTrail，包括如何配置和启用它，请参阅《[AWS CloudTrail 用户指南》](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

## Kinesis Data Streams 将信息流入 CloudTrail
<a name="service-name-info-in-cloudtrail"></a>

CloudTrail 在您创建 AWS 账户时已在您的账户上启用。当 Kinesis Dat CloudTrail a Streams 中出现支持的事件活动时，该活动会 AWS 与其他服务事件一起记录在事件历史记录**中**。您可以在自己的 AWS 账户中查看、搜索和下载最近发生的事件。有关更多信息，请参阅[使用 CloudTrail 事件历史记录查看事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

要持续记录 AWS 账户中的事件，包括 Kinesis Data Streams 的事件，请创建跟踪。*跟踪*允许 CloudTrail 将日志文件传输到 Amazon S3 存储桶。默认情况下，当您在控制台中创建跟踪时，该跟踪将应用于所有 AWS 区域。跟踪记录 AWS 分区中所有区域的事件，并将日志文件传送到您指定的 Amazon S3 存储桶。此外，您可以配置其他 AWS 服务，以进一步分析和处理 CloudTrail 日志中收集的事件数据。有关更多信息，请参阅下列内容：
+ [创建跟踪概述](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支持的服务和集成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [配置 Amazon SNS 通知 CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [接收来自多个区域的 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)和[接收来自多个账户的 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

Kinesis Data Streams 支持将以下操作作为事件记录 CloudTrail 在日志文件中：
+ [AddTagsToStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_AddTagsToStream.html)
+ [CreateStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_CreateStream.html)
+ [DecreaseStreamRetentionPeriod](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DecreaseStreamRetentionPeriod.html)
+ [DeleteStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DeleteStream.html)
+ [DeregisterStreamConsumer](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DeregisterStreamConsumer.html)
+ [DescribeStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStream.html)
+ [DescribeStreamConsumer](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStreamConsumer.html)
+ [DisableEnhancedMonitoring](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DisableEnhancedMonitoring.html)
+ [EnableEnhancedMonitoring](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_EnableEnhancedMonitoring.html)
+ [GetRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html)
+ [GetShardIterator](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html)
+ [IncreaseStreamRetentionPeriod](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_IncreaseStreamRetentionPeriod.html)
+ [ListStreamConsumers](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListStreamConsumers.html)
+ [ListStreams](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListStreams.html)
+ [ListTagsForStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListTagsForStream.html)
+ [MergeShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_MergeShards.html)
+ [PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html)
+ [PutRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html)
+ [RegisterStreamConsumer](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_RegisterStreamConsumer.html)
+ [RemoveTagsFromStream](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_RemoveTagsFromStream.html)
+ [SplitShard](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_SplitShard.html)
+ [StartStreamEncryption](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_StartStreamEncryption.html)
+ [StopStreamEncryption](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_StopStreamEncryption.html)
+ [SubscribeToShard](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_SubscribeToShard.html)
+ [UpdateShardCount](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_UpdateShardCount.html)
+ [UpdateStreamMode](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_UpdateStreamMode.html)

每个事件或日志条目都包含有关生成请求的人员信息。身份信息有助于您确定以下内容：
+ 请求是使用根证书还是 AWS Identity and Access Management (IAM) 用户凭证发出。
+ 请求是使用角色还是联合用户的临时安全凭证发出的。
+ 请求是否由其他 AWS 服务发出。

有关更多信息，请参阅 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

## 示例：Kinesis Data Firehose 日志文件条目
<a name="understanding-service-name-entries"></a>

跟踪是一种配置，允许将事件作为日志文件传输到您指定的 Amazon S3 存储桶。 CloudTrail 日志文件包含一个或多个日志条目。一个事件表示来自任何源的一个请求，包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息。 CloudTrail 日志文件不是公用 API 调用的有序堆栈跟踪，因此它们不会以任何特定顺序显示。

以下示例显示了一个演示`CreateStream`、、、`DescribeStream``ListStreams``DeleteStream``SplitShard`、和`MergeShards`操作的 CloudTrail 日志条目。

```
{
    "Records": [
        {
            "eventVersion": "1.01",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2014-04-19T00:16:31Z",
            "eventSource": "kinesis.amazonaws.com",
            "eventName": "CreateStream",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "shardCount": 1,
                "streamName": "GoodStream"
            },
            "responseElements": null,
            "requestID": "db6c59f8-c757-11e3-bc3b-57923b443c1c",
            "eventID": "b7acfcd0-6ca9-4ee1-a3d7-c4e8d420d99b"
        },
        {
            "eventVersion": "1.01",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2014-04-19T00:17:06Z",
            "eventSource": "kinesis.amazonaws.com",
            "eventName": "DescribeStream",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "streamName": "GoodStream"
            },
            "responseElements": null,
            "requestID": "f0944d86-c757-11e3-b4ae-25654b1d3136",
            "eventID": "0b2f1396-88af-4561-b16f-398f8eaea596"
        },
        {
            "eventVersion": "1.01",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2014-04-19T00:15:02Z",
            "eventSource": "kinesis.amazonaws.com",
            "eventName": "ListStreams",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "limit": 10
            },
            "responseElements": null,
            "requestID": "a68541ca-c757-11e3-901b-cbcfe5b3677a",
            "eventID": "22a5fb8f-4e61-4bee-a8ad-3b72046b4c4d"
        },
        {
            "eventVersion": "1.01",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2014-04-19T00:17:07Z",
            "eventSource": "kinesis.amazonaws.com",
            "eventName": "DeleteStream",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "streamName": "GoodStream"
            },
            "responseElements": null,
            "requestID": "f10cd97c-c757-11e3-901b-cbcfe5b3677a",
            "eventID": "607e7217-311a-4a08-a904-ec02944596dd"
        },
        {
            "eventVersion": "1.01",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2014-04-19T00:15:03Z",
            "eventSource": "kinesis.amazonaws.com",
            "eventName": "SplitShard",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "shardToSplit": "shardId-000000000000",
                "streamName": "GoodStream",
                "newStartingHashKey": "11111111"
            },
            "responseElements": null,
            "requestID": "a6e6e9cd-c757-11e3-901b-cbcfe5b3677a",
            "eventID": "dcd2126f-c8d2-4186-b32a-192dd48d7e33"
        },
        {
            "eventVersion": "1.01",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2014-04-19T00:16:56Z",
            "eventSource": "kinesis.amazonaws.com",
            "eventName": "MergeShards",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "streamName": "GoodStream",
                "adjacentShardToMerge": "shardId-000000000002",
                "shardToMerge": "shardId-000000000001"
            },
            "responseElements": null,
            "requestID": "e9f9c8eb-c757-11e3-bf1d-6948db3cd570",
            "eventID": "77cf0d06-ce90-42da-9576-71986fec411f"
        }
    ]
}
```

# 使用亚马逊监控 Kinesis 客户端库 CloudWatch
<a name="monitoring-with-kcl"></a>

适用于 Amazon K [inesis Data Streams 的 Kinesis 客户端库](https://docs.aws.amazon.com/kinesis/latest/dev/developing-consumers-with-kcl.html) (KCL) 使用您的 KCL 应用程序的名称作为命名空间，代表您发布自定义的 CloudWatch 亚马逊指标。您可以通过导航到[CloudWatch 控制台](https://console.aws.amazon.com/cloudwatch/)并选择 “**自定义指标” 来查看这些指标**。有关自定义指标的更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[发布自定义指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/publishingMetrics.html)。

KCL 上传到 CloudWatch 的指标收取象征性费用；具体而言，*亚马逊 CloudWatch 自定义指标和亚马逊 CloudWatch * *API 请求*会收取费用。有关更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

**Topics**
+ [指标和命名空间](#metrics-namespace)
+ [指标级别和维度](#metric-levels)
+ [指标配置](#metrics-config)
+ [指标列表](#kcl-metrics-list)

## 指标和命名空间
<a name="metrics-namespace"></a>

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

## 指标级别和维度
<a name="metric-levels"></a>

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

指标级别  
每个指标分配有一个独立的级别。当您设置指标报告级别时，个人级别低于报告级别的指标不会发送到 CloudWatch。级别如下：`NONE`、`SUMMARY` 和 `DETAILED`。默认设置为`DETAILED`；也就是说，所有指标都将发送到 CloudWatch。`NONE` 报告级别意味着不会发送任何指标。有关将哪些级别分配到哪些指标的信息，请参阅 [指标列表](#kcl-metrics-list)。

启用的维度  
每个 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 指标维度的更多信息，请参阅《亚马逊* CloudWatch 用户指南*》中 “亚马逊 CloudWatch 概念” 主题中的 “[维](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#Dimension)度” 部分。  
启用`WorkerIdentifier`维度后，如果每次特定 KCL 工作器重新启动时工作人员 ID 属性都使用不同的值，则会将具有新`WorkerIdentifier`维度值的新指标集发送到。 CloudWatch如果您需要 `WorkerIdentifier` 维度值在特定的 KCL 工作程序重新启动时保持不变，则必须在每个工作程序初始化时显式指定相同的工作程序 ID 值。请注意，每个有效 KCL 工作程序的工作程序 ID 值在所有 KCL 工作程序中必须是唯一的。

## 指标配置
<a name="metrics-config"></a>

指标级别和启用的维度可以使用实例进行配置，该 KinesisClientLibConfiguration 实例在启动 KCL 应用程序时会传递给 Worker。 MultiLangDaemon 在这种情况下，可以在用于启动 MultiLangDaemon KCL 应用程序的.properties 文件中指定`metricsLevel`和`metricsEnabledDimensions`属性。

可向指标级别分配下列三个值之一：NONE、SUMMARY 或 DETAILED。启用的维度值必须是以逗号分隔的字符串，其中包含指标允许使用的维度列表。 CloudWatch KCL 应用程序使用的维度为 `Operation`、`ShardId` 和 `WorkerIdentifier`。

## 指标列表
<a name="kcl-metrics-list"></a>

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

**Topics**
+ [Per-KCL-application 指标](#kcl-metrics-per-app)
+ [Per-worker 指标](#kcl-metrics-per-worker)
+ [Per-shard 指标](#kcl-metrics-per-shard)

### Per-KCL-application 指标
<a name="kcl-metrics-per-app"></a>

这些指标汇总了应用程序范围内所有 KCL 工作线程（由 Amazon CloudWatch 命名空间定义）。

**Topics**
+ [LeaseAssignmentManager](#lease-assignment-manager)
+ [InitializeTask](#init-task)
+ [ShutdownTask](#shutdown-task)
+ [ShardSyncTask](#shard-sync-task)
+ [BlockOnParentTask](#block-parent-task)
+ [PeriodicShardSyncManager](#periodic-task)
+ [MultistreamTracker](#multi-task)

#### LeaseAssignmentManager
<a name="lease-assignment-manager"></a>

`LeaseAssignmentManager` 操作负责向工作程序分配租约，并重新平衡工作程序之间的租约，以实现工作程序资源的均匀利用。此操作的逻辑包括从租约表中读取租约相关元数据，以及从工作程序指标表中读取指标，并执行租约分配。


| 指标 | 说明 | 
| --- | --- | 
|  LeaseAndWorkerMetricsLoad.Time  |  指在租约分配管理器（LAM）中加载所有租约和工作程序指标条目所花费的时间，LAM 是 KCL 3.x 中引入的新租约分配和负载均衡算法。 指标级别：详细 单位：毫秒  | 
| TotalLeases |  当前 KCL 应用程序的租约总数。 指标级别：汇总 单位：计数  | 
| NumWorkers |  当前 KCL 应用程序中的工作程序总数。 指标级别：汇总 单位：计数  | 
|  AssignExpiredOrUnassignedLeases.Time  |  指在内存中对过期租约进行分配的时间。 指标级别：详细 单位：毫秒  | 
| LeaseSpillover |  指由于达到每个工作程序的最大租约数或最大吞吐量限制而未分配的租约数。 指标级别：汇总 单位：计数  | 
|  BalanceWorkerVariance.Time  |  指在内存中进行工作程序之间租约平衡的时间。 指标级别：详细 单位：毫秒  | 
|  NumOfLeasesReassignment  |  指在当前重新分配迭代中重新分配的租约总数。 指标级别：汇总 单位：计数  | 
|  FailedAssignmentCount  |   AssignLease 调用 DynamoDB 租用表时失败的次数。 指标级别：详细 单位：计数  | 
|  ParallelyAssignLeases.Time  |  指向 DynamoDB 租约表刷新分配的时间。 指标级别：详细 单位：毫秒  | 
|  ParallelyAssignLeases. 成功  |  指成功刷新分配的次数。 指标级别：详细 单位：计数  | 
|  TotalStaleWorkerMetricsEntry  |  指必须清理的工作程序指标条目总数。 指标级别：详细 单位：计数  | 
| StaleWorkerMetricsCleanup.Time |  指从 DynamoDB 工作程序指标表中删除工作程序指标条目的时间。 指标级别：详细 单位：毫秒  | 
| 时间 |  `LeaseAssignmentManager` 操作花费的时间。 指标级别：汇总 单位：毫秒  | 
| 成功 |  `LeaseAssignmentManager` 操作已成功完成的次数。 指标级别：汇总 单位：计数  | 
| ForceLeaderRelease |  表示租约分配管理器已连续 3 次失败，且领导工作程序正在卸除领导权。 指标级别：汇总 单位：计数  | 
|  NumWorkersWithInvalidEntry  |  指视为无效的工作程序指标条目的数量。 指标级别：汇总 单位：计数  | 
|  NumWorkersWithFailingWorkerMetric  |  指工作程序指标条目数量，其中一个工作程序指标值为 -1（表示工作程序指标值不可用）。 指标级别：汇总 单位：计数  | 
|  LeaseDeserializationFailureCount  |  指租约表中未能反序列化的租约条目。 指标级别：汇总 单位：计数  | 

#### InitializeTask
<a name="init-task"></a>

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


| 指标 | 说明 | 
| --- | --- | 
| KinesisDataFetcher.getiterator.Success |  每个 KCL 应用程序的成功 `GetShardIterator` 操作数。 指标级别：详细 单位：计数  | 
| KinesisDataFetcher.getiterator.time |  给定 KCL 应用程序的每个 `GetShardIterator` 操作所花费的时间。 指标级别：详细 单位：毫秒  | 
| RecordProcessor.initialize.tim |  记录处理器的初始化方法所花费的时间。 指标级别：汇总 单位：毫秒  | 
| 成功 |  成功的记录处理程序初始化的数目。 指标级别：汇总 单位：计数  | 
| 时间 |  KCL 工作程序初始化记录处理器所花费的时间。 指标级别：汇总 单位：毫秒  | 

#### ShutdownTask
<a name="shutdown-task"></a>

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


| 指标 | 说明 | 
| --- | --- | 
| CreateLease. 成功 |  新的子分片在父分片关闭后成功添加到 KCL 应用程序 DynamoDB 表的次数。 指标级别：详细 单位：计数  | 
| CreateLease.Time |  在 KCL 应用程序 DynamoDB 表中添加新的子分片信息所花费的时间。 指标级别：详细 单位：毫秒  | 
| UpdateLease. 成功 |  记录处理程序关闭期间成功的最终检查点的数目。 指标级别：详细 单位：计数  | 
| UpdateLease.Time |  记录处理程序关闭期间检查点操作所花费的时间。 指标级别：详细 单位：毫秒  | 
| RecordProcessor.shutdown.time |  记录处理器的关闭方法所花费的时间。 指标级别：汇总 单位：毫秒  | 
| 成功 |  成功的关闭任务的数目。 指标级别：汇总 单位：计数  | 
| 时间 |  KCL 工作程序关闭任务所花费的时间。 指标级别：汇总 单位：毫秒  | 

#### ShardSyncTask
<a name="shard-sync-task"></a>

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


| 指标 | 说明 | 
| --- | --- | 
| CreateLease. 成功 |  将新的分片信息添加到 KCL 应用程序 DynamoDB 表的成功尝试次数。 指标级别：详细 单位：计数  | 
| CreateLease.Time |  在 KCL 应用程序 DynamoDB 表中添加新的分片信息所花费的时间。 指标级别：详细 单位：毫秒  | 
| 成功 |  成功的分片同步操作的数目。 指标级别：汇总 单位：计数  | 
| 时间 |  分片同步操作所花费的时间。 指标级别：汇总 单位：毫秒  | 

#### BlockOnParentTask
<a name="block-parent-task"></a>

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


| 指标 | 说明 | 
| --- | --- | 
| 成功 |  父分片完成的成功检查的数目。 指标级别：汇总 单位：计数  | 
| 时间 |  父分片完成所花费的时间。 指标级别：汇总 单位：毫秒  | 

#### PeriodicShardSyncManager
<a name="periodic-task"></a>

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

将 KCL 配置为处理单个数据流（然后将和的值设置 NumStreamsWithPartialLeases 为 1） NumStreamsToSync 以及将 KCL 配置为处理多个数据流时，以下指标可用。


| 指标 | 说明 | 
| --- | --- | 
| NumStreamsToSync |  包含部分租约且必须移交以进行同步的使用者应用程序正在处理的数据流（每个 AWS 账户）的数量。 指标级别：汇总 单位：计数  | 
| NumStreamsWithPartialLeases |  使用者应用程序正在处理的包含部分租约的数据流（每个 AWS 账户）的数量。 指标级别：汇总 单位：计数  | 
| 成功 |  `PeriodicShardSyncManager` 能够成功识别消费端应用程序正在处理的数据流中部分租约的次数。 指标级别：汇总 单位：计数  | 
| 时间 |  `PeriodicShardSyncManager` 检查消费端应用程序正在处理的数据流以确定哪些数据流需要分片同步所花费的时间（以毫秒为单位）。 指标级别：汇总 单位：毫秒  | 

#### MultistreamTracker
<a name="multi-task"></a>

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


| 指标 | 说明 | 
| --- | --- | 
| DeletedStreams.Count |  在指定时段内删除的数据流数量。 指标级别：汇总 单位：计数  | 
| ActiveStreams.Count |  正在处理的活动数据流的数量。 指标级别：汇总 单位：计数  | 
| StreamsPendingDeletion.Count |  依据 `FormerStreamsLeasesDeletionStrategy` 待删除的数据流的数量。 指标级别：汇总 单位：计数  | 

### Per-worker 指标
<a name="kcl-metrics-per-worker"></a>

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

**Topics**
+ [WorkerMetricStatsReporter](#worker-metrics-stats)
+ [LeaseDiscovery](#lease-discovery)
+ [RenewAllLeases](#renew-leases)
+ [TakeLeases](#take-leases)

#### WorkerMetricStatsReporter
<a name="worker-metrics-stats"></a>

`WorkerMetricStatReporter` 操作负责定期向工作程序指标表发布当前工作程序指标。`LeaseAssignmentManager` 操作使用这些指标来执行租约分配。


| 指标 | 说明 | 
| --- | --- | 
|  InMemoryMetricStatsReporterFailure  |  指由于某些工作程序指标失效而无法捕获内存中工作程序指标值的次数。 指标级别：汇总 单位：计数  | 
|  WorkerMetricStatsReporter.Time  |  `WorkerMetricsStats` 操作花费的时间。 指标级别：汇总 单位：毫秒  | 
|  WorkerMetricStatsReporter. 成功  |  `WorkerMetricsStats` 操作已成功完成的次数。 指标级别：汇总 单位：计数  | 

#### LeaseDiscovery
<a name="lease-discovery"></a>

`LeaseDiscovery` 操作负责确定由 `LeaseAssignmentManager` 操作分配给当前工作程序的新租约。此操作的逻辑包括通过读取租约表的全局二级索引来确定分配给当前工作程序的租约。


| 指标 | 说明 | 
| --- | --- | 
|  ListLeaseKeysForWorker.Time  |  指在租约表上调用全局二级索引并获取分配给当前工作程序的租约键的时间。 指标级别：详细 单位：毫秒  | 
|  FetchNewLeases.Time  |  指从租约表中获取所有新租约的时间。 指标级别：详细 单位：毫秒  | 
|  NewLeasesDiscovered  |  指分配给工作程序的新租约总数。 指标级别：详细 单位：计数  | 
|  时间  |  `LeaseDiscovery` 操作花费的时间。 指标级别：汇总 单位：毫秒  | 
|  成功  |  `LeaseDiscovery` 操作已成功完成的次数。 指标级别：汇总 单位：计数  | 
|  OwnerMismatch  |  指 GSI 响应和租约表的一致性读取中出现所有者不匹配的次数。 指标级别：详细 单位：计数  | 

#### RenewAllLeases
<a name="renew-leases"></a>

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


| 指标 | 说明 | 
| --- | --- | 
| RenewLease. 成功 |  工作程序成功续订租约的数目。 指标级别：详细 单位：计数  | 
| RenewLease.Time |  租约续订操作所花费的时间。 指标级别：详细 单位：毫秒  | 
| CurrentLeases |  续订所有租约后由工作程序拥有的分片租约数。 指标级别：汇总 单位：计数  | 
| LostLeases |  在尝试续订由工作程序拥有的所有租约后丢失的分片租约数。 指标级别：汇总 单位：计数  | 
| 成功 |  工作程序的成功的租约续订操作次数。 指标级别：汇总 单位：计数  | 
| 时间 |  续订工作程序的所有租约所花费的时间。 指标级别：汇总 单位：毫秒  | 

#### TakeLeases
<a name="take-leases"></a>

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


| 指标 | 说明 | 
| --- | --- | 
| ListLeases. 成功 |  成功从 KCL 应用程序 DynamoDB 表中检索所有分片租约的次数。 指标级别：详细 单位：计数  | 
| ListLeases.Time |  从 KCL 应用程序 DynamoDB 表中检索所有分片租约所花费的时间。 指标级别：详细 单位：毫秒  | 
| TakeLease. 成功 |  工作程序成功从其他 KCL 工作程序中提取分片租约的次数。 指标级别：详细 单位：计数  | 
| TakeLease.Time |  利用该工作程序提取的租约更新租约表所花费的时间。 指标级别：详细 单位：毫秒  | 
| NumWorkers |  工作程序总数，由特定工作程序标识。 指标级别：汇总 单位：计数  | 
| NeededLeases |  当前工作程序为平衡分片处理负载所需的分片租约数。 指标级别：详细 单位：计数  | 
| LeasesToTake |  工作程序将尝试提取的租约的数目。 指标级别：详细 单位：计数  | 
| TakenLeases |  工作程序已成功提取的租约的数目。 指标级别：汇总 单位：计数   | 
| TotalLeases |  KCL 应用程序正在处理的分片的总数。 指标级别：详细 单位：计数  | 
| ExpiredLeases |  未由任何工作程序处理的分片的总数，由特定工作程序标识。 指标级别：汇总 单位：计数  | 
| 成功 |  `TakeLeases` 操作已成功完成的次数。 指标级别：汇总 单位：计数  | 
| 时间 |  工作程序的 `TakeLeases` 操作所花费的时间。 指标级别：汇总 单位：毫秒  | 

### Per-shard 指标
<a name="kcl-metrics-per-shard"></a>

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

#### ProcessTask
<a name="process-task"></a>

`ProcessTask` 操作利用当前迭代器位置调用 [GetRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html) 以从流中检索记录并调用记录处理器 `processRecords` 函数。


| 指标 | 说明 | 
| --- | --- | 
| KinesisDataFetcher.getRecords.Su |  每个 Kinesis 数据流分片的成功 `GetRecords` 操作数。 指标级别：详细 单位：计数  | 
| KinesisDataFetcher.getRecords.tim |  Kinesis 数据流分片的每个 `GetRecords` 操作所花费的时间。 指标级别：详细 单位：毫秒  | 
| UpdateLease. 成功 |  给定分片的记录处理程序完成的成功检查点的数目。 指标级别：详细 单位：计数  | 
| UpdateLease.Time |  给定分片的每个检查点操作所花费的时间。 指标级别：详细 单位：毫秒  | 
| DataBytesProcessed |  每个 `ProcessTask` 调用所处理的记录的总大小（以字节为单位）。 指标级别：汇总 单位：字节  | 
| RecordsProcessed |  每个 `ProcessTask` 调用所处理的记录的数量。 指标级别：汇总 单位：计数  | 
| ExpiredIterator |  呼叫时 ExpiredIteratorException 收到的数量`GetRecords`。 指标级别：汇总 单位：计数  | 
| MillisBehindLatest | 当前迭代器晚于分片中最新记录 (tip) 的时间。此值为小于或等于响应中最新一条记录的时间和当前时间之间的时差。与比较最新一条响应记录中的时间戳相比，此指标可以更精确地反映分片相对于末端的距离。此值适用于最近一批记录，而不是每条记录中所有时间戳的平均值。指标级别：汇总单位：毫秒 | 
| RecordProcessor.processRecords |  记录处理器的 `processRecords` 方法所花费的时间。 指标级别：汇总 单位：毫秒  | 
| 成功 |  成功处理任务操作的数目。 指标级别：汇总 单位：计数  | 
| 时间 |  处理任务操作所花费的时间。 指标级别：汇总 单位：毫秒  | 

# 使用亚马逊监控 Kinesis 制作人库 CloudWatch
<a name="monitoring-with-kpl"></a>

[亚马逊 Kinesis Data Streams 的亚马逊 Kinesis 制作者库](https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-kpl.html) (KPL) 代表你发布自定义的 CloudWatch 亚马逊指标。您可以通过导航到[CloudWatch 控制台](https://console.aws.amazon.com/cloudwatch/)并选择 “**自定义指标” 来查看这些指标**。有关自定义指标的更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[发布自定义指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/publishingMetrics.html)。

KPL 上传到 CloudWatch 的指标收取象征性费用；具体而言，亚马逊 CloudWatch 自定义指标和亚马逊 CloudWatch API 请求会收取费用。有关更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。本地指标收集不会产生 CloudWatch 费用。

**Topics**
+ [指标、维度和命名空间](#kpl-metrics)
+ [指标级别和粒度](#kpl-metrics-granularity)
+ [本地访问和 Amazon CloudWatch 上传](#kpl-metrics-local-upload)
+ [指标列表](#kpl-metrics-list)

## 指标、维度和命名空间
<a name="kpl-metrics"></a>

您可在启动 KPL 时指定应用程序名称，该名称随后在上传指标时将用作命名空间的一部分。这是可选操作；如果未设置应用程序名称，则 KPL 会提供一个默认值。

您也可以配置 KPL 将任意其他维度添加到指标。如果您想在指标中包含更精细的数据，这很有用。 CloudWatch 例如，您可将主机名作为维度添加，随后该维度将允许您标识实例集中不均匀的负载分配。所有 KPL 配置设置是不可变的，因此您在初始化 KPL 实例后将无法更改其他维度。

## 指标级别和粒度
<a name="kpl-metrics-granularity"></a>

可通过两个选项控制已上传到 CloudWatch 的指标的数目：

*指标级别*  
这是对指标重要性的粗略估计。为每个指标分配了一个级别。当您设置级别时，级别低于该级别的指标不会发送到 CloudWatch。级别为 `NONE`、`SUMMARY` 和 `DETAILED`。默认设置为 `DETAILED`；即，所有指标。`NONE` 表示没有任何指标，因此实际上未为该级别分配任何指标。

*粒度*  
这可控制是否在其他粒度级别发出相同指标。级别为 `GLOBAL`、`STREAM` 和 `SHARD`。默认设置为 `SHARD`，其中包含粒度最高的指标。  
选择 `SHARD` 后，发出将流名称和分片 ID 作为维度的指标。此外，还发出仅具有流名称维度的相同指标和不带流名称的指标。这意味着，对于一个特定的指标，两个各有两个分片的流将生成七个 CloudWatch 指标：每个分片一个，每个流一个，总体一个；所有指标描述的统计数据相同，但粒度级别不同。有关说明，请见下图。  
层次结构中的不同粒度级别与系统中的所有指标构成了一个基于指标名称的树：  

```
MetricName (GLOBAL):           Metric X                    Metric Y
                                  |                           |
                           -----------------             ------------
                           |               |             |          |
StreamName (STREAM):    Stream A        Stream B      Stream A   Stream B
                           |               |
                        --------        ---------
                        |      |        |       |
ShardID (SHARD):     Shard 0 Shard 1  Shard 0 Shard 1
```
并不会在分片级别提供所有指标；一些指标本来就属于流级别或全局级别。不会在分片级别生成这些指标，即使已启用分片级别指标（上图中的 `Metric Y`）。  
在指定其他维度时，必须提供 `tuple:<DimensionName, DimensionValue, Granularity>` 的值。粒度用于确定自定义维度在层次结构中的插入位置：`GLOBAL` 表示其他维度将插入到指标名称的后面；`STREAM` 表示其他维度将插入到流名称的后面；`SHARD` 表示其他维度将插入到分片 ID 的后面。如果为每个粒度级别提供多个其他维度，则这些维度将按给定顺序插入。

## 本地访问和 Amazon CloudWatch 上传
<a name="kpl-metrics-local-upload"></a>

将实时本地提供当前 KPL 实例的指标；您可随时查询 KPL 以获得这些指标。KPL 在本地计算每个指标的总和、平均值、最小值、最大值和计数，如所示。 CloudWatch

您可获取从程序启动到当前时间点或在过去 *N* 秒内（其中 *N* 为介于 1 和 60 之间的整数）使用滚动窗口累积的统计数据。

所有指标均可上传至 CloudWatch。这在跨多台主机聚合数据、监控和警报时特别有用。此功能在本地不可用。

如前所述，您可选择使用*指标级别* 和*粒度* 设置来上传的指标。未上传的指标在本地可用。

不支持单独上传数据点，因为如果流量过高，则每秒会生成数以百万计的上传。因此，KPL 会在本地将指标聚合到 1 分钟存储桶中，并根据启用的指标将统计数据对象上传到每分钟 CloudWatch 一次。



## 指标列表
<a name="kpl-metrics-list"></a>


| 指标 | 说明 | 
| --- | --- | 
| UserRecordsReceived |  由放置操作的 KPL 内核接收的逻辑用户记录的计数。在分片级别不可用。 指标级别：详细  单位：个   | 
| UserRecordsPending |  当前挂起的用户记录的数目的定期取样。如果记录当前已缓冲并等待发送，或已发送和正在发送到后端服务，则记录处于挂起状态。在分片级别不可用。 KPL 提供了专用方法在全局级别检索此指标，以便客户管理其放置速率。 指标级别：详细  单位：个   | 
| UserRecordsPut |  已成功放置的逻辑用户记录的计数。 KPL 会输出零作为失败记录数。这允许用于提供成功率的平均值、用于提供总尝试数的计数以及用于提供失败计数的计数与总和之间的差值。 指标级别：汇总 单位：个  | 
| UserRecordsDataPut |  逻辑用户记录成功放置的字节数。 指标级别：详细  单位：字节   | 
| KinesisRecordsPut |  已成功放置的 Kinesis Data Streams 记录的计数（每条 Kinesis Data Streams 记录均可包含多条用户记录）。 KPL 会输出零作为失败记录数。这允许用于提供成功率的平均值、用于提供总尝试数的计数以及用于提供失败计数的计数与总和之间的差值。 指标级别：汇总  单位：个   | 
| KinesisRecordsDataPut |  Kinesis Data Streams 记录中的字节数。 指标级别：详细  单位：字节   | 
| ErrorsByCode |  每种错误代码的计数。这引入了 `ErrorCode` 和 `StreamName` 等正常维度以及 `ShardId` 的其他维度。并非每个错误都可跟踪到分片。无法跟踪的错误仅在流或全局级别发出。此指标捕获有关限制、分片映射更改、内部故障、服务不可用、超时等的信息。 每条 Kinesis Data Streams 记录计算一次 Kinesis Data Streams API 错误。Kinesis Data Streams 记录中的多条用户记录不会生成多个计数。 指标级别：汇总  单位：个   | 
| AllErrors |  这是由与 **Errors by Code** 相同的错误引发的，但并不区分类型。这在常规监控错误率而不需要手动汇总所有不同类型错误的计数时非常有用。 指标级别：汇总  单位：个   | 
| RetriesPerRecord |  每个用户记录执行的重试次数。为一次性尝试成功的记录发出零。 在用户记录完成时（成功时或不再能够重试时）发出数据。如果记录值 time-to-live很大，则该指标可能会延迟很长时间。 指标级别：详细  单位：个   | 
| BufferingTime |  用户记录到达 KPL 和离开前往后端之间的时间。此信息将基于记录传回给用户，还可用作聚合的统计数据。 指标级别：汇总  单位：毫秒   | 
| Request Time |  执行 `PutRecordsRequests` 所花费的时间。 指标级别：详细  单位：毫秒   | 
| User Records per Kinesis Record |  已聚合到单条 Kinesis Data Streams 记录中的逻辑用户记录的数目。 指标级别：详细  单位：个   | 
| Amazon Kinesis Records per PutRecordsRequest |  已聚合到单个 `PutRecordsRequest` 中的 Kinesis Data Streams 记录的数目。在分片级别不可用。 指标级别：详细  单位：个   | 
| User Records per PutRecordsRequest |  包含在 `PutRecordsRequest` 中的用户记录的总数。这大致相当于之前两个指标的产品。在分片级别不可用。 指标级别：详细  单位：个   | 