HTTP 엔드포인트 문제 해결 - Amazon Data Firehose

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

HTTP 엔드포인트 문제 해결

이 섹션에서는 Amazon Data Firehose가 일반 HTTP 엔드포인트 대상 및 Datadog, Dynatrace, LogicMonitor, MongoDB, New Relic, Splunk 또는 Sumo Logic을 포함한 파트너 대상으로 데이터를 전송하는 문제를 처리할 때 발생하는 일반적인 문제 해결 단계를 설명합니다. 이 섹션에서는 해당하는 모든 대상을 HTTP 엔드포인트라고 합니다. Firehose 스트림에 지정된 IAM 역할이 S3 백업 버킷과 데이터 변환을 위한 Lambda 함수(데이터 변환이 활성화된 경우)에 액세스할 수 있는지 확인합니다. 또한 오류 로그를 확인할 수 있는 CloudWatch 로그 그룹 및 로그 스트림에 대한 액세스 권한이 IAM 역할에 있는지 확인합니다. 자세한 정보는 Firehose에 HTTP 엔드포인트 대상에 대한 액세스 권한 부여를 참조하세요.

참고

이 섹션의 정보는 Splunk, OpenSearch Service, S3, Redshift와 같은 대상에는 해당되지 않습니다.

CloudWatch Logs

대해 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 Logs에 기록합니다. Amazon Data Firehose는 수정 또는 해석 없이 응답 코드와 페이로드를 기록하므로 Amazon Data Firehose의 HTTP 전송 요청을 거부한 정확한 이유를 제공하는 것은 엔드포인트에 달려 있습니다. 이러한 예외 경우에 대한 가장 일반적으로 권장하는 문제 해결 방법은 다음과 같습니다.

  • 400: 잘못된 Amazon Data Firehose 구성으로 인해 잘못된 요청을 보내고 있음을 나타냅니다. 대상의 URL, 공통 속성, 콘텐츠 인코딩, 액세스 키, 버퍼링 힌트가 올바른지 확인하세요. 필수 구성에 대한 대상별 설명서를 참조하세요.

  • 401: Firehose 스트림에 대해 구성한 액세스 키가 잘못되었거나 누락되었음을 나타냅니다.

  • 403: Firehose 스트림에 대해 구성한 액세스 키에 구성된 엔드포인트에 데이터를 전송할 권한이 없음을 나타냅니다.

  • 413: Amazon Data Firehose가 엔드포인트로 전송하는 요청 페이로드가 엔드포인트에서 처리하기에 너무 크다는 것을 표시합니다. 버퍼링 힌트를 대상의 권장 크기로 낮춰 보세요.

  • 429: Amazon Data Firehose가 대상이 처리 가능 속도보다 빠른 속도로 요청을 보내고 있음을 나타냅니다. 버퍼링 시간을 늘리거나 버퍼링 크기를 늘려 버퍼링 힌트를 미세 조정하세요 (단, 대상 한도 내에서).

  • 5xx: 대상에 문제가 있음을 나타냅니다. Amazon Data Firehose 서비스는 여전히 제대로 작동합니다.

중요

중요: 이는 일반적인 문제 해결 권장 사항이지만 엔드포인트별로 응답 코드를 제공하는 이유가 다를 수 있으므로 엔드포인트별 권장 사항을 먼저 따라야 합니다.

잘못된 응답

오류 코드: 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는 전송 시도를 실패로 간주하고 구성된 재시도 기간이 초과될 때까지 동일한 데이터를 재전송합니다. Amazon Data Firehose는 응답의 상태가 200이더라도 응답 사양을 따르지 않는 응답은 실패로 간주합니다. Amazon Data Firehose 호환 엔드포인트를 개발 중인 경우 데이터가 성공적으로 전달되도록 응답 사양을 따르세요.

다음은 잘못된 응답의 일반적인 유형 일부와 그 해결 방법입니다.

  • 잘못된 JSON 또는 예상치 못한 필드: 응답을 JSON으로 적절하게 역직렬화할 수 없거나 예상치 못한 필드가 있음을 나타냅니다. 응답이 콘텐츠 인코딩되어 있는지 확인하세요.

  • 요청 ID 누락: 응답에 요청 ID가 포함되어 있지 않음을 나타냅니다.

  • 요청 ID 불일치: 응답의 RequestID가 발신 요청 ID와 일치하지 않음을 나타냅니다.

  • 타임스탬프 누락: 응답에 타임스탬프 필드가 포함되어 있지 않음을 나타냅니다. 타임스탬프 필드는 문자열이 아니라 숫자여야 합니다.

  • 콘텐츠 유형 헤더 누락: 응답에 “content-type: application/json” 헤더가 포함되어 있지 않음을 나타냅니다. 다른 콘텐츠 유형은 허용되지 않습니다.

중요

중요: Amazon Data 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 - 구성된 엔드포인트와 연결을 설정할 수 없음을 나타냅니다. 구성된 URL에 오타가 있거나, Amazon Data Firehose에서 엔드포인트에 액세스할 수 없거나, 엔드포인트가 연결 요청에 응답하는 데 시간이 너무 오래 걸리는 원인일 수 있습니다.

  • 오류 코드: httpEndPoint.ConnectionReset - 연결이 설정되었지만 엔드포인트에 의해 재설정되었거나 조기에 종료되었음을 나타냅니다.

  • 오류 코드: httpEndPoint.sslHandshakeFailure - 구성된 엔드포인트에서 SSL 핸드셰이크를 성공적으로 완료할 수 없음을 나타냅니다.