View a markdown version of this page

监控数据交付 - Amazon Kinesis Data Streams

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

监控数据交付

使用本主题了解如何使用亚马逊 CloudWatch 指标、 CloudWatch 日志和监控您的配送 AWS CloudTrail。

CloudWatch 指标

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

亚马逊 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 数据流的名称。

注意

要将 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 日志 AWS CLI:

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

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

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

所需的权限

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

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

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

AWS CloudTrail 日志记录

所有交付 API 调用均由记录 AWS CloudTrail。以下是CreateChannel通话的示例 AWS 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>" }