액세스 로그 구성 및 사용 - Amazon CloudFront

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

액세스 로그 구성 및 사용

로그 파일을 생성하도록 CloudFront를 구성할 수 있습니다. 이러한 로그 파일에는 CloudFront에서 수신하는 모든 사용자 요청에 대한 세부 정보가 포함됩니다. 이러한 액세스 로그는 웹 및 RTMP 배포 모두에 사용할 수 있습니다. 로깅을 활성화하면 CloudFront에서 파일을 저장할 Amazon S3 버킷도 지정할 수 있습니다.

배포를 만들거나 업데이트할 때 로깅을 활성화할 수 있습니다. 자세한 내용은 배포를 만들거나 업데이트할 때 지정하는 값 단원을 참조하십시오.

로깅 작동 방식

다음 다이어그램은 CloudFront에서 객체 요청에 대한 정보를 어떻게 기록하는지 보여 줍니다.


					액세스 로그 기본 흐름

이전 다이어그램에 설명된 객체 요청에 대한 CloudFront 로그 정보가 아래에 나와 있습니다.

  1. 이 다이어그램에서는 A와 B라는 두 웹 사이트가 있고 그에 해당하는 CloudFront 배포 두 개가 있습니다. 사용자가 배포와 연결된 URL을 사용하여 객체를 요청합니다.

  2. CloudFront에서 각 요청을 해당 엣지 로케이션으로 라우팅합니다.

  3. CloudFront에서 각 요청에 대한 데이터를 해당 배포 관련 로그 파일에 기록합니다. 이 예에서는 배포 A와 관련된 요청에 대한 정보가 배포 A 로그 파일에만 기록되고, 배포 B와 관련된 요청에 대한 정보가 배포 B 로그 파일에만 기록됩니다.

  4. 로깅을 활성화할 당시에 지정한 Amazon S3 버킷에 배포하기 위해 CloudFront에서는 로그 파일을 정기적으로 저장합니다. 그런 다음 CloudFront에서는 배포를 위해 후속 요청에 대한 정보를 새 로그 파일에 저장하기 시작합니다.

지정된 시간 동안 콘텐츠에 액세스하는 사용자가 없는 경우 해당 시간 동안 로그 파일이 수신되지 않습니다.

로그 파일의 각 항목은 단일 요청에 대한 세부 정보를 제공합니다. 로그 파일 형식에 대한 자세한 내용은 로그 파일 형식 단원을 참조하십시오.

중요

모든 요청을 완전히 살펴보기 보다는 콘텐츠에 대한 요청 특성을 이해하는 데 로그를 사용하는 것이 좋습니다. CloudFront에서는 최대 효과에 기초하여 액세스 로그를 전송합니다. 요청에 따라서는 실제로 요청이 처리된 지 한참 후에 로그 레코드가 전송되거나 아예 전송되지 않을 수도 있습니다. 로그 항목이 액세스 로그에서 생략되는 경우 액세스 로그의 항목 수가 AWS 사용 보고서 및 결제 보고서에 표시되는 사용량과 일치하지 않습니다.

액세스 로그용 Amazon S3 버킷 선택

배포에 대해 로깅을 활성화하는 경우 CloudFront에서 로그 파일을 저장할 Amazon S3 버킷을 지정할 수 있습니다. Amazon S3을 오리진으로 사용할 경우에는 로그 파일에 동일한 버킷을 사용하지 않는 것이 좋습니다. 별도의 버킷을 사용하면 유지 관리가 간소화됩니다.

참고

Don’t choose an Amazon S3 bucket in any of the following Regions, because CloudFront doesn’t deliver access logs to buckets in these Regions:

  • Africa (Cape Town)  af-south-1

  • Asia Pacific (Hong Kong)  ap-east-1

  • Europe (Milan)  eu-south-1

  • Middle East (Bahrain)  me-south-1

The Amazon S3 console shows the bucket’s Region.

동일 버킷에 여러 배포에 대한 로그 파일을 저장할 수 있습니다. 로깅을 활성화할 경우 파일 이름에 접두사(선택 사항)를 지정하여 배포와 연결되는 로그 파일을 추적할 수 있습니다.

로그 기록 및 로그 파일에 대한 액세스를 구성하는 데 필요한 권한

로그 파일용으로 지정하는 버킷에 대해 AWS 계정에 다음 권한이 있어야 합니다.

  • 버킷의 S3 ACL(액세스 제어 목록)에서 FULL_CONTROL 권한을 부여받아야 합니다. 버킷 소유자인 경우 기본적으로 계정에 이 권한이 있습니다. 이 권한이 없을 경우 버킷 소유자가 버킷에 대한 ACL을 업데이트해야 합니다.

  • s3:GetBucketAcl

  • s3:PutBucketAcl

다음을 참조하십시오.

버킷에 대한 ACL

배포를 생성하거나 업데이트하고 로깅을 활성화할 경우 CloudFront는 이러한 권한을 사용하여 버킷에 대한 ACL을 업데이트함으로써 awslogsdelivery 계정에 FULL_CONTROL 권한을 부여합니다. awslogsdelivery 계정이 로그 파일을 버킷에 기록합니다. ACL을 업데이트하는 데 필요한 권한이 계정에 없을 경우 배포를 생성하거나 업데이트할 수 없습니다.

프로그래밍 방식으로 버킷 생성 요청을 제출했는데 지정한 이름의 버킷이 이미 존재하는 경우, S3는 해당 버킷에 대한 권한을 기본값으로 재설정합니다. 액세스 로그를 S3 버킷에 저장하도록 CloudFront를 구성했는데 더 이상 해당 버킷에서 로그를 가져오지 않는 경우, 버킷에 대한 권한을 점검하여 CloudFront가 필요한 권한을 가지고 있는지 확인하십시오.

버킷에 대한 ACL 복원

awslogsdelivery 계정에 대한 권한을 제거할 경우 CloudFront는 S3 버킷에 로그를 저장할 수 없습니다. CloudFront에서 배포에 대한 로그를 다시 저장할 수 있게 하려면 다음 중 하나를 수행하여 ACL 권한을 복원합니다.

  • CloudFront의 배포에 대한 로깅을 비활성화한 다음 이를 다시 활성화합니다. 자세한 내용은 배포를 만들거나 업데이트할 때 지정하는 값 단원을 참조하십시오.

  • Amazon S3 콘솔의 S3 버킷으로 이동하고 권한을 추가하여 awslogsdelivery에 대한 ACL 권한을 수동으로 추가합니다. awslogsdelivery에 대한 ACL을 추가하려면 계정에 대해 정식 ID를 입력해야 합니다. 의 경우 다음과 같습니다.

    c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0

    S3 버킷에 ACL을 추가하는 방법에 대한 자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서ACL 버킷 권한을 설정하는 방법을 참조하십시오.

각 로그 파일의 ACL

버킷의 ACL 외에도 각 로그 파일마다 ACL이 있습니다. 버킷 소유자에게는 각 로그 파일에 대한 FULL_CONTROL 권한이 있으며, 배포 소유자(버킷 소유자와 다른 경우)에게는 아무런 권한이 없습니다. awslogsdelivery 계정에는 읽기 및 쓰기 권한이 있습니다.

로깅 비활성화

로깅을 비활성화하더라도 CloudFront가 버킷이나 로그 파일에 대한 ACL이 자동으로 삭제되지 않습니다. 삭제하려면 사용자가 직접 삭제해야 합니다.

SSE-KMS 버킷에 사용할 경우 필요한 CMK 키 정책

고객 관리형 고객 마스터 키(CMK)와 함께 AWS KMS 관리형 키(SSE-KMS)를 사용하여 Amazon S3 버킷에 대해 서버 측 암호화를 활성화한 경우, CMK의 키 정책에 다음을 추가해야 버킷에 로그 파일을 쓸 수 있습니다. CloudFront는 로그 파일을 버킷에 업로드할 수 없기 때문에 기본 CMK를 사용할 수 없습니다.

{ "Sid": "Allow CloudFront Flow Logs to use the key", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "Resource": "*" }

파일 이름 형식

CloudFront에서 Amazon S3버킷에 저장하는 각 로그 파일의 이름에는 다음 파일 이름 형식이 사용됩니다.

<optional prefix>/<distribution ID>.YYYY-MM-DD-HH.unique-ID.gz

날짜 및 시간이 협정 세계시(UTC)로 표시됩니다.

예를 들어 접두사로 example-prefix를 사용하고 배포 ID가 EMLARXS9EXAMPLE이면 파일 이름은 다음과 같습니다.

example-prefix/EMLARXS9EXAMPLE.2019-11-14-20.RT4KCN4SGK9.gz

배포에 대한 로깅을 활성화할 경우 파일 이름에 접두사(선택 사항)를 지정하여 배포와 연결되는 로그 파일을 추적할 수 있습니다. 로그 파일 접두사의 값을 포함하고 접두사가 슬래시(/)로 끝나지 않으면 CloudFront에서 슬래시를 자동으로 추가합니다. 접두사가 슬래시로 끝나면 CloudFront에서 슬래시를 추가하지 않습니다.

파일 이름의 끝에 붙은 .gz는 CloudFront에서 로그 파일이 gzip으로 압축되었음을 나타냅니다.

로그 파일 전송 시점

CloudFront는 1시간 동안 여러 번 배포에 대한 액세스 로그를 전송합니다. 일반적으로, 로그 파일에는 지정된 기간에 CloudFront에서 수신한 요청에 대한 정보가 들어 있습니다. 보통, CloudFront에서는 로그에 이벤트가 기록된 후 한 시간 이내에 Amazon S3 버킷에 해당 기간에 대한 로그 파일을 전달합니다. 하지만 한 기간에 대한 일부 또는 전체 로그 파일 항목이 때때로 최대 24시간까지 지연되기도 합니다. 로그 항목이 지연되는 경우 CloudFront는 파일 이름에 파일이 전송된 날짜 및 시간이 아니라 요청이 발생한 기간의 날짜 및 시간이 로그 파일에 이러한 로그 항목을 저장합니다.

CloudFront는 로그 파일을 생성할 때 로그 파일에 포함되는 기간 중에 객체에 대한 요청을 받은 모든 엣지 로케이션의 배포 관련 정보를 통합합니다.

CloudFront는 CloudFront에서 배포와 연결된 객체에 대해 받는 요청 수에 따라 한 기간 동안 두 개 이상의 파일을 저장할 수 있습니다.

CloudFront는 로깅을 활성화하고 약 4시간이 지나면 액세스 로그들을 안정적으로 전송하기 시작합니다. 그 전에는 일부 액세스 로그들을 가져올 수 있습니다.

참고

해당 기간 동안 객체를 요청하는 사용자가 없으면 해당 기간 동안 아무런 로그 파일도 수신되지 않습니다.

요청 URL 또는 헤더가 최대 크기를 초과했을 때 요청이 기록되는 방법

쿠키를 포함하여 모든 요청 헤더의 총 크기가 20KB를 초과하거나 URL이 8192바이트를 초과하면 CloudFront가 요청을 완전히 구문 분석할 수 없고 요청을 기록할 수 없습니다. 요청이 기록되지 않으므로 로그 파일에 반환된 HTTP 오류 상태 코드가 표시되지 않습니다.

요청 본문이 최대 크기를 초과하면 HTTP 오류 상태 코드를 포함하여 요청이 기록됩니다.

액세스 로그 분석

시간당 액세스 로그를 여러 개 받을 수 있기 때문에, 지정된 기간에 받는 모든 로그 파일을 한 파일로 결합하는 것이 좋습니다. 그러고 나면 이 기간의 데이터를 보다 정확하고 완전하게 분석할 수 있습니다.

액세스 로그를 분석하기 위한 한 가지 방법으로 Amazon Athena를 사용할 수 있습니다. Athena는 CloudFront를 포함해 AWS 서비스용 데이터를 분석할 수 있는 대화형 쿼리 서비스입니다. 자세한 내용은 Amazon Athena 사용 설명서Amazon CloudFront 로그 쿼리를 참조하십시오.

또한 다음 AWS 블로그 게시물에서는 액세스 로그를 분석하는 몇 가지 방법을 설명합니다.

중요

모든 요청을 완전히 살펴보기 보다는 콘텐츠에 대한 요청 특성을 이해하는 데 로그를 사용하는 것이 좋습니다. CloudFront에서는 최대 효과에 기초하여 액세스 로그를 전송합니다. 요청에 따라서는 실제로 요청이 처리된 지 한참 후에 로그 레코드가 전송되거나 아예 전송되지 않을 수도 있습니다. 로그 항목이 액세스 로그에서 생략되는 경우 액세스 로그의 항목 수가 AWS 사용 보고서 및 결제 보고서에 표시되는 사용량과 일치하지 않습니다.

로깅 설정 편집

CloudFront 콘솔 또는 CloudFront API를 사용하여 로깅을 활성화/비활성화하거나, 로그가 저장되는 Amazon S3 버킷을 변경하고 로그 파일의 접두사를 변경할 수 있습니다. 로깅 설정에 대한 변경 내용은 12시간 내에 적용됩니다.

자세한 내용은 다음 주제를 참조하십시오.

  • CloudFront 콘솔을 사용하여 웹 또는 RTMP 배포를 업데이트하려면 배포 업데이트 단원을 참조하십시오.

  • CloudFront API를 사용하여 웹 배포를 업데이트하려면 Amazon CloudFront API ReferenceUpdateDistribution을 참조하십시오.

  • CloudFront API를 사용하여 RTMP 배포를 업데이트하려면 Amazon CloudFront API ReferenceUpdateStreamingDistribution을 참조하십시오.

CloudFront API를 사용하여 웹 배포의 액세스 로그 설정을 변경하려면 API 버전 2009-04-02 이상을 사용해야 합니다. CloudFront API를 사용하여 RTMP 배포의 액세스 로그 설정을 변경하려면 API 버전 2010-05-01 이상을 사용해야 합니다.

Amazon S3 버킷에서 로그 파일 삭제

CloudFront는 Amazon S3 버킷에서 로그 파일을 자동으로 삭제하지 않습니다. Amazon S3 버킷에서 로그 파일 삭제에 대한 자세한 내용은 다음 주제를 참조하십시오.

  • Amazon S3 콘솔 사용: Amazon Simple Storage Service 콘솔 사용 설명서객체 삭제

  • REST API 사용: Amazon Simple Storage Service API ReferenceDeleteObject

로그 파일 형식

로그 파일의 각 항목은 단일 최종 사용자 요청에 대한 세부 정보를 제공합니다. 웹 배포 로그 파일과 RTMP 배포 로그 파일이 동일하지는 않지만, 특성은 같습니다.

  • W3C 확장 로그 파일 형식을 사용합니다.

  • 탭으로 구분된 값을 포함합니다.

  • 레코드를 포함합니다. 이 때 레코드가 시간 순서대로 나열되어 있지 않을 수도 있습니다.

  • 두 헤더 행(파일 형식 버전이 표시된 행과 각 레코드에 포함된 W3C 필드가 나열된 행)을 포함합니다.

  • 필드 값에서 공백 및 다른 특정 문자에 상응하는 URL 인코딩 값을 포함합니다.

    상응하는 URL 인코딩 값은 다음과 같은 문자에 사용됩니다.

    • ASCII 문자 코드 0~32

    • ASCII 문자 코드 127 이상

    • 다음 표의 모든 문자

    URL 인코딩 표준은 RFC 1738에 정의되어 있습니다.

URL 인코딩 값

문자

%3C

<

%3E

>

%22

"

%23

#

%25

%

%7B

{

%7D

}

%7C

|

%5C

\

%5E

^

%7E

~

%5B

[

%5D

]

%60

`

%27

'

%20

공백

웹 배포 로그 파일 형식

웹 배포 로그 파일에는 다음 필드가 나열된 순서대로 포함됩니다.

필드 번호 필드 이름 설명
1 date 이벤트가 발생한 날짜가 YYYY-MM-DD 형식으로 표시됩니다. 예: 2019-06-30. 날짜 및 시간이 협정 세계시(UTC)로 표시됩니다. WebSocket 연결의 경우, 연결이 종료된 날짜가 됩니다.
2 time CloudFront 서버에서 요청 응답을 완료한 시간(UTC)입니다(예: 01:42:39). WebSocket 연결의 경우, 연결이 종료된 시간이 됩니다.
3 x-edge-location 요청을 처리한 엣지 로케이션입니다. 각 엣지 로케이션은 3자 코드와 임의 배정된 번호로 식별됩니다(예: DFW3). 3자 코드는 일반적으로 엣지 로케이션 부근의 공항을 나타내는 국제 항공 수송 협회 공항 코드에 상응합니다. 이러한 약어는 향후에 변경될 수 있습니다. 엣지 로케이션 목록은 Amazon CloudFront 인프라 페이지를 참조하십시오.
4 sc-bytes 요청에 대한 응답으로 CloudFront가 최종 사용자에게 제공한 총 바이트 수(헤더 포함)입니다(예: 1045619). WebSocket 연결의 경우, 연결을 통해 서버에서 클라이언트로 전송된 총 바이트 수입니다.
5 c-ip 요청을 한 최종 사용자의 IP 주소(예: 192.0.2.183 또는 2001:0db8:85a3:0000:0000:8a2e:0370:7334)입니다. 최종 사용자가 HTTP 프록시 또는 로드 밸런서를 사용하여 요청을 전송하는 경우 c-ip의 값은 프록시 또는 로드 밸런서의 IP 주소 값입니다. 필드 20의 X-Forwarded-For도 참조하십시오.
6 cs-method HTTP 요청 메서드: DELETE, GET, HEAD, OPTIONS, PATCH, POST 또는 PUT
7 cs(Host) CloudFront 배포의 도메인 이름입니다(예: d111111abcdef8.cloudfront.net).
8 cs-uri-stem 경로와 객체를 식별하는 URI의 부분입니다(예: /images/cat.jpg). URL과 쿼리 문자열의 물음표(?)는 로그에 포함되지 않습니다.
9 sc-status

다음 값 중 하나입니다.

  • HTTP 상태 코드(예: 200)입니다. HTTP 상태 코드 목록은 RFC 2616 섹션 10을 참조하십시오. 자세한 내용은 CloudFront에서 오리진의 HTTP 4xx 및 5xx 상태 코드를 처리 및 캐싱하는 방법 단원을 참조하십시오.

  • 000 - CloudFront에서 요청에 응답하기 전에 브라우저 탭을 닫는 등의 동작으로 최종 사용자가 연결을 종료했음을 나타냅니다. CloudFront가 응답을 전송하기 시작한 뒤에 최종 사용자가 연결을 종료하는 경우, 해당하는 HTTP 상태 코드가 로그에 포함됩니다.

10 cs(Referer) 요청을 시작한 도메인의 이름입니다. 일반적인 참조자에는 검색 엔진, 객체에 직접 연결하는 기타 웹 사이트 및 자체 웹 사이트가 포함됩니다.
11 cs(User-Agent) 요청의 User-Agent 헤더 값입니다. User-Agent 헤더는 요청을 제출한 디바이스의 유형 및 브라우저 등 요청의 소스를 식별하고 검색 엔진에서 요청이 온 경우에는 어느 검색 엔진인지 식별합니다. 자세한 내용은 User-Agent 헤더 단원을 참조하십시오.
12 cs-uri-query

URI의 쿼리 문자열 부분(있는 경우)입니다. URI에 쿼리 문자열이 없는 경우 이 필드의 값은 하이픈(-)입니다.

자세한 내용은 쿼리 문자열 파라미터 기반의 콘텐츠 캐싱 단원을 참조하십시오.

13 cs(Cookie)

이름-값 페어 및 관련 속성을 포함한 요청의 쿠키 헤더입니다. 쿠키 로깅을 활성화하는 경우 CloudFront는 오리진에 전달하도록 선택한 쿠키와 관계없이 모든 요청의 쿠키를 기록합니다. 요청에 쿠키 헤더가 포함되지 않은 경우 이 필드의 값은 하이픈(-)입니다.

쿠키에 대한 자세한 내용은 쿠키를 기반으로 콘텐츠 캐싱 단원을 참조하십시오.

14 x-edge-result-type

마지막 바이트가 엣지 로케이션을 떠난 후 CloudFront가 응답을 분류하는 방식입니다. 경우에 따라 결과 유형은 CloudFront가 응답을 전송할 준비가 된 시간과 CloudFront가 응답 전송을 완료한 시간 사이에 변경될 수 있습니다. 필드 23의 x-edge-response-result-type도 참조하십시오.

예를 들어, HTTP 스트리밍에서 CloudFront가 엣지 캐시에서 한 세그먼트를 찾는다고 가정해 보십시오. 이 시나리오에서 이 필드의 값은 보통 Hit입니다. 하지만 CloudFront가 전체 세그먼트, 즉 최종 결과 유형을 전달하기 전에 최종 사용자가 연결을 종료하면 이 필드의 값은 Error입니다.

또 다른 예로, 콘텐츠가 캐시 가능하지 않고 오리진 서버로 직접 다시 프록시되므로 WebSocket 연결에서 이 필드의 값이 Miss가 됩니다.

가능한 값에는 다음이 포함됩니다.

  • Hit – CloudFront가 엣지 캐시에서 최종 사용자에게 객체를 제공했습니다.

    오리진의 응답에 Cache-Control: no-cache 헤더가 포함되어 있어도 CloudFront에서 결과 유형을 Hit로 분류하는 상황에 대한 정보는 동일 객체에 대한 동시 요청(트래픽 스파이크) 단원을 참조하십시오.

  • RefreshHit – CloudFront에서는 엣지 캐시에서 객체를 찾았지만 만료되었기 때문에 CloudFront가 오리진에 연결하여 캐시에 객체의 최신 버전이 포함되어 있는지 확인하고 포함되어 있지 않는 경우 최신 버전을 받을 것인지 결정합니다.

  • Miss – 엣지 캐시의 객체로는 요청을 충족할 수 없어서 CloudFront가 요청을 오리진 서버로 전달했으며 결과가 최종 사용자에게 반환되었습니다.

  • LimitExceeded – CloudFront 할당량(이전에는 제한이라고 함)이 초과되어 요청이 거부되었습니다.

  • CapacityExceeded – CloudFront 엣지 서버가 일시적으로 요청에 응답할 수 없어 CloudFront가 HTTP 503 상태 코드(서비스 사용 불가)를 반환했습니다.

  • Error – 일반적으로 이 오류는 요청의 결과로 클라이언트 오류(sc-status4xx) 또는 서버 오류(sc-status5xx)가 발생했음을 의미합니다. sc-status200이면 HTTP 요청에 성공했지만 모든 바이트를 다운로드하기 전에 클라이언트가 연결 해제된 것입니다.

    이 필드의 값이 Error이고 x-edge-response-result-type의 값이 Error가 아니면 다운로드를 끝내기 전에 클라이언트 연결이 끊어진 것입니다.

  • Redirect – CloudFront가 HTTP에서 HTTPS로 리디렉션합니다.

    sc-status403이고 콘텐츠의 지리적 배포를 제한하도록 CloudFront를 구성한 경우 요청이 제한된 위치에서 들어올 수도 있습니다. 지리적 제한에 대한 자세한 내용은 콘텐츠의 지리적 배포 제한 단원을 참조하십시오.

15 x-edge-request-id 요청을 고유하게 식별하는 암호화된 문자열입니다. 응답 헤더에서 이는 x-amz-cf-id입니다.
16 x-host-header

최종 사용자가 이 요청에 대한 Host 헤더에 포함한 값입니다. 이 값은 요청의 도메인 이름입니다.

  • 객체 URL에 CloudFront 도메인 이름(예: http://d111111abcdef8.cloudfront.net/logo.png)을 사용하는 경우 이 필드에는 도메인 이름이 포함됩니다.

  • 객체 URL에 대체 도메인 이름(예: http://example.com/logo.png)을 사용하는 경우에는 이 필드에 대체 도메인 이름(예: example.com)이 포함됩니다. 대체 도메인 이름을 사용하려면 해당 이름을 배포에 추가해야 합니다. 자세한 내용은 대체 도메인 이름(CNAME)을 추가하여 파일에 대해 사용자 지정 URL 사용 단원을 참조하십시오.

    대체 도메인 이름을 사용하는 경우 배포와 연결된 도메인 이름은 cs(Host) 필드7을 참조하십시오.

17 cs-protocol 최종 사용자가 요청에 지정한 프로토콜은 http, https, ws 또는 wss입니다.
18 cs-bytes 최종 사용자가 요청에 포함한 데이터의 바이트 수(헤더 포함)입니다. WebSocket 연결의 경우, 연결에서 클라이언트로부터 서버로 전송된 총 바이트 수입니다.
19 time-taken CloudFront 엣지 서버가 최종 사용자의 요청을 받는 시점과 CloudFront가 엣지 서버의 출력 대기열에 응답의 최종 바이트를 쓰는 시점 간의 시간 차이(1/1000초 단위까지 측정, 예: 0.002)로, 서버에서 측정됩니다. 최종 사용자 관점에서 보면 전체 객체를 가져오는 데 걸리는 총 시간은 네트워크 지연 시간과 TCP 버퍼링으로 인해 이 값보다 큽니다.
20 x-forwarded-for

최종 사용자가 HTTP 프록시 또는 로드 밸런서를 사용하여 요청을 전송하는 경우 필드 5의 c-ip의 값은 프록시 또는 로드 밸런서의 IP 주소 값입니다. 이 경우 이 필드는 요청을 시작한 최종 사용자의 IP 주소입니다. 해당하는 경우 이 필드에는 IPv4 주소(예: 192.0.2.44)와 IPv6 주소(예: 2001:0db8:85a3:0000:0000:8a2e:0370:7334)가 포함됩니다.

최종 사용자가 HTTP 프록시 또는 로드 밸런서를 사용하지 않은 경우 x-forwarded-for의 값은 하이픈(-)입니다.

21 ssl-protocol

필드 17의 cs-protocolhttps인 경우 이 필드에는 클라이언트와 CloudFront가 요청과 응답 전송을 협상한 SSL/TLS 프로토콜이 포함됩니다.

가능한 값은 다음을 포함합니다.

  • SSLv3

  • TLSv1

  • TLSv1.1

  • TLSv1.2

필드 17의 cs-protocolhttp인 경우 이 필드의 값은 하이픈(-)입니다.

22 ssl-cipher

필드 17의 cs-protocolhttps인 경우 이 필드에는 클라이언트와 CloudFront가 요청과 응답 암호화를 협상한 SSL/TLS 암호가 포함됩니다.

가능한 값은 다음을 포함합니다.

  • ECDHE-RSA-AES128-GCM-SHA256

  • ECDHE-RSA-AES128-SHA256

  • ECDHE-RSA-AES128-SHA

  • ECDHE-RSA-AES256-GCM-SHA384

  • ECDHE-RSA-AES256-SHA384

  • ECDHE-RSA-AES256-SHA

  • AES128-GCM-SHA256

  • AES256-GCM-SHA384

  • AES128-SHA256

  • AES256-SHA

  • AES128-SHA

  • DES-CBC3-SHA

  • RC4-MD5

필드 17의 cs-protocolhttp인 경우 이 필드의 값은 하이픈(-)입니다.

23 x-edge-response-result-type

CloudFront가 최종 사용자에게 응답을 반환하기 직전에 응답을 분류한 방식입니다. 필드 14의 x-edge-result-type도 참조하십시오.

가능한 값에는 다음이 포함됩니다.

  • Hit – CloudFront가 엣지 캐시에서 최종 사용자에게 객체를 제공했습니다.

  • RefreshHit – CloudFront가 엣지 캐시의 객체를 찾았지만 객체가 만료되어 CloudFront가 오리진에 연결해서 캐시에 최신 객체 버전이 있는지 확인했습니다.

  • Miss – 엣지 캐시의 객체로는 요청을 충족할 수 없어서 CloudFront가 요청을 오리진 서버로 전달했으며 결과가 최종 사용자에게 반환되었습니다.

  • LimitExceeded – CloudFront 할당량(이전에는 제한이라고 함)이 초과되어 요청이 거부되었습니다.

  • CapacityExceeded – 객체 제공을 요청하는 시점에 엣지 로케이션에 용량이 충분하지 않아 CloudFront에서 503 오류가 반환되었습니다.

  • Error – 일반적으로 이 오류는 요청의 결과로 클라이언트 오류(sc-status4xx) 또는 서버 오류(sc-status5xx)가 발생했음을 의미합니다.

    x-edge-result-type의 값이 Error이고 이 필드의 값이 Error가 아닌 경우 다운로드를 완료하기 전에 클라이언트 연결이 끊어졌습니다.

  • Redirect – CloudFront가 HTTP에서 HTTPS로 리디렉션합니다.

    sc-status403이고 콘텐츠의 지리적 배포를 제한하도록 CloudFront를 구성한 경우 요청이 제한된 위치에서 들어올 수도 있습니다. 지리적 제한에 대한 자세한 내용은 콘텐츠의 지리적 배포 제한 단원을 참조하십시오.

24 cs-protocol-version

최종 사용자가 요청에서 지정한 HTTP 버전입니다. 가능한 값은 다음과 같습니다.

  • HTTP/0.9

  • HTTP/1.0

  • HTTP/1.1

  • HTTP/2.0

25 fle-status

배포에 대해 필드 레벨 암호화가 구성될 때, 요청 본문이 성공적으로 처리되었는지를 나타내는 코드가 이 필드에 포함됩니다. 배포에 대해 필드 레벨 암호화가 구성되지 않은 경우 이 필드의 값은 하이픈(-)입니다.

CloudFront가 성공적으로 요청 본문을 처리하고, 지정된 필드의 값을 암호화하고, 요청을 오리진으로 전달할 때 이 필드의 값은 Processed입니다. 이 경우 필드 14 x-edge-result-type의 값은 계속해서 클라이언트 측 또는 서버 측 오류를 나타낼 수 있습니다.

요청이 필드 레벨 암호화 할당량을 초과하는 경우 fle-status는 다음 오류 코드 중 하나를 포함하며, CloudFront는 HTTP 상태 코드 400을 최종 사용자에게 반환합니다. 필드 레벨 암호화의 현재 할당량에 대한 목록은 필드 레벨 암호화에 대한 할당량 단원을 참조하십시오.

  • FieldLengthLimitClientError – 암호화되도록 구성된 필드가 허용되는 최대 길이를 초과했습니다.

  • FieldNumberLimitClientError – CloudFront가 암호화하도록 구성된 요청에 허용된 필드의 수보다 많은 필드가 있습니다.

  • RequestLengthLimitClientError – 필드 레벨 암호화 구성 시 요청 본문의 길이가 허용되는 최대 길이를 초과했습니다.

이 필드에 사용할 수 있는 다른 값에는 다음이 포함됩니다.

  • ForwardedByContentType – 어떠한 콘텐츠도 구성되지 않았기 때문에 CloudFront 가 요청을 구문 분석 또는 암호화 없이 오리진에 전달했습니다.

  • ForwardedByQueryArgs – 요청에 필드 레벨 암호화 구성에 없는 쿼리 인수를 포함되기 때문에 CloudFront가 요청을 구문 분석 또는 암호화 없이 오리진에 전달했습니다.

  • ForwardedDueToNoProfile – 필드 레벨 암호화 구성에 어떠한 프로필도 지정되지 않았기 때문에 CloudFront가 요청을 구문 분석 또는 암호화 없이 오리진에 전달했습니다.

  • MalformedContentTypeClientErrorContent-Type 헤더의 값이 유효하지 않은 형식이기 때문에 CloudFront가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.

  • MalformedInputClientError – 요청 본문이 유효하지 않은 형식이기 때문에 CloudFront가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.

  • MalformedQueryArgsClientError – 쿼리 인수가 비어 있거나 유효하지 않은 형식이기 때문에 CloudFront가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.

  • RejectedByContentType – 필드 레벨 암호화 구성에 어떠한 콘텐츠 유형도 지정되지 않았기 때문에 CloudFront가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.

  • RejectedByQueryArgs – 필드 레벨 암호화 구성에 어떠한 쿼리 인수도 지정되지 않았기 때문에 CloudFront가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다.

  • ServerError – 서버가 오류를 반환했습니다.

26 fle-encrypted-fields CloudFront가 암호화하고 오리진에 전달하는 필드의 수입니다. CloudFront는 데이터를 암호화하면서 처리된 요청을 오리진으로 스트리밍합니다. 따라서 fle-status의 값이 error인 경우에도 fle-encrypted-fields는 값을 가질 수 있습니다. 배포에 대해 필드 레벨 암호화가 구성되지 않은 경우 fle-encrypted-fields의 값은 하이픈(-)입니다.
27 c-port 최종 사용자가 보낸 요청의 포트 번호입니다.
28 time-to-first-byte 요청을 수신한 후 응답의 첫 바이트를 쓸 때까지의 시간(초)이며 서버에서 측정합니다.
29 x-edge-detailed-result-type

x-edge-result-type( 필드 14)이 Error가 아닌 경우 이 필드는 x-edge-result-type과 동일한 값을 포함합니다. x-edge-result-typeError인 경우 이 필드는 특정 유형의 오류를 포함합니다.

이 필드에 사용할 수 있는 오류 유형 값에는 다음이 포함됩니다.

  • AbortedOrigin — CloudFront에 오리진 관련 문제가 발생했습니다.

  • ClientCommError — CloudFront와 최종 사용자 간의 통신 문제로 인해 최종 사용자에 대한 응답이 중단되었습니다.

  • ClientGeoBlocked — 최종 사용자의 지리적 위치에서 요청을 거부하도록 배포가 구성됩니다.

  • ClientHungUpRequest — 요청을 보내는 동안 최종 사용자가 중간에 중지했습니다.

  • Error – 오류 유형이 기타 모든 카테고리에 적합하지 않아 오류가 발생했습니다. 이러한 오류 유형은 CloudFront가 CloudFront 캐시에서 오류 응답을 제공할 때 발생할 수 있습니다.

  • InvalidRequest — CloudFront가 최종 사용자로부터 잘못된 요청을 받았습니다.

  • InvalidRequestBlocked – 요청한 리소스에 대한 액세스가 차단됩니다.

  • InvalidRequestCertificate — 배포가 HTTPS 연결이 설정된 SSL/TLS 인증서와 일치하지 않습니다.

  • InvalidRequestHeader — 요청에 잘못된 헤더 필드 또는 값이 포함되어 있습니다.

  • InvalidRequestMethod — 사용되었던 HTTP 요청 메서드를 처리하도록 배포가 구성되지 않았습니다. 이러한 문제는 배포에서 캐시 가능한 요청만 지원하는 경우 발생할 수 있습니다.

  • OriginConnectError — CloudFront가 오리진에 연결할 수 없습니다.

  • OriginContentRangeLengthError — 오리진 응답의 Content-Length 헤더가 Content-Range 헤더의 길이와 일치하지 않습니다.

  • OriginDnsError - CloudFront가 오리진의 도메인 이름을 확인할 수 없습니다.

  • OriginError — 오리진에서 잘못된 응답을 반환했습니다.

  • OriginHeaderTooBigError — 오리진에서 반환한 헤더가 너무 커서 CloudFront가 처리할 수 없습니다.

  • OriginInvalidResponseError — 오리진에서 잘못된 응답을 반환했습니다.

  • OriginReadError - CloudFront가 오리진에서 읽을 수 없습니다.

  • OriginWriteError - CloudFront가 오리진에 쓸 수 없습니다.

  • OriginZeroSizeObjectError — 오리진에서 전송된 크기가 0인 객체로 인해 오류가 발생했습니다.

  • SlowReaderOriginError — 최종 사용자가 오리진 오류를 일으킨 메시지를 느리게 읽었습니다.

30 sc-content-type 응답의 HTTP Content-Type 헤더 값입니다.
31 sc-content-len 응답의 HTTP Content-Length 헤더 값입니다.
32 sc-range-start 응답에 HTTP Content-Range 헤더가 포함되어 있으면 이 필드에 범위 시작 값이 포함됩니다.
33 sc-range-end 응답에 HTTP Content-Range 헤더가 포함되어 있으면 이 필드에 범위 끝 값이 포함됩니다.

다음은 웹 배포 로그 파일 예입니다.

#Version: 1.0 #Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stem sc-status cs(Referer) cs(User-Agent) cs-uri-query cs(Cookie) x-edge-result-type x-edge-request-id x-host-header cs-protocol cs-bytes time-taken x-forwarded-for ssl-protocol ssl-cipher x-edge-response-result-type cs-protocol-version fle-status fle-encrypted-fields c-port time-to-first-byte x-edge-detailed-result-type sc-content-type sc-content-len sc-range-start sc-range-end 2019-12-04 21:02:31 LAX1 392 192.0.2.100 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ== d111111abcdef8.cloudfront.net https 23 0.001 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.001 Hit text/html 78 - - 2019-12-04 21:02:31 LAX1 392 192.0.2.100 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit k6WGMNkEzR5BEM_SaF47gjtX9zBDO2m349OY2an0QPEaUum1ZOLrow== d111111abcdef8.cloudfront.net https 23 0.000 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.000 Hit text/html 78 - - 2019-12-04 21:02:31 LAX1 392 192.0.2.100 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit f37nTMVvnKvV2ZSvEsivup_c2kZ7VXzYdjC-GUQZ5qNs-89BlWazbw== d111111abcdef8.cloudfront.net https 23 0.001 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.001 Hit text/html 78 - - 2019-12-13 22:36:27 SEA19-C1 900 192.0.2.200 GET d111111abcdef8.cloudfront.net /favicon.ico 502 http://www.example.com/ Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Error 1pkpNfBQ39sYMnjjUQjmH2w1wdJnbHYTbag21o_3OfcQgPzdL2RSSQ== www.example.com http 675 0.102 - - - Error HTTP/1.1 - - 25260 0.102 OriginDnsError text/html 507 - - 2019-12-13 22:36:26 SEA19-C1 900 192.0.2.200 GET d111111abcdef8.cloudfront.net / 502 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Error 3AqrZGCnF_g0-5KOvfA7c9XLcf4YGvMFSeFdIetR1N_2y8jSis8Zxg== www.example.com http 735 0.107 - - - Error HTTP/1.1 - - 3802 0.107 OriginDnsError text/html 507 - - 2019-12-13 22:37:02 SEA19-C2 900 192.0.2.200 GET d111111abcdef8.cloudfront.net / 502 - curl/7.55.1 - - Error kBkDzGnceVtWHqSCqBUqtA_cEs2T3tFUBbnBNkB9El_uVRhHgcZfcw== www.example.com http 387 0.103 - - - Error HTTP/1.1 - - 12644 0.103 OriginDnsError text/html 507 - -

RTMP 배포 로그 파일 형식

RTMP 액세스 로그의 각 레코드에는 연결, 재생, 일시 중지, 중지, 연결 해제 등 재생 이벤트를 나타냅니다. 따라서 CloudFront는 최종 사용자가 비디오를 볼 때마다 여러 로그 레코드를 생성합니다. 동일 스트림 ID에서 발생되는 로그 레코드를 연결하려면 x-sid 필드를 사용합니다.

참고

모든 이벤트에 대한 값이 있는 필드도 있고 재생, 중지, 일시 중지, 일시 중지 취소 및 탐색 이벤트에 대한 값만 있는 필드도 있습니다. 일반적으로 로그 파일에서 필드에 대해 하이픈(-)이 포함되는 경우 이러한 필드는 해당 이벤트와 관련이 없다는 의미입니다.

다음 표에서는 이벤트 유형과 관계 없이 RTMP 배포 로그 파일의 각 레코드에 있는 필드를 설명합니다. 필드는 나열된 순서대로 로그에 표시됩니다.

필드 번호 필드 이름 설명
1 date 이벤트가 발생한 날짜가 YYYY-MM-DD 형식으로 표시됩니다(예: 2019-05-23). 날짜 및 시간이 협정 세계시(UTC)로 표시됩니다.
2 time 서버에서 요청을 받은 시간(in UTC)입니다. 예: 01:42:39.
3 x-edge-location 재생 이벤트가 발생한 엣지 로케이션입니다. 각 엣지 로케이션은 3자 코드와 임의 배정된 번호로 식별됩니다(예: DFW3). 3자 코드는 일반적으로 엣지 로케이션 부근의 공항을 나타내는 국제 항공 수송 협회 공항 코드에 상응합니다. 이러한 약어는 향후에 변경될 수 있습니다. 엣지 로케이션 목록은 Amazon CloudFront 인프라 페이지를 참조하십시오.
4 c-ip 클라이언트 IP(예: 192.0.2.183)입니다.
5 x-event 이벤트 유형입니다. 이 값은 [Connect], [Disconnect], [Play], [Stop], [Pause], [Unpause] 또는 [Seek] 이벤트입니다.
6 sc-bytes 이벤트 시점까지 서버에서 클라이언트로 보낸 총 바이트 누계입니다.
7 x-cf-status 이벤트 상태를 나타내는 코드입니다. 현재는 "OK"가 이 필드의 유일한 값입니다. 향후 새 기능이 추가되면 새 상태가 필요할 수도 있습니다.
8 x-cf-client-id

클라이언트를 구분하는 데 사용할 수 있는 불투명 문자열 식별자입니다.

이 값은 각 연결마다 고유합니다.

9 cs-uri-stem 애플리케이션과 애플리케이션 인스턴스를 포함하는 URL의 스템 부분입니다. 경우에 따라서는 FMS 연결 문자열이라고도 합니다. 예: rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st. URL과 쿼리 문자열의 물음표(?)는 로그에 포함되지 않습니다.
10 cs-uri-query 연결 문자열에 포함되는 URL의 쿼리 문자열 부분입니다. URL과 쿼리 문자열의 물음표(?)는 로그에 포함되지 않습니다.
11 c-referrer 참조자의 URI입니다.
12 x-page-url SWF가 연결된 페이지의 URL입니다.
13 c-user-agent 요청의 User-Agent 헤더 값입니다. User-Agent 헤더는 요청을 제출한 디바이스 유형을 식별합니다. 자세한 내용은 User-Agent 헤더 단원을 참조하십시오.

다음 필드에는 일반적으로 재생, 중지, 일시 중지, 일시 중지 취소 및 탐색 이벤트에 대한 값만 있습니다. 다른 이벤트의 경우에는 단일 하이픈(-)이 포함됩니다. 이러한 필드는 로그에서 이전 표의 필드 뒤에, 나열된 순서대로 표시됩니다.

필드 번호 필드 이름 설명
14 x-sname 스트림 이름입니다.
15 x-sname-query 스트림 쿼리 문자열(있는 경우)입니다.
16 x-file-ext 스트림 유형(예: FLV)입니다.
17 x-sid 스트림 ID입니다. 이 값은 연결에 사용되는 고유 정수 식별자입니다.

다음은 RTMP 배포 로그 파일 예입니다.

#Version: 1.0 #Fields: date time x-edge-location c-ip x-event sc-bytes x-cf-status x-cf-client-id cs-uri-stem cs-uri-query c-referrer x-page-url​ c-user-agent x-sname x-sname-query x-file-ext x-sid 2010-03-12 23:51:20 SEA4 192.0.2.147 connect 2014 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 - - - - 2010-03-12 23:51:21 SEA4 192.0.2.222 play 3914 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 myvideo p=2&q=4 flv 1 2010-03-12 23:53:44 SEA4 192.0.2.4 stop 323914 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 dir/other/myvideo p=2&q=4 flv 1 2010-03-12 23:53:44 SEA4 192.0.2.103 play 8783724 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 dir/favs/myothervideo p=42&q=14 mp4 2 2010-03-12 23:56:21 SEA4 192.0.2.199 stop 429822014 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 dir/favs/myothervideo p=42&q=14 mp4 2 2010-03-12 23:59:44 SEA4 192.0.2.14 disconnect 429824092 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 - - - -

액세스 로그 요금

액세스 로깅은 CloudFront의 선택적 기능입니다. 액세스 로깅을 활성화하더라도 별도 요금이 부과되지 않습니다. 하지만 Amazon S3에 파일을 저장하고 액세스하는 데는 일반적인 Amazon S3 요금이 부과되며, 사용자는 언제라도 이러한 파일을 삭제할 수 있습니다.

Amazon S3 요금에 대한 자세한 내용은 Amazon S3 요금을 참조하십시오.

CloudFront 요금에 대한 자세한 내용은 CloudFront 요금을 참조하십시오.