CloudWatch Logs의 로그 형식
CloudWatch Logs의 로그 형식
Amazon S3 서버 접근 로그가 Amazon CloudWatch Logs로 전달되면 각 로그 레코드는 구조화된 JSON 객체예요. 이는 일반 용도 Amazon S3 버킷 전달에 사용되는 공백으로 구분된 텍스트 형식과 달라요. 구조화된 형식 덕분에 regex 파싱 없이 CloudWatch Logs Insights에서 필드를 직접 조회할 수 있어요.
참고: 일반 용도 버킷 전달에 사용되는 공백으로 구분된 텍스트 형식은 "Amazon S3 서버 접근 로그 형식"을 참고하세요.
출처: 문서
본문
로그 레코드 필드
다음 표는 CloudWatch Logs로 전달되는 각 서버 접근 로그 레코드의 필드를 설명해요.
| 필드 | 유형 | 설명 |
|---|---|---|
| schema_version_id | string | 로그 레코드 스키마의 버전 식별자(예: V_1_0). 향후 버전에서 새 필드가 추가될 때 스키마 변경을 감지하는 데 이 필드를 사용해요. |
| bucket_arn | string | 소스 버킷의 ARN. |
| bucket_name | string | 요청이 이루어진 버킷의 이름. 버킷 ARN에서 파생. |
| request_time | string | 요청을 받은 시각(UTC). ISO 8601(yyyy-MM-dd'T'HH:mm:ss.SSS'Z') 형식. S3 Tables 통합(Iceberg)에서는 이 필드가 timestamptz로 저장돼요. |
| bucket_owner_id | string | 소스 버킷 소유자의 정규 사용자 ID. |
| remote_ip | string | 요청자의 표시 IP 주소. 사용할 수 없으면 기본값 null. |
| requester | string | 요청자의 정규 사용자 ID 또는 인증되지 않은 요청의 경우 null. IAM 사용자와 역할은 ARN. |
| request_id | string | Amazon S3가 각 요청에 대해 생성하는 고유 식별자. 사용할 수 없으면 기본값 null. |
| operation | string | 수행된 작업(예: REST.GET.OBJECT 또는 REST.PUT.OBJECT). 사용할 수 없으면 기본값 null. |
| key_name | string | 요청의 객체 키 또는 객체와 관련되지 않은 작업의 경우 null. |
| request_uri | string | HTTP 요청 메시지의 Request-URI 부분 또는 사용할 수 없으면 null. |
| http_status | int | 응답의 숫자 HTTP 상태 코드(예: 200 또는 403). 사용할 수 없으면 기본값 null. |
| error_code | string | 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 | string | HTTP Referer 헤더 값 또는 없으면 null. |
| user_agent | string | HTTP User-Agent 헤더 값. 사용할 수 없으면 기본값 null. |
| version_id | string | 요청의 버전 ID 또는 버전 관리된 객체와 관련되지 않은 작업의 경우 null. |
| host_id | string | Amazon S3 확장 요청 ID(x-amz-id-2). 사용할 수 없으면 기본값 null. |
| signature_version | string | 요청 인증에 사용된 서명 버전: SigV2 또는 SigV4. 인증되지 않은 요청은 기본값 null. |
| cipher_suite | string | HTTPS 요청에 대해 협상된 TLS 암호 스위트 또는 HTTP의 경우 null. |
| authentication_type | string | 요청 인증 유형: AuthHeader, QueryString 또는 null. |
| host_header | string | Amazon S3에 연결하는 데 사용된 엔드포인트. 사용할 수 없으면 기본값 null. |
| tls_version | string | 클라이언트가 협상한 TLS 버전: TLSv1.1, TLSv1.2, TLSv1.3 또는 null. |
| access_point_arn | string | 요청에 사용된 접근 지점의 ARN 또는 요청이 접근 지점을 사용하지 않았다면 null. |
| acl_required | boolean | 요청에 ACL이 필요했는지 여부. 해당하지 않으면 기본값 null. |
| source_region | string | 요청이 시작된 AWS 리전 또는 시작 리전을 확인할 수 없으면 null. 예로는 PrivateLink 연결, Direct Connect 연결, Bring Your Own IP(BYOIP), 비 AWS IP 주소, Lifecycle·체크섬 같은 정책 기반 작업으로 생성된 로그가 있어요. |
샘플 로그 레코드
다음은 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이므로 regex 파싱 없이 CloudWatch Logs Insights에서 개별 필드를 직접 조회할 수 있어요. 일반 용도 버킷 텍스트 형식은 필드를 추출하려면 regex나 사용자 지정 파서가 필요해요.