本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
本節說明處理 Amazon Data Firehose 將資料交付至一般 HTTP 端點目的地和合作夥伴目的地時常見的疑難排解步驟,包括 Datadog、Dynatrace、LogicMonitor、MongoDB、New Relic、Splunk 或 Sumo Logic。就本節而言,所有適用的目的地均稱為 HTTP 端點。請確定 Firehose 串流中指定的 IAM 角色可以存取 S3 備份儲存貯體和 Lambda 函數以進行資料轉換 (如果已啟用資料轉換)。此外,請確定 IAM 角色可存取 CloudWatch 日誌群組和日誌串流,以檢查錯誤日誌。如需詳細資訊,請參閱授予 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 個回應也會導致目的地例外狀況。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 服務仍然正常運作。
重要
重要事項:雖然這些是常見的疑難排解建議,但特定端點可能有不同的原因提供回應代碼,並且應先遵循端點特定建議。
無效的回應
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 會將交付嘗試視為失敗,並會重新交付相同的資料,直到超過設定的重試持續時間為止。Amazon Data Firehose 會將未遵循回應規格的回應視為失敗,即使回應的狀態為 200。如果您正在開發與 Amazon Data Firehose 相容的端點,請遵循回應規格以確保資料成功交付。
以下是一些常見的無效回覆類型,以及修正這些問題的方法:
-
無效的 JSON 或非預期欄位:表示回應無法正確還原序列化為 JSON,或具有非預期的欄位。請確認回應未進行內容編碼。
-
缺失 RequestId:表示回應不包含 requestId。
-
RequestId 項目不符:表示回應中的 requestId 與傳出的 requestId 不符。
-
缺失時間戳記:表示回應不包含時間戳記欄位。時間戳記欄位必須是數字,而不是字串。
-
缺失內容類型標題:表示回應不包含「內容類型:應用程式/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 - 表示回應太大。回應必須小於 1 MiB (包括標頭)。
-
錯誤代碼:HttpEndpoint.ConnectionFailed - 表示無法用設定的端點建立連線。這可能是因為設定的 url 中有錯別字、Amazon Data Firehose 無法存取端點,或端點回應連線請求的時間太長。
-
錯誤代碼:HttpEndpoint.ConnectionReset - 表示已建立連線,但由端點重設或過早關閉。
-
錯誤代碼:HttpEndpoint.SSLHandshakeFailure - 表示無法使用設定端點成功完成 SSL 握手。