

# CloudWatch Logs의 로그 형식
<a name="sal-cw-log-format"></a>

Amazon S3 서버 액세스 로그가 Amazon CloudWatch Logs로 전송될 때, 각 로그 레코드는 구조화된 JSON 객체입니다. 이는 Amazon S3 범용 버킷으로 전송하는 데 사용되는 공백으로 구분된 텍스트 형식과 다릅니다. 구조화된 형식을 사용하면 정규식 구문 분석 없이 CloudWatch Logs Insights에서 필드를 직접 쿼리할 수 있습니다.

**참고**  
범용 버킷 전송에 사용되는 공백으로 구분된 텍스트 형식은 [Amazon S3 서버 액세스 로그 형식](LogFormat.md) 섹션을 참조하세요.

## 로그 레코드 필드
<a name="sal-cw-log-record-fields"></a>

다음 표에서는 CloudWatch Logs에 전송되는 각 서버 액세스 로그 레코드의 필드를 설명합니다.


**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입니다. | 

## 로그 레코드 샘플
<a name="sal-cw-sample-record"></a>

다음은 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"
}
```

## 범용 버킷 로그 형식과의 차이점
<a name="sal-cw-format-differences"></a>

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에서 직접 개별 필드를 쿼리할 수 있습니다. 필드를 추출하려면 범용 버킷 텍스트 형식에 정규식 또는 사용자 지정 구문 분석기가 필요합니다.