Amazon Kinesis Data Firehose
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon Kinesis Data Firehose 问题排查

要监控数据传输的新鲜度,请检查 Kinesis Data Firehose 控制台中 Monitoring (监控) 选项卡下的 DataFreshness 指标。DataFreshness 指示 Kinesis Data Firehose 传输流 中数据的新鲜度。如果 DataFreshness 的值不随时间增加,这意味着您的传输流正在成功传输您的数据。当 Kinesis Data Firehose 遇到错误时,它使用 Amazon S3 备份它无法传输到主要位置的所有数据。如果您为传输流启用 CloudWatch Logs,您可以查看所有传输错误。Kinesis Data Firehose 会自动重试所有失败的传输,直到配置的重试持续时间过期。有关更多信息,请参阅使用 CloudWatch Logs 进行监控

数据未传输到 Amazon S3

如果数据未传输到您的 Amazon Simple Storage Service (Amazon S3) 存储桶,请检查以下各项。

数据未传输到 Amazon Redshift

如果数据未传输到您的 Amazon Redshift 集群,请检查以下各项。

数据在加载到 Amazon Redshift 之前,先传输到 S3 存储桶。如果数据未传输至 S3 存储桶,请参阅数据未传输到 Amazon S3

  • 检查 Kinesis Data Firehose DeliveryToRedshift.Success 指标,确保 Kinesis Data Firehose 已尝试将数据从您的 S3 存储桶复制到 Amazon Redshift 集群。有关更多信息,请参阅 使用 CloudWatch 指标监控 Kinesis Data Firehose

  • 如果尚未启用错误日志记录功能,则启用它并检查是否存在传输失败错误日志。有关更多信息,请参阅 使用 CloudWatch Logs 监控 Kinesis Data Firehose

  • 检查 Amazon Redshift STL_CONNECTION_LOG 表,确定 Kinesis Data Firehose 能否成功建立连接。在该表中,应该能够根据用户名查看连接及其状态。有关更多信息,请参阅 Amazon Redshift Database Developer Guide 中的 STL_CONNECTION_LOG

  • 如果上一个检查表明已建立连接,则检查 Amazon Redshift STL_LOAD_ERRORS 表来确认 COPY 失败的原因。有关更多信息,请参阅 Amazon Redshift Database Developer Guide 中的 STL_LOAD_ERRORS

  • 确保 Kinesis Data Firehose 传输流 中的 Amazon Redshift 配置正确且有效。

  • 确保在 Kinesis Data Firehose 传输流 中指定的 IAM 角色可以访问 Amazon Redshift 从中复制数据的 S3 存储桶以及用于数据转换的 Lambda 函数(如果启用了数据转换)。有关更多信息,请参阅 授予 Kinesis Data Firehose 访问 Amazon S3 目标的权限

  • 如果 Amazon Redshift 集群位于虚拟私有云 (VPC) 中,则确保该集群允许从 Kinesis Data Firehose IP 地址进行访问。有关更多信息,请参阅授予 Kinesis Data Firehose 访问 Amazon Redshift 目标的权限

  • 确保 Amazon Redshift 集群可公开访问。

  • 如果您使用数据转换,请确保您的 Lambda 函数决不会返回其负载大小超过 6 MB 的响应。有关更多信息,请参阅 Amazon Kinesis Data Firehose 数据转换

数据未传输到 Amazon Elasticsearch Service

如果数据未传输至您的 Elasticsearch 域,请检查以下各项。

数据可以同时备份到 Amazon S3 存储桶。如果数据未传输至您的 S3 存储桶,请参阅数据未传输到 Amazon S3

数据未传输到 Splunk

如果数据未传输到您的 Splunk 终端节点,请检查以下各项。

  • 如果您的 Splunk 平台在 VPC 中,请确保 Kinesis Data Firehose 可以访问它。有关更多信息,请参阅在 VPC 中访问 Splunk

  • 如果您使用 AWS 负载均衡器,请确保它是 传统负载均衡器。Kinesis Data Firehose 不支持 Application Load Balancer 或 Network Load Balancer。此外,启用基于持续时间的粘性会话,并禁用 Cookie 过期。有关如何执行此操作的信息,请参阅基于持续时间的会话粘性

  • 检查 Splunk 平台要求。适用于 Kinesis Data Firehose 的 Splunk 插件需要 6.6.X 或更高版本的 Splunk 平台。有关更多信息,请参阅适用于 Amazon Kinesis Firehose 的 Splunk 插件

  • 如果 Kinesis Data Firehose 和 HTTP 事件收集器 (HEC) 节点之间有代理(Elastic Load Balancing 或其他),请启用粘性会话来支持 HEC 确认 (ACK)。

  • 确保您使用有效的 HEC 令牌。

  • 确保启用了 HEC 令牌。请参阅 Enable and disable Event Collector tokens

  • 检查是否为发送到 Splunk 的数据正确设置格式。有关更多信息,请参阅为 HTTP 事件收集器的事件设置格式

  • 确保为 HEC 令牌和输入事件配置了有效索引。

  • 如果由于 HEC 节点出现服务器错误而无法上传到 Splunk,将会自动重试该请求。如果所有重试均失败,则会将数据备份到 Amazon S3 中。检查您的数据是否出现在 Amazon S3 中,这表明出现了此类失败。

  • 确保在您的 HEC 令牌上启用了索引器确认。有关更多信息,请参阅启用索引器确认

  • 在您的 Kinesis Data Firehose 传输流的 Splunk 目标配置中提高 HECAcknowledgmentTimeoutInSeconds 的值。

  • 在您的 Kinesis Data Firehose 传输流的 Splunk 目标配置中提高 RetryOptions 下的 DurationInSeconds 的值。

  • 检查 HEC 的运行状况。

  • 如果您使用数据转换,请确保您的 Lambda 函数决不会返回其负载大小超过 6 MB 的响应。有关更多信息,请参阅 Amazon Kinesis Data Firehose 数据转换

  • 确保名为 ackIdleCleanup 的 Splunk 参数设置为 true。默认情况下,它设置为 false。若要将此参数设置为 true,请执行以下操作:

    • 对于托管 Splunk 云部署,请使用 Splunk 支持门户提交案例。在此情况下,应请求 Splunk 支持人员启用 HTTP 事件收集器,在 inputs.conf 中将 ackIdleCleanup 设置为 true,并创建或修改要用于此插件的负载均衡器。

    • 对于分布式 Splunk Enterprise 部署,请将 inputs.conf 文件中的 ackIdleCleanup 参数设置为 true。对于 *nix 用户,此文件位于 $SPLUNK_HOME/etc/apps/splunk_httpinput/local/ 下。对于 Windows 用户,它位于 %SPLUNK_HOME%\etc\apps\splunk_httpinput\local\ 下。

    • 对于单实例 Splunk Enterprise 部署,请将 inputs.conf 文件中的 ackIdleCleanup 参数设置为 true。对于 *nix 用户,此文件位于 $SPLUNK_HOME/etc/apps/splunk_httpinput/local/ 下。对于 Windows 用户,它位于 %SPLUNK_HOME%\etc\apps\splunk_httpinput\local\ 下。

  • 请参阅 Amazon Kinesis Firehose 的 Splunk 插件故障排除

传输流不可用作 CloudWatch Logs、CloudWatch Events 或 AWS IoT 操作的目标

某些 AWS 服务只能将消息和事件发送到位于同一 AWS 区域中的 Kinesis Data Firehose 传输流。验证您的 Kinesis Data Firehose 传输流是否与其他服务位于同一区域。

记录格式转换为 Apache Parquet 失败

如果您提取包含 Set类型的 DynamoDB 数据,通过 Lambda 将其流式传输到传输流,并使用 AWS Glue 数据目录 将记录格式转换为 Apache Parquet,就会出现这种情况。

当 AWS Glue 爬网程序为 DynamoDB 集数据类型(StringSetNumberSetBinarySet)编写索引时,会在数据目录中将其分别保存为 SET<STRING>SET<BIGINT>SET<BINARY>。但对于 Kinesis Data Firehose,要将数据记录转换为 Apache Parquet 格式,需要 Apache Hive 数据类型。由于集类型并非有效的 Apache Hive 数据类型,所以转换会失败。要进行成功转换,请使用 Apache Hive 数据类型更新数据目录。为此,您可以将数据目录中的 set 更改为 array

要将 AWS Glue 数据目录中的一个或多个数据类型从 set 更改为 array,请执行以下操作:

  1. Sign in to the AWS 管理控制台 and open the AWS Glue console at https://console.amazonaws.cn/glue/.

  2. 在左侧窗格中的数据目录标题下,选择

  3. 在表列表中,选择您需要修改一个或多个数据类型的表的名称。这会将您引导至该表的详细信息页面。

  4. 选择详细信息页面右上角的 Edit schema 按钮。

  5. 数据类型列中,选择第一个 set 数据类型。

  6. 列类型下拉列表中,将该类型从 set 更改为 array

  7. ArraySchema 字段中,输入 array<string>array<int>array<binary>,具体取决于适用于您的场景的数据类型。

  8. 选择 Update

  9. 重复之前的步骤,将其他 set 类型转换为 array 类型。

  10. 选择 Save