HTTP 端点问题排查 - Amazon Data Firehose
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

亚马逊 Data Firehose 以前被称为亚马逊 Kinesis Data Firehose

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

HTTP 端点问题排查

本节介绍处理 Amazon Data Firehose 将数据传输到通用 HTTP 终端节点目标和合作伙伴目的地(包括 Datadog、Dynatrace、MongoDB、New Relic、Splunk 或 Sumo Logic)时的常见故障排除步骤。 LogicMonitor就本节而言,所有适用的目标均称为 HTTP 端点。确保在您的 Firehose 交付流中指定的 IAM 角色可以访问 S3 备份存储桶和 Lambda 函数以进行数据转换(如果启用了数据转换)。此外,请确保 IAM 角色有权访问 CloudWatch 日志组和日志流以检查错误日志。有关更多信息,请参阅授予 Firehose 对 HTTP 终端节点目标的访问权限

注意

本节中的信息不适用于以下目的地:Splunk、S OpenSearch ervice、S3 和 Redshift。

CloudWatch 日志

强烈建议您为 Firehose 启用CloudWatch 日志功能。只有在传输到目标出现错误时才会发布日志。

目标异常

ErrorCode: HttpEndpoint.DestinationException

{ "deliveryStreamARN": "arn:aws:firehose:us-east-1:123456789012:deliverystream/ronald-test", "destination": "custom.firehose.endpoint.com...", "deliveryStreamVersionId": 1, "message": "The following response was received from the endpoint destination. 413: {\"requestId\": \"43b8e724-dbac-4510-adb7-ef211c6044b9\", \"timestamp\": 1598556019164, \"errorMessage\": \"Payload too large\"}", "errorCode": "HttpEndpoint.DestinationException", "processor": "arn:aws:lambda:us-east-1:379522611494:function:httpLambdaProcessing" }

目标异常表示 Firehose 能够建立到端点的连接并发出 HTTP 请求,但收到 200 响应代码。不是 200 的 2xx 响应也会导致目标异常。Amazon Data Firehose 将从配置的终端节点收到的响应代码和截断的响应负载记录到日志中。 CloudWatch 由于 Amazon Data Firehose 无需修改或解释即可记录响应代码和有效负载,因此应由终端节点提供拒绝亚马逊数据 Firehose 的 HTTP 传输请求的确切原因。以下是针对这些异常的最常见的问题排查建议:

  • 400:表示由于您的 Amazon Data Firehose 配置错误,您发送的请求不正确。确保目标位置具有正确的 url通用属性内容编码访问密钥缓冲提示。有关所需配置,请参阅特定于目标的文档。

  • 401:表示您为 Firehose 直播配置的访问密钥不正确或缺失。

  • 403:表示您为 Firehose 直播配置的访问密钥无权将数据传送到已配置的端点。

  • 413:表示 Amazon Data Firehose 发送到终端节点的请求负载太大,终端节点无法处理。尝试降低缓冲提示,达到目标的建议大小。

  • 429:表示 Amazon Data Firehose 发送请求的速度超过了目标所能处理的速度。通过增加缓冲时间和/或增加缓冲大小(但仍在目标限制范围内)来微调缓冲提示。

  • 5xx:表示目标存在问题。Amazon Data Firehose 服务仍在正常运行。

重要

重要提示:虽然这些是常见的问题排查建议,但特定端点提供响应代码的原因可能不同,应首先遵循特定端点的建议。

无效响应

ErrorCode: HttpEndpoint.InvalidResponseFromDestination

{ "deliveryStreamARN": "arn:aws:firehose:us-east-1:123456789012:deliverystream/ronald-test", "destination": "custom.firehose.endpoint.com...", "deliveryStreamVersionId": 1, "message": "The response received from the specified endpoint is invalid. Contact the owner of the endpoint to resolve the issue. Response for request 2de9e8e9-7296-47b0-bea6-9f17b133d847 is not recognized as valid JSON or has unexpected fields. Raw response received: 200 {\"requestId\": null}", "errorCode": "HttpEndpoint.InvalidResponseFromDestination", "processor": "arn:aws:lambda:us-east-1:379522611494:function:httpLambdaProcessing" }

无效的响应异常表明 Amazon Data Firehose 收到了来自终端节点目标的无效响应。响应必须符合响应规范,否则 Amazon Data Firehose 将认为传送尝试失败,并将重新传送相同的数据,直到超过配置的重试持续时间。即使响应的状态为 200,Amazon Data Firehose 也会将不符合响应规范的响应视为失败。如果您正在开发与 Amazon Data Firehose 兼容的终端节点,请遵循响应规范以确保数据成功传送。

以下是一些常见的无效响应类型以及解决方法:

  • 无效 JSON 或意外字段:表示无法将响应正确解串为 JSON 或包含意外字段。确保响应未经过内容编码。

  • 缺失 RequestId:表示响应不包含 requestID。

  • RequestId 不匹配:表示响应中的 requestId 与传出的 requestId 不匹配。

  • 缺少时间戳:表示响应不包含时间戳字段。时间戳字段必须是数字,而不是字符串。

  • 缺少 Content-Type 标头:表示响应不包含“content-type: application/json”标头。不接受其他 content-type。

重要

重要提示:亚马逊数据 Firehose 只能向符合 Firehose 请求和响应规范的终端节点传输数据。如果您要将目标配置为第三方服务,请确保您使用的是正确的 Amazon Data Firehose 兼容终端节点,该终端节点可能与公共摄取终端节点不同。例如,Datadog 的亚马逊 Data Firehose 端点是 https://aws-kinesis-http-intake.logs.datadoghq.com/,而其公共端点是 https://api.datadoghq.com/。

其他常见错误

下面列出了其他错误代码和定义。

  • 错误代码: HttpEndpoint. RequestTimeout-表示终端响应时间超过 3 分钟。如果您是目标的所有者,请缩短目标端点的响应时间。如果您不是目标的所有者,请联系所有者,询问是否可以采取任何措施来缩短响应时间(即减少缓冲提示,从而减少每次请求处理的数据)。

  • 错误代码: HttpEndpoint. ResponseTooLarge-表示响应太大。包括标头在内的响应必须小于 1MiB。

  • 错误代码: HttpEndpoint. ConnectionFailed-表示无法与配置的端点建立连接。这可能是由于配置的网址中存在拼写错误、Amazon Data Firehose 无法访问终端节点,或者终端节点响应连接请求的时间过长。

  • 错误代码: HttpEndpoint. ConnectionReset-表示连接已建立,但已被端点重置或过早关闭。

  • 错误代码: HttpEndpoint.SSL HandshakeFailure-表示无法使用配置的端点成功完成 SSL 握手。