CloudWatch Logs 中的日志格式
当 Amazon S3 服务器访问日志传输到 Amazon CloudWatch Logs 时,每条日志记录都是一个结构化的 JSON 对象。这不同于用于传输到 Amazon S3 通用存储桶的以空格分隔的文本格式。借助结构化格式,无需正则表达式解析,字段即可在 CloudWatch Logs Insights 中直接供查询。
注意
有关用于通用存储桶传输的以空格分隔的文本格式,请参阅 Amazon S3 服务器访问日志格式。
日志记录字段
下表描述了传输到 CloudWatch Logs 的每个服务器访问日志记录中的字段。
| 字段 | 类型 | 说明 |
|---|---|---|
schema_version_id |
字符串 | 日志记录架构的版本标识符(例如 V_1_0)。当在将来版本中添加新字段时,使用此字段来检测架构更改。 |
bucket_arn |
字符串 | 源存储桶的 ARN。 |
bucket_name |
字符串 | 向其发出请求的存储桶的名称。派生自存储桶 ARN。 |
request_time |
字符串 | 收到请求的时间(UTC)。格式化为 ISO 8601 (yyyy-MM-dd'T'HH:mm:ss.SSS'Z')。在 S3 表类数据存储服务集成(Iceberg)中,此字段存储为 timestamptz。 |
bucket_owner_id |
字符串 | 源存储桶拥有者的规范用户 ID。 |
remote_ip |
字符串 | 请求者的可见 IP 地址。如果不可用,则默认为 null。 |
requester |
字符串 | 请求者的规范用户 ID,或对于未经身份验证的请求为 null。对于 IAM 用户和角色,这是 ARN。 |
request_id |
字符串 | 由 Amazon S3 为每个请求生成的唯一标识符。如果不可用,则默认为 null。 |
operation |
字符串 | 已执行的操作,例如 REST.GET.OBJECT 或 REST.PUT.OBJECT。如果不可用,则默认为 null。 |
key_name |
字符串 | 请求中的对象键,或者,如果操作不涉及对象,则为 null。 |
request_uri |
字符串 | HTTP 请求消息的 Request-URI 部分,或者,如果不可用,则为 null。 |
http_status |
int | 响应的数字 HTTP 状态代码,例如 200 或 403。如果不可用,则默认为 null。 |
error_code |
字符串 | Amazon S3 错误代码,例如 NoSuchKey 或 AccessDenied,或者,如果没有发生错误,则为 null。 |
bytes_sent_size |
长整数 | 发送的响应字节数(不包括 HTTP 协议开销)。如果不可用,则默认为 null。 |
object_size |
长整数 | 对象的总大小。如果不可用,则默认为 null。 |
total_duration |
长整数 | 从收到请求到发出响应的最后一个字节的请求总时间,以毫秒为单位。如果不可用,则默认为 null。 |
turn_around_duration |
长整数 | Amazon S3 处理请求所花费的时间,以毫秒为单位。该值计算从收到请求的最后一个字节到发出响应的第一个字节的时间。如果不可用,则默认为 null。 |
referer |
字符串 | HTTP Referer 标头的值,或者,如果不存在,则为 null。 |
user_agent |
字符串 | HTTP User-Agent 标头的值。如果不可用,则默认为 null。 |
version_id |
字符串 | 请求中的版本 ID,或者,如果操作不涉及受版本控制的对象,则为 null。 |
host_id |
字符串 | Amazon S3 扩展的请求 ID (x-amz-id-2)。如果不可用,则默认为 null。 |
signature_version |
字符串 | 用于对请求进行身份验证的签名版本:SigV2 或 SigV4。对于未经身份验证的请求,默认为 null。 |
cipher_suite |
字符串 | 针对 HTTPS 请求协商的 TLS 密码套件,或者,对于 HTTP,则为 null。 |
authentication_type |
字符串 | 请求身份验证的类型:AuthHeader、QueryString 或 null。 |
host_header |
字符串 | 用于连接到 Amazon S3 的端点。如果不可用,则默认为 null。 |
tls_version |
字符串 | 客户端协商的 TLS 版本:TLSv1.1、TLSv1.2、TLSv1.3 或 null。 |
access_point_arn |
字符串 | 用于请求的接入点的 ARN,或者,如果请求未使用接入点,则为 null。 |
acl_required |
布尔值 | 请求是否需要 ACL。不适用时,默认为 null。 |
source_region |
字符串 | 从中发出请求的 AWS 区域,或者,当无法确定源区域 [例如 PrivateLink 连接、Direct Connect 连接、自带 IP 地址(BYOIP)或非 AWS IP 地址] 时,或者当日志由根据客户设置的策略或操作(例如生命周期和校验和)触发的操作而生成时,为 null。 |
示例日志记录
以下是 CloudWatch Logs 中显示的服务器访问日志记录的示例。
{ "schema_version_id": "V_1_0", "bucket_arn": "arn:aws:s3:::my-data-bucket", "bucket_name": "my-data-bucket", "request_time": "2026-04-29T14:32:16.000Z", "bucket_owner_id": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be", "remote_ip": "203.0.113.45", "requester": "arn:aws:iam::123456789012:role/DataAnalystRole", "request_id": "3E57427F33A59F07", "operation": "REST.GET.OBJECT", "key_name": "reports/2026/quarterly-summary.parquet", "request_uri": "GET /my-data-bucket/reports/2026/quarterly-summary.parquet HTTP/1.1", "http_status": 200, "error_code": null, "bytes_sent_size": 1048576, "object_size": 1048576, "total_duration": 45, "turn_around_duration": 12, "referer": null, "user_agent": "aws-sdk-java/2.20.0", "version_id": null, "host_id": "s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=", "signature_version": "SigV4", "cipher_suite": "TLS_AES_128_GCM_SHA256", "authentication_type": "AuthHeader", "host_header": "my-data-bucket.s3.us-east-1.amazonaws.com", "tls_version": "TLSv1.3", "access_point_arn": null, "acl_required": false, "source_region": "us-east-1" }
与通用存储桶日志格式的区别
CloudWatch Logs 日志格式与通用存储桶日志格式在以下方面有所不同:
-
格式:CloudWatch Logs 日志是结构化的 JSON 对象。通用存储桶日志是以空格分隔的文本。
-
字段名称:CloudWatch Logs 格式使用通过下划线分隔的描述性字段名称(例如
bytes_sent_size、total_duration、key_name、authentication_type)。通用存储桶格式是以空格分隔的位置文本,没有命名列。 -
其它字段:CloudWatch Logs 格式包括
schema_version_id和bucket_arn,它们不以通用存储桶文本格式存在。 -
无需解析:由于 CloudWatch Logs 日志是结构化的 JSON,因此,您可以直接在 CloudWatch Logs Insights 中查询各个字段,而无需进行正则表达式解析。通用存储桶文本格式需要正则表达式或自定义解析器来提取字段。