CloudWatch Logs의 로그 형식
Amazon S3 서버 액세스 로그가 Amazon CloudWatch Logs로 전송될 때, 각 로그 레코드는 구조화된 JSON 객체입니다. 이는 Amazon S3 범용 버킷으로 전송하는 데 사용되는 공백으로 구분된 텍스트 형식과 다릅니다. 구조화된 형식을 사용하면 정규식 구문 분석 없이 CloudWatch Logs Insights에서 필드를 직접 쿼리할 수 있습니다.
참고
범용 버킷 전송에 사용되는 공백으로 구분된 텍스트 형식은 Amazon S3 서버 액세스 로그 형식 섹션을 참조하세요.
로그 레코드 필드
다음 표에서는 CloudWatch Logs에 전송되는 각 서버 액세스 로그 레코드의 필드를 설명합니다.
| Field | 유형 | 설명 |
|---|---|---|
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 Tables 통합(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 |
long | 전송된 응답 바이트 수입니다(HTTP 프로토콜 오버헤드 제외). 사용할 수 없는 경우 기본값은 null입니다. |
object_size |
long | 객체의 총 크기입니다. 사용할 수 없는 경우 기본값은 null입니다. |
total_duration |
long | 요청이 수신된 시간부터 전송된 응답의 마지막 바이트까지의 총 요청 시간입니다. 사용할 수 없는 경우 기본값은 null입니다. |
turn_around_duration |
long | 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에서 직접 개별 필드를 쿼리할 수 있습니다. 필드를 추출하려면 범용 버킷 텍스트 형식에 정규식 또는 사용자 지정 구문 분석기가 필요합니다.