View a markdown version of this page

監控資料交付 - Amazon Kinesis Data Streams

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

監控資料交付

使用此主題來了解如何使用 Amazon CloudWatch 指標、CloudWatch Logs 和 來監控您的交付 AWS 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 計數 成功寫入無效字母佇列的記錄數目。

維度

交付指標會以下列維度發佈:

  • ChannelName – 交付名稱。

  • ChannelId – 交付的唯一識別符。

  • StreamName – 來源 Kinesis Data Streams 串流的名稱。

注意

若要以 CloudWatch 警示中的特定交付為目標,請指定所有三個維度。對於使用 GetMetricData和 進行瀏覽或查詢ListMetrics,您可以依維度子集進行篩選,例如ChannelName單獨使用。

建議的警示

交付的建議 CloudWatch 警示
警示 指標 條件 說明
高故障率 DeliveryToS3.FailedRecordCount > 0 持續 5 分鐘 記錄交付失敗。調查結構描述不相符或目的地問題。
資料新鮮度降級 DeliveryToS3.DataFreshness > 閾值 資料交付落後。調查交付問題,例如缺少服務執行角色的許可或在目的地調節。
未交付資料 DeliveryToS3.SuccessfulRecordCount = 0 持續 15 分鐘 尚未交付任何記錄。確認串流有資料且交付處於作用中狀態。
DLQ 交付失敗 DeliveryToS3.DLQDeliverySuccess = 失敗FailedRecordCount > 0 時為 0 失敗的記錄無法寫入無效字母佇列。檢查 DLQ 儲存貯體許可。
注意

上述警示使用 Amazon S3 交付的DeliveryToS3指標。對於串流資料表交付,請使用同等DeliveryToIceberg指標 (DeliveryToIceberg.FailedRowCount、DeliveryToIceberg.SuccessfulRowCount、 DeliveryToIceberg.DataFreshness和 DeliveryToIceberg.DLQDeliverySuccess)。

CloudWatch Logs

每個交付都可以將詳細日誌發佈至 CloudWatch Logs,以進行偵錯和操作可見性。

  • 預設日誌群組 – /aws/kinesis/channelName/channelId

  • 日誌串流 – DestinationDelivery

透過 CLI 啟用 CloudWatch Logs

使用 建立或更新交付時啟用 CloudWatch Logs 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 Logs 而不指定日誌群組時,交付會使用預設日誌群組 /aws/kinesis/channelName/channelId。如果您指定自訂 LogGroupName,請確定服務執行角色的 CloudWatch Logs 許可範圍為相同的日誌群組。如要了解必要的許可,請參閱 資料交付的 IAM 許可。

您也可以使用 update-channel命令在現有交付上啟用或停用 CloudWatch Logs,傳遞相同的--logging-configuration值。

所需的許可

若要啟用 CloudWatch Logs,交付的服務執行角色必須具有下列許可:

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

將這些許可範圍限定為特定的日誌群組 ARN。如需完整政策範例,選用 CloudWatch Logs 許可請參閱 。

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>" }