HTTP端点故障排除 - Amazon 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 的 Amazon 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. SSLHandshakeFailure-表示无法使用配置的端点成功完成SSL握手。