获取 Amazon Web Services Support 的 Amazon S3 请求 ID - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

获取 Amazon Web Services Support 的 Amazon S3 请求 ID

每当您因为在 Amazon S3 中遇到错误或意外行为而联系 Amazon Web Services Support 时,您必须提供与失败操作相关联的请求 ID。Amazon Web Services Support 使用这些请求 ID 来帮助解决您遇到的问题。

请求 ID 成对出现,并在 Amazon S3 处理的每个响应(甚至是错误的响应)中返回并可通过详细日志访问。可通过许多常见的方法来获取您的请求 ID,包括 S3 访问日志和 Amazon CloudTrail 事件或数据事件。

在您恢复这些日志后,复制并保留这两个值,因为您在联系 时需要它们Amazon Web Services Support 有关联系 Amazon Web Services Support 的信息,请参阅联系 AmazonAmazon Web Services Support 文档

使用 HTTP 获得请求 ID

您可以在 HTTP 请求到达目标应用程序之前记录该请求的位数来获取您的请求 ID,即 x-amz-request-idx-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 响应标头。有关适用于特定浏览器的开发人员工具的信息,请参阅 Amazon Web Services re:Post 中的 Amazon S3 疑难解答 – 如何恢复 S3 请求 ID

使用 Amazon SDK 获得请求 ID

以下各节包含有关使用 Amazon SDK 配置日志记录的信息。尽管您可以对每个请求和响应启用详细的日志记录,但我们不建议在生产系统中启用日志记录,因为大型请求或响应会显著降低应用程序的速度。

对于 Amazon 开发工具包请求,请求 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

使用适用于 PHP 的 SDK 获取请求 ID

可以使用 PHP 配置日志记录。有关更多信息,请参阅《Amazon SDK for PHP 开发人员指南》中的如何查看在网上发送了什么数据?

使用适用于 Java 的 SDK 获取请求 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 请求和响应的详细日志记录。有关更多信息,请参阅《Amazon SDK for Java 开发人员指南》中的详细线路日志记录

使用 Amazon SDK for .NET 获得请求 ID

可以使用内置的 Amazon SDK for .NET 日志记录工具通过 System.Diagnostics 配置日志记录。有关更多信息,请参阅 Amazon 开发人员博客 文章使用适用于 .NET 的 Amazon SDK 进行日志记录

注意

默认情况下,返回的日志仅包含错误信息。要获取请求 ID,配置文件必须添加了 AWSLogMetrics(可以选择添加 AWSResponseLogging)。

使用适用于 Python 的 SDK(Boto3)获取请求 ID

使用 Amazon 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 的 Amazon SDK(Boto3)API 参考》中的从错误响应中识别有用信息

此外,您可以使用以下代码将 Boto3 配置为输出详细调试日志:

import boto3 boto3.set_stream_logger('', logging.DEBUG)

有关更多信息,请参阅《适用于 Python 的 Amazon SDK(Boto3)API 参考》中的 set_stream_logger

使用适用于 Ruby 的 SDK 获取请求 ID

您可以使用适用于 Ruby 的 SDK 版本 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)

有关从 Amazon 客户端获取线路信息的提示,请参阅调试提示:从客户端获取线路跟踪信息

使用 Amazon CLI 获得请求 ID

要在使用 Amazon Command Line Interface(Amazon CLI)时获取您的请求 ID,请将 --debug 添加到您的 命令中。

使用 Windows PowerShell 获取请求 ID

有关使用 Windows PowerShell 恢复日志的信息,请参阅 .NET 开发博客文章 Amazon Tools for Windows PowerShell 中的响应日志记录

使用 Amazon CloudTrail 数据事件获取请求 ID

使用 CloudTrail 数据事件配置为记录 S3 对象级别 API 操作的 Amazon S3 桶提供了有关用户、角色或 Amazon 服务在 Amazon S3 桶中所采取操作的详细信息。您可以通过向 Athena 查询 CloudTrail 事件来识别 S3 请求 ID

使用 S3 服务器访问日志记录获取请求 ID

为 S3 服务器访问日志记录配置的 Amazon S3 桶为向桶发出的每个请求提供详细记录。您可以通过使用 Athena 查询服务器访问日志来识别 S3 请求 ID。