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나 사용자 지정 파서가 필요해요.

더 알아보기 (Learn more)