使用 CloudWatch 日志监控 Kinesis Data Firehose - Amazon Kinesis Data Firehose
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 CloudWatch 日志监控 Kinesis Data Firehose

Kinesis Data Firehose 与 Amazon CloudWatch Logs 集成,因此当数据转换或数据传输的 Lambda 调用失败时,您可以查看特定的错误日志。在创建交付流时,您可以启用 Kinesis Data Firehose 错误日志。

如果您在 Kinesis Data Firehose 控制台中启用 Kinesis Data Firehose 错误日志,则会代表您为交付流创建日志组和相应的日志流。日志组名称的格式为 /aws/kinesisfirehose/delivery-stream-name,其中,delivery-stream-name 是相应的传输流的名称。日志流名称为 S3Deliv ery RedshiftDeliveryAmazonOpenSearchServiceDelivery、或,具体取决于传送目的地。数据转换的 Lambda 调用错误也会记录到用于数据传输错误的日志流中。

例如,如果您以 Amazon Redshift 为目标创建传输流MyStream “” 并启用 Kinesis Data Firehose 错误日志,则会代表您创建以下内容:一个名为 S3Delivery 的日志组aws/kinesisfirehose/MyStream和两个名为 S3Deliv ery 和的日志流RedshiftDelivery。在该示例中,日志流 S3Delivery 用于记录与传输到中间 S3 存储桶失败有关的错误。RedshiftDelivery日志流用于记录与 Lambda 调用失败和向您的 Amazon Redshift 集群传输失败相关的错误。

你可以通过Amazon CLI、API 或Amazon CloudFormation使用CloudWatchLoggingOptions配置启用 Kinesis Data Firehose 错误日志。为此,请提前创建日志组和日志流。我们建议只为 Kinesis Data Firehose 错误记录保留该日志组和日志流。还要确保关联的 IAM 策略具有"logs:putLogEvents"权限。有关更多信息,请参阅 使用Amazon Kinesis Data Firehose 控制

请注意,Kinesis Data Firehose 不保证所有交付错误日志都会发送到 CloudWatch 日志。在交付失败率很高的情况下,Kinesis Data Firehose 会先对交付错误日志进行采样,然后再将其发送到 CloudWatch 日志。

发送到 CloudWatch Logs 的错误日志收取象征性费用。有关更多信息,请参阅 Amazon CloudWatch 定价

数据传输错误

以下是每个 Kinesis Data Firehose 目的地的数据传输错误代码和消息列表。每个错误消息还描述了修复问题所应采取的适当操作。

Amazon S3 数据传输错误

Kinesis Data Firehose 可以将以下与亚马逊 S3 相关的错误发送到 CloudWatch 日志。

错误代码 错误消息和信息
S3.KMS.NotFoundException

"The provided Amazon KMS key was not found. If you are using what you believe to be a valid Amazon KMS key with the correct role, check if there is a problem with the account to which the Amazon KMS key is attached."

S3.KMS.RequestLimitExceeded

"The KMS request per second limit was exceeded while attempting to encrypt S3 objects. Increase the request per second limit."

有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的限制

S3.AccessDenied "Access was denied. 确保所提供的 IAM 角色的信任策略允许 Kinesis Data Firehose 代入该角色,并且访问策略允许访问 S3 存储桶。”
S3.AccountProblem “您的Amazon账户存在问题,导致操作无法成功完成。请联系SAmazon upport 人员。”
S3.AllAccessDisabled "Access to the account provided has been disabled. 请联系SAmazon upport 人员。”
S3.InvalidPayer "Access to the account provided has been disabled. 请联系SAmazon upport 人员。”
S3.NotSignedUp “该账户未注册 Amazon S3。Sign the account up or use a different account."
S3.NoSuchBucket "The specified bucket does not exist. Create the bucket or use a different bucket that does exist."
S3.MethodNotAllowed "The specified method is not allowed against this resource. 修改存储桶的策略,以允许正确的 Amazon S3 操作权限。”
InternalError "An internal error occurred while attempting to deliver data. 将重试配送;如果错误仍然存在,则将报告给Amazon以解决问题。”

Amazon Redshift 数据传输错误

Kinesis Data Firehose 可以将以下与亚马逊 Redshift 相关的错误发送到 CloudWatch 日志。

错误代码 错误消息和信息
Redshift.TableNotFound

"The table to which to load data was not found. Ensure that the specified table exists."

在 Amazon Redshift 中找不到应将数据从 S3 复制到的目标表。请注意,如果 Amazon Redshift 表不存在,Kinesis Data Firehose 不会创建该表。

Redshift.SyntaxError "The COPY command contains a syntax error. Retry the command."
Redshift.AuthenticationFailed "The provided user name and password failed authentication. Provide a valid user name and password."
Redshift.AccessDenied "Access was denied. 确保提供的 IAM 角色的信任策略允许 Kinesis Data Firehose 担任该角色。”
Redshift.S3BucketAccessDenied "The COPY command was unable to access the S3 bucket. 确保所提供的 IAM 角色的访问策略允许访问 S3 存储桶。”
Redshift.DataLoadFailed "Loading data into the table failed. Check STL_LOAD_ERRORS system table for details."
Redshift.ColumnNotFound "A column in the COPY command does not exist in the table. Specify a valid column name."
Redshift.DatabaseNotFound “找不到在 Amazon Redshift 目标配置或 JDBC URL 中指定的数据库。Specify a valid database name."
Redshift.IncorrectCopyOptions

"Conflicting or redundant COPY options were provided. Some options are not compatible in certain combinations. Check the COPY command reference for more info."

有关更多信息,请参阅 Amazon Redshift 数据库开发人员指南中的 Amazon Redshift COPY 命令

Redshift.MissingColumn "There is a column defined in the table schema as NOT NULL without a DEFAULT value and not included in the column list. 排除此列,确保加载的数据始终为该列提供一个值,或者为该表在 Amazon Redshift 架构中添加默认值。”
Redshift.ConnectionFailed “与指定的 Amazon Redshift 集群的连接失败。确保安全设置允许 Kinesis Data Firehose 连接,Amazon Redshift 目标配置或 JDBC URL 中指定的集群或数据库正确,并且集群可用。”
Redshift.ColumnMismatch "The number of jsonpaths in the COPY command and the number of columns in the destination table should match. Retry the command."
Redshift.IncorrectOrMissingRegion “Amazon Redshift 试图使用错误的区域终端节点来访问 S3 存储桶。要么在 COPY 命令选项中指定正确的区域值,要么确保 S3 存储桶与 Amazon Redshift 数据库位于同一区域。”
Redshift.IncorrectJsonPathsFile "The provided jsonpaths file is not in a supported JSON format. Retry the command."
Redshift.MissingS3File “Amazon Redshift 需要的一个或多个 S3 文件已从 S3 存储桶中删除。Check the S3 bucket policies to remove any automatic deletion of S3 files."
Redshift.InsufficientPrivilege "The user does not have permissions to load data into the table. 在 Amazon Redshift 用户权限中查看 INSERT 权限。”
Redshift.ReadOnlyCluster "The query cannot be executed because the system is in resize mode. Try the query again later."
Redshift.DiskFull "Data could not be loaded because the disk is full. 增加 Amazon Redshift 集群的容量或删除未使用的数据以释放磁盘空间。”
InternalError "An internal error occurred while attempting to deliver data. 将重试配送;如果错误仍然存在,则将报告给Amazon以解决问题。”

Splunk 数据传输错误

Kinesis Data Firehose 可以将以下与 Splunk 相关的错误发送到 CloudWatch 日志。

错误代码 错误消息和信息
Splunk.ProxyWithoutStickySessions

“如果你在 Kinesis Data Firehose 和 HEC 节点之间有代理(ELB 或其他),则必须启用粘性会话才能支持 HEC ACK。”

Splunk.DisabledToken "The HEC token is disabled. Enable the token to allow data delivery to Splunk."
Splunk.InvalidToken "The HEC token is invalid. 使用有效的 HEC 令牌更新 Kinesis Data Firehose。”
Splunk.InvalidDataFormat "The data is not formatted correctly. To see how to properly format data for Raw or Event HEC endpoints, see Splunk Event Data."
Splunk.InvalidIndex "The HEC token or input is configured with an invalid index. Check your index configuration and try again."
Splunk.ServerError “由于来自 HEC 节点的服务器错误,向 Splunk 传输数据失败。如果您的 Kinesis Data Firehose 中的重试持续时间大于 0,Kinesis Data Firehose 将重试发送数据。如果所有重试都失败,Kinesis Data Firehose 会将数据备份到 Amazon S3。”
Splunk.DisabledAck "Indexer acknowledgement is disabled for the HEC token. Enable indexer acknowledgement and try again. For more info, see Enable indexer acknowledgement."
Splunk.AckTimeout "Did not receive an acknowledgement from HEC before the HEC acknowledgement timeout expired. 尽管确认超时,但仍有可能在 Splunk 中成功索引数据。Kinesis Data Firehose 会备份确认超时已过期的 Amazon S3 数据。”
Splunk.MaxRetriesFailed

"Failed to deliver data to Splunk or to receive acknowledgment. Check your HEC health and try again."

Splunk.ConnectionTimeout "The connection to Splunk timed out. 这可能是暂时性错误,将重试请求。如果所有重试都失败,Kinesis Data Firehose 将在 Amazon S3 中备份已发送到 Amazon S
Splunk.InvalidEndpoint "Could not connect to the HEC endpoint. 确保 HEC 端点网址有效且可从 Kinesis Data Firehose 访问。”
Splunk.ConnectionClosed "Unable to send data to Splunk due to a connection failure. This might be a transient error. 延长 Kinesis Data Firehose 配置中的重试持续时间可能会防止此类暂时失败。”
Splunk.SSLUnverified "Could not connect to the HEC endpoint. 主机与对等项提供的证书不匹配。请确保证书和主机是有效的。
Splunk.SSLHandshake "Could not connect to the HEC endpoint. 请确保证书和主机是有效的。

HTTPS 端点数据传输错误

Kinesis Data Firehose 可以将以下 HTTP 端点相关的错误发送到 CloudWatch 日志。如果这些错误都与您遇到的问题不符,则默认错误如下:“尝试传送数据时出现内部错误。将重试配送;如果错误仍然存在,则将报告给Amazon以解决问题。”

错误代码 错误消息和信息
HttpEndpoint.RequestTimeout

在收到回复之前,配送已超时,将重试。如果此错误仍然存在,请联系Amazon Firehose 服务团队。

HttpEndpoint.ResponseTooLarge “从端点收到的响应太大。请联系终端所有者以解决此问题。”
HttpEndpoint.InvalidResponseFromDestination “从指定端点收到的响应无效。请联系端点的所有者解决问题。”
HttpEndpoint.DestinationException “从终端目的地收到了以下响应。”
HttpEndpoint.ConnectionFailed “无法连接到已发送到终端节点。请联系终端所有者以解决此问题。”
HttpEndpoint.ConnectionReset “无法保持与端点的连接。请联系终端所有者以解决此问题。”
HttpEndpoint.ConnectionReset “无法保持与端点的连接。请联系终端的所有者。”

亚马逊 OpenSearch 服务数据传输错误

对于 OpenSearch 服务目标,Kinesis Data Firehose 会在 OpenSearch 服务返回错误时向 CloudWatch 日志发送错误。

Lambda 调用错误

Kinesis Data Firehose 可以将以下 Lambda 调用错误发送到 CloudWatch 日志。

错误代码 错误消息和信息
Lambda.AssumeRoleAccessDenied

"Access was denied. 确保提供的 IAM 角色的信任策略允许 Kinesis Data Firehose 担任该角色。”

Lambda.InvokeAccessDenied

"Access was denied. 确保访问策略允许访问 Lambda 函数。”

Lambda.JsonProcessingException

“解析从 Lambda 函数返回的记录时出错。确保返回的记录符合 Kinesis Data Firehose 要求的状态模型。”

有关更多信息,请参阅 数据转换和状态模型

Lambda.InvokeLimitExceeded

“超出了 Lambda 并发执行限制。Increase the concurrent execution limit."

有关更多信息,请参阅《Amazon Lambda开发者指南》中的 AmazonLambda 限制

Lambda.DuplicatedRecordId

"Multiple records were returned with the same record ID. 确保 Lambda 函数为每条记录返回唯一的记录 ID。”

有关更多信息,请参阅 数据转换和状态模型

Lambda.MissingRecordId

"One or more record IDs were not returned. 确保 Lambda 函数返回所有收到的记录 ID。”

有关更多信息,请参阅 数据转换和状态模型

Lambda.ResourceNotFound

“指定的 Lambda 函数不存在。Use a different function that does exist."

Lambda.InvalidSubnetIDException

“Lambda 函数 VPC 配置中指定的子网 ID 无效。Ensure that the subnet ID is valid."

Lambda.InvalidSecurityGroupIDException

“Lambda 函数 VPC 配置中指定的安全组 ID 无效。Ensure that the security group ID is valid."

Lambda.SubnetIPAddressLimitReachedException

“无法Amazon Lambda为 Lambda 函数设置 VPC 访问权限,因为配置的一个或多个子网没有可用的 IP 地址。Increase the IP address limit."

有关更多信息,请参阅 Amazon VPC 用户指南中的 Amazon VPC 限制-VPC 和子网

Lambda.ENILimitReachedException

“无法Amazon Lambda在 VPC 中创建指定为 Lambda 函数配置的一部分的弹性网络接口 (ENI),因为已达到网络接口限制。Increase the network interface limit."

有关更多信息,请参阅 Amazon VPC 用户指南中的 Amazon VPC 限制-网络接口

访问 Kinesis Data Firehose CloudWatch 的日志

您可以使用 Kinesis Data Firehose 控制台或控制台查看与 Kinesis Data Firehose 数据传输失败相关的错误日志。 CloudWatch 下面的过程介绍如何使用这两种方法访问错误日志。

使用 Kinesis Data Firehose 控制台访问错误日志
  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Kinesis 控制台:https://console.aws.amazon.com/kinesisvideo/home

  2. 在导航窗格中选择 Data Firehose (数据 Firehose)

  3. 在导航栏中,选择Amazon区域。

  4. 选择传输流名称,转到传输流详细信息页面。

  5. 选择 Error Log 查看与数据传输故障有关的错误日志的列表。

使用 CloudWatch 控制台访问错误日志
  1. 通过 https://console.aws.amazon.com/cloudwatch/ 打开 CloudWatch 主机。

  2. 在导航栏中,选择一个区域。

  3. 在导航窗格中,选择日志

  4. 选择日志组和日志流,查看与数据传输故障有关的错误日志的列表。