本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
监控数据交付
使用本主题了解如何使用亚马逊 CloudWatch 指标、 CloudWatch 日志和监控您的配送 AWS CloudTrail。
CloudWatch 指标
每次交付都会将指标发布到AWS/Kinesis命名空间 CloudWatch 中。指标名称以目标类型为前缀:DeliveryToS3用于一般用途的 Amazon S3 交付和DeliveryToIceberg流式表交付。使用这些指标来监控交付的运行状况和绩效。
| 指标名称 | 单位 | 说明 |
|---|---|---|
DeliveryToS3.DataFreshness |
秒 | 尚未送达目的地的最早记录的年龄。价值上升表明交付落后。 |
DeliveryToS3.BytesIn |
字节 | 从流中读入传送路径的数据量。 |
DeliveryToS3.BytesProcessed |
字节 | 交付处理的数据量。 |
DeliveryToS3.BytesOut |
字节 | 写入目标的数据量。 |
DeliveryToS3.RecordCount |
计数 | 从流中读取的记录总数。 |
DeliveryToS3.SuccessfulRecordCount |
计数 | 成功传送到目的地的记录数。 |
DeliveryToS3.FailedRecordCount |
计数 | 传送失败的记录数量。非零值是关键错误信号。 |
DeliveryToS3.DeliverySuccess |
计数 | 成功的交付操作的次数。 |
DeliveryToS3.DLQDeliverySuccess |
计数 | 成功写入死信队列的记录数。 |
| 指标名称 | 单位 | 说明 |
|---|---|---|
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单独进行筛选。
建议的警报
| 警报 | 指标 | 条件 | 说明 |
|---|---|---|---|
| 失败率高 | 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/channelIdLogGroupName,请确保服务执行角色的 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>" }