HTTP エンドポイントのトラブルシューティング - Amazon Kinesis Data Firehose

HTTP エンドポイントのトラブルシューティング

このセクションでは、Datadog、Dynatrace、LogicMonitor、MongoDB、New Relic、Splunk、Sumo Logic など、汎用 HTTP エンドポイントの送信先およびパートナーの送信先にデータを配信する Kinesis Data Firehose を扱う場合の一般的なトラブルシューティング手順について説明します。このセクションの目的上、該当するすべての送信先を HTTP エンドポイントと呼びます。

注記

このセクションの情報は、次の送信先には適用されません: Splunk、OpenSearch Service、S3、Redshift。

[CloudWatch Logs]

CloudWatch Logging for Firehose を有効にすることが強く推奨されていま。ログは、送信先への配信中にエラーが発生した場合にのみ発行されます。

送信先の例外

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 のレスポンスも送信先の例外になります。Kinesis Data Firehose は、設定されたエンドポイントから受信したレスポンスコードと切り捨てられたレスポンスペイロードを CloudWatch Logs に記録します。Kinesis Data Firehose は、変更や解釈なしでレスポンスコードとペイロードをログに記録するため、Kinesis Data Firehose の HTTP 配信リクエストを拒否した正確な理由を提供するのはエンドポイント次第です。これらの例外に関する一般的なトラブルシューティングのレコメンデーションを次に示します。

  • 400: Kinesis Data Firehose の設定ミスにより、不正なリクエストを送信していることを示します。送信先について、正しい url一般的な属性コンテンツのエンコードアクセスキー、およびバッファリングヒントがあることを確認します 必要な設定については、送信先固有のドキュメントを参照してください。

  • 401: 配信ストリームに対して設定したアクセスキーが正しくないか、見つからないことを示します。

  • 403: 配信ストリームに対して設定したアクセスキーに、設定済みのエンドポイントにデータを配信するアクセス許可がないことを示します。

  • 413: Kinesis Data Firehose がエンドポイントに送信するリクエストペイロードが大きすぎてエンドポイントで処理できないことを示します。送信先の推奨サイズへバッファリングヒントを下げることを試行します。

  • 429: Kinesis Data Firehose が、送信先が処理できる速度よりも高い速度でリクエストを送信していることを示します。バッファリング時間を増やしたり、バッファリングサイズを増やしたりして、バッファリングヒントを微調整します (ただし、送信先の制限内にとどまります)。

  • 5xx: 送信先に問題があることを示します。Kinesis 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" }

無効なレスポンスの例外は、Kinesis Data Firehose がエンドポイントの送信先から無効なレスポンスを受信したことを示します。レスポンスがレスポンスの仕様に従う必要があるか、Kinesis Data Firehose が配信の試行を失敗と見なし、設定された再試行期間を超えるまで同じデータを再配信します。Kinesis Data Firehose は、レスポンスには 200 のステータスがあっても、レスポンスの仕様に従わないレスポンスを失敗として扱います。Kinesis Data Firehose 互換エンドポイントを開発している場合は、レスポンスの仕様に従って、データが正常に配信されることを確認します。

以下に、一般的な無効なレスポンスの種類とその修正方法を示します。

  • 無効な JSON または予期しないフィールド: レスポンスが JSON として正しく逆シリアル化できないか、予期しないフィールドがあることを示します。レスポンスがコンテンツエンコードされていないことを確認します。

  • requestId が見つからない: レスポンスに requestId が含まれていないことを示します。

  • requestId が一致しない: レスポンス内の requestId が発信 requestId と一致しないことを示します。

  • タイムスタンプが見つからない: レスポンスにタイムスタンプフィールドが含まれていないことを示します。タイムスタンプフィールドは、文字列ではなく数値でなければなりません。

  • コンテンツタイプが見つからない: レスポンスに「content-type: application/json」ヘッダーが含まれていないことを示します。その他の content-type は受け入れられません。

重要

重要: Kinesis Data Firehose は、Firehose リクエストとレスポンスの仕様に従うエンドポイントにのみデータを配信できます。サードパーティーサービスへの送信先を設定する場合は、パブリック取り込みエンドポイントとは異なる可能性がある正しい Kinesis Data Firehose 互換エンドポイントを使用していることを確認してください。たとえば、Datadog の Kinesis Data Firehose エンドポイントは https://aws-kinesis-http-intake.logs.datadoghq.com/ ですが、パブリックエンドポイントは https://api.datadoghq.com/ です。

その他の一般的なエラー

追加のエラーコードと定義を以下に示します。

  • エラーコード: HttpEndpoint.RequestTimeout - エンドポイントが応答に 3 分以上かかったことを示します。送信先の所有者である場合は、送信先エンドポイントの応答時間を短くします。送信先の所有者でない場合は、所有者に連絡して、応答時間を短縮するために何かできるかどうかを尋ねます (つまり、バッファリングヒントを減らして、リクエストごとに処理されるデータが少なくなるようにします)。

  • エラーコード: HttpEndpoint.ResponseTooLarge - レスポンスが大きすぎることを示します。レスポンスは、ヘッダーを含め 1 MiB 未満にする必要があります。

  • エラーコード: HttpEndpoint.ConnectionFailed - 設定されたエンドポイントとの接続を確立できなかったことを示します。これは、設定された URL の入力ミス、Kinesis Data Firehose からエンドポイントにアクセスできない、またはエンドポイントが接続リクエストに応答するのに時間がかかりすぎていることが原因である可能性があります。

  • エラーコード: HttpEndpoint.ConnectionReset - 接続が確立されたけれども、エンドポイントによってリセットされたか、または途中で閉じられたことを示します。

  • エラーコード: HttpEndpoint.SSLHandshakeFailure - 設定されたエンドポイントで SSL ハンドシェイクが正常に完了できなかったことを示します。