本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
獲取 Amazon S3 請求 ID AWS Support
每當您 AWS Support 因為在 Amazon S3 中遇到錯誤或非預期行為而聯絡時,都必須提供與失敗動作相關聯的請求 ID。 AWS Support 使用這些要求 ID 來協助解決您遇到的問題。
請求 ID 成對出現、在 Amazon S3 處理的每個回應中傳回 (甚至是錯誤回應),而且可透過詳細日誌取得。取得請求 ID 的常用方法有許多,包括 S3 存取日誌和 AWS CloudTrail 事件或資料事件。
復原這些記錄檔之後,請複製並保留這兩個值,因為聯絡時會需要這兩個值 AWS Support。如需有關連絡人的資訊 AWS Support,請參閱連絡人 AWS
使用 HTTP 取得請求 ID
您可以在 HTTP 要求傳抵目標應用程式之前,先記錄 HTTP 要求的位元數,從而取得自己的要求 ID x-amz-request-id
與 x-amz-id-2
。您有多種第三方工具可供您用來復原 HTTP 要求的詳細日誌。請選擇您信任的工具來執行,當您送出另一個 Amazon S3 HTTP 請求時,接聽 Amazon S3 流量行經的連接埠。
HTTP 請求的請求 ID 對類似下列範例所示:
x-amz-request-id: 79104EXAMPLEB723 x-amz-id-2: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km
注意
在大部分的封包擷取中,多會加密及隱藏 HTTPS 要求。
使用 Web 瀏覽器取得請求 ID
大多數 Web 瀏覽器都會提供開發人員工具,您可用來檢視請求標頭。
傳回錯誤之 Web 瀏覽器要求的要求 ID 對類似下列範例所示。
<Error><Code>AccessDenied</Code><Message>Access Denied</Message> <RequestId>79104EXAMPLEB723</RequestId><HostId>IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km</HostId></Error>
若要從成功的請求取得請求 ID 對,請使用瀏覽器的開發人員工具檢視 HTTP 回應標頭。如需適用於特定瀏覽器的開發人員工具的資訊,請參閱 AWS re:Post
使用 AWS SDK 取得要求識別碼
下列各節包含如何使用 AWS 開發套件設定日誌的資訊。雖然您可以啟用詳細記錄功能,記錄每個要求與回應,但不建議在生產系統中啟用記錄,因為大量的要求或回應可能會造成應用程式的速度明顯變慢。
對於 AWS SDK 請求,一對請求 ID 看起來像下列範例。
Status Code: 403, AWS Service: Amazon S3, AWS Request ID: 79104EXAMPLEB723 AWS Error Code: AccessDenied AWS Error Message: Access Denied S3 Extended Request ID: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km
使用適用於 Go 的 SDK 來取得要求識別碼
您可以使用適用 SDK for Go 來設定記錄。如需詳細資訊,請參閱 Go V2 開發人員指南中的 SDK 中的回應中繼
使用適用於 PHP 的開發套件以取得請求 ID
您可使用 PHP 設定記錄功能。如需詳細資訊,請參閱適用於《AWS SDK for PHP 開發人員指南》中的如何得知網路上傳送哪些資料?。
使用適用於 Java 的開發套件取得請求 ID
您可以為特定請求或回應啟用記錄功能,只擷取及傳回相關的標頭。若要執行此作業,請匯入 com.amazonaws.services.s3.S3ResponseMetadata
類別。如此一來,您就能將請求存放在變數中,然後再執行實際的要求。若要取得所記錄的請求或回應,請呼叫 getCachedResponseMetadata(AmazonWebServiceRequest
request).getRequestID()
。
PutObjectRequest req = new PutObjectRequest(bucketName, key, createSampleFile()); s3.putObject(req); S3ResponseMetadata md = s3.getCachedResponseMetadata(req); System.out.println("Host ID: " + md.getHostId() + " RequestID: " + md.getRequestId());
或者,您可以對每一個 Java 要求與回應使用詳細記錄功能。如需詳細資訊,請參閱《AWS SDK for Java 開發人員指南》中的詳細連線記錄。
使用取得 AWS SDK for .NET 要求識別碼
您可以使用內建 AWS SDK for .NET 的記錄工具來設定System.Diagnostics
記錄。如需詳細資訊,請參閱使用 AWS SDK for .NET AWS 開發人員部落格文章的記錄
注意
傳回的記錄預設只會包含錯誤資訊。若要取得請求 ID,必須在設定檔中新增 AWSLogMetrics
(以及選用的 AWSResponseLogging
)。
使用適用於 Python (Boto3) 的開發套件取得請求 ID
使用 AWS SDK for Python (Boto3),您可以記錄特定回應。您可以使用此功能僅擷取相關標頭。下列程式碼顯示如何將回應的部分記錄到檔案中:
import logging import boto3 logging.basicConfig(filename='logfile.txt', level=logging.INFO) logger = logging.getLogger(__name__) s3 = boto3.resource('s3') response = s3.Bucket(bucket_name).Object(object_key).put() logger.info("HTTPStatusCode: %s", response['ResponseMetadata']['HTTPStatusCode']) logger.info("RequestId: %s", response['ResponseMetadata']['RequestId']) logger.info("HostId: %s", response['ResponseMetadata']['HostId']) logger.info("Date: %s", response['ResponseMetadata']['HTTPHeaders']['date'])
您也可以擷取例外狀況,並在引發例外狀況時記錄相關資訊。如需詳細資訊,請參閱適用於 Python (Boto) 的AWS 開發套件 API 參考中的從錯誤回應中辨別實用的資訊
此外,您可以使用下列程式碼,配置 Boto3 輸出詳細資訊偵錯記錄檔:
import boto3 boto3.set_stream_logger('', logging.DEBUG)
如需詳細資訊,請參閱適用於 Python (Boto) 的AWS 開發套件 API 參考中的 set_stream_logger
使用適用於 Ruby 的開發套件取得請求 ID
您可以使用適用於 Ruby 的開發套件版本 1、2 或 3,以取得請求 ID。
-
使用適用於 Ruby 的開發套件 - 版本 1 – 您可以使用下一行程式碼,全域啟用 HTTP 連線記錄。
s3 = AWS::S3.new(:logger => Logger.new($stdout), :http_wire_trace => true)
-
使用適用於 Ruby 的開發套件 - 版本 2 或版本 3 – 您可以使用下一行程式碼,全域啟用 HTTP 連線記錄。
s3 = Aws::S3::Client.new(:logger => Logger.new($stdout), :http_wire_trace => true)
如需從 AWS 用戶端取得電線資訊的提示,請參閱偵錯秘訣:從用戶端取得配線追蹤資訊。
使用取得 AWS CLI 要求識別碼
若要在使用 AWS Command Line Interface (AWS CLI) 時取得要求 ID,請新增--debug
至您的命令。
使用視窗取得 PowerShell 要求識別碼
如需有關使用 Windows 復原記錄檔的資訊 PowerShell,請參閱 AWS Tools for Windows PowerShell.NET 開發中的回應記錄
使用 AWS CloudTrail 資料事件取得要求 ID
使用資 CloudTrail 料事件設定的 Amazon S3 儲存貯體以記錄 S3 物件層級 API 操作,可提供有關 Amazon S3 中使用者、角色或 AWS 服務採取的動作的詳細資訊。您可以透過向 Athena 查詢 CloudTrail 事件來識別 S3 請求 ID。
使用 S3 伺服器存取記錄日誌來取得請求 ID
為 S3 伺服器存取記錄設定的 Amazon S3 儲存貯體,針對向儲存貯體提出的請求,提供詳細的記錄。您可以使用 Athena 查詢伺服器存取日誌來識別 S3 請求 ID。