View a markdown version of this page

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

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

监控数据交付

使用本主题学习如何使用 Amazon CloudWatch 指标、 CloudWatch 日志和监控您的配送 Amazon CloudTrail。

CloudWatch 指标

每次交付都会将指标发布到AWS/Kinesis命名空间 CloudWatch 中。指标名称以目标类型为前缀:DeliveryToS3用于一般用途 Amazon S3 交付和DeliveryToIceberg流式传输表传输。使用这些指标来监控配送的运行状况和绩效。

下表列出了一般用途 Amazon S3 交付的指标 (DeliveryToS3)。

指标名称 单位 说明
DeliveryToS3.DataFreshness 秒 尚未送达目的地的最早记录的年龄。价值上升表明交付落后。
DeliveryToS3.BytesIn 字节 从流中读入传输路径的数据量。
DeliveryToS3.BytesProcessed 字节 交付处理的数据量。
DeliveryToS3.BytesOut 字节 写入目标的数据量。
DeliveryToS3.RecordCount 计数 从流中读取的记录总数。
DeliveryToS3.SuccessfulRecordCount 计数 成功传送到目的地的记录数。
DeliveryToS3.FailedRecordCount 计数 传送失败的记录数。非零值是关键的错误信号。
DeliveryToS3.DeliverySuccess 计数 成功交付操作的数量。
DeliveryToS3.DLQDeliverySuccess 计数 成功写入死信队列的记录数。

下表列出了流式传输表交付的指标 (DeliveryToIceberg)。

指标名称 单位 说明
DeliveryToIceberg.DataFreshness 秒 尚未送到表格的最早记录的年龄。价值上升表明交付落后。
DeliveryToIceberg.BytesIn 字节 从流中读入传输路径的数据量。
DeliveryToIceberg.BytesProcessed 字节 交付处理的数据量。
DeliveryToIceberg.BytesOut 字节 写入表的数据量。
DeliveryToIceberg.TotalRowCount 计数 从流中读取的总行数。
DeliveryToIceberg.SuccessfulRowCount 计数 成功传送到表中的行数。
DeliveryToIceberg.FailedRowCount 计数 传送失败的行数。非零值是关键的错误信号。
DeliveryToIceberg.CommitSuccess 计数 成功提交 Iceberg 的次数。
DeliveryToIceberg.DLQDeliverySuccess 计数 成功写入死信队列的记录数。

Dimensions

发布的配送指标采用以下维度:

  • ChannelName— 配送名称。

  • ChannelId— 交货的唯一标识符。

  • StreamName— 源 Kinesis Data Streams 流的名称。

注意

要在 CloudWatch 警报中定位特定的交付,请指定所有三个维度。要使用GetMetricData和进行浏览或查询ListMetrics,您可以按维度的子集进行筛选,例如ChannelName单独筛选。

建议的警报

下表列出了推荐的配送 CloudWatch 警报。

警报 指标 条件 说明
故障率高 DeliveryToS3.FailedRecordCount > 0 持续 5 分钟 记录传送失败。调查架构不匹配或目标问题。
数据新鲜度降低 DeliveryToS3.DataFreshness > 阈值 数据交付落在了后面。调查交付问题,例如缺少服务执行角色的权限或目的地的限制。
未传送任何数据 DeliveryToS3.SuccessfulRecordCount = 0 持续 15 分钟 尚未提供任何记录。验证直播是否有数据并且传送处于活动状态。
DLQ 交付失败 DeliveryToS3.DLQDeliverySuccess 大于 0 时 FailedRecordCount 为 0 失败的记录无法写入死信队列。检查 DLQ 存储桶权限。
注意

上述警报使用了 Amazon S3 交付的DeliveryToS3指标。对于流式表传输,请使用等效的DeliveryToIceberg指标(DeliveryToIceberg.FailedRowCountDeliveryToIceberg.DataFreshness、DeliveryToIceberg.SuccessfulRowCount、和DeliveryToIceberg.DLQDeliverySuccess)。

CloudWatch 日志

每次交付都可以将详细日志发布到日 CloudWatch 志,以便进行调试和查看操作。

默认情况下,交付会写入以下日志组和日志流:

  • 默认日志组-/aws/kinesis/channelName/channelId

  • 日志流 — DestinationDelivery

通过 CLI 启用 CloudWatch 日志

使用以下命令在创建或更新交付时启用 CloudWatch 日志 Amazon CLI:

aws kinesis create-channel \ --channel-name "my-channel" \ --service-execution-role-arn "arn:aws:iam::111122223333:role/my-channel-role" \ --stream-configuration-list '[ { "StreamARN": "arn:aws:kinesis:us-east-1:111122223333:stream/my-stream", "RecordConfiguration": { "RecordFormatType": "JSON" } } ]' \ --s3-destination-configuration '{ "StorageConfiguration": { "BucketARN": "arn:aws:s3:::amzn-s3-demo-destination-bucket", "ExpectedBucketOwner": "111122223333", "CompressionType": "GZIP" } }' \ --logging-configuration '{ "CloudWatchLogs": { "Enabled": true } }'

如果在未指定 CloudWatch 日志组的情况下启用 Logs,则交付将使用默认日志组/aws/kinesis/channelName/channelId。如果您指定自定义LogGroupName,请确保服务执行角色的 “ CloudWatch 日志” 权限仅限于同一个日志组。有关所需的权限,请参阅用于数据传输的 IAM 权限。

您还可以使用update-channel命令启用或更新现有交付的 CloudWatch 日志,传递相同的--logging-configuration值。

所需的权限

要启用 CloudWatch 日志,交付的服务执行角色必须具有以下权限:

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

将这些权限的范围限定为特定的日志组 ARN。可选 CloudWatch 日志权限有关完整的策略示例,请参阅。

Amazon CloudTrail 日志记录

所有交付 API 调用均由记录 Amazon CloudTrail。以下是CreateChannel呼叫的示例 Amazon CloudTrail 事件:

{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROA1EXAMPLE:user-session", "arn": "arn:aws:sts::<account-id>:assumed-role/<role-name>/user-session", "accountId": "<account-id>" }, "eventTime": "2026-07-20T20:00:00Z", "eventSource": "kinesis.amazonaws.com", "eventName": "CreateChannel", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.1", "userAgent": "aws-cli/2.x", "requestParameters": { "streamName": "my-stream", "channelName": "my-channel" }, "responseElements": { "channelARN": "arn:aws:kinesis:us-east-1:<account-id>:channel/<channel-id>" }, "requestID": "a1b2c3d4-example", "eventID": "e5f6g7h8-example", "readOnly": false, "eventType": "AwsApiCall", "recipientAccountId": "<account-id>" }