표준 로그(액세스 로그) 구성 및 사용
로그 파일을 생성하도록 CloudFront를 구성할 수 있습니다. 이러한 로그 파일에는 CloudFront에서 수신하는 모든 사용자 요청에 대한 세부 정보가 포함됩니다. 이러한 로그는 표준 로그라고 하며 액세스 로그라고도 합니다. 표준 로그를 활성화하면 CloudFront에서 파일을 저장할 Amazon S3 버킷도 지정할 수 있습니다.
배포를 만들거나 업데이트할 때 표준 로그를 활성화할 수 있습니다. 자세한 내용은 로깅 단원을 참조하십시오.
또한 CloudFront의 실시간 로그는 배포에 대해 이루어진 요청에 대한 정보를 실시간으로 제공합니다(로그는 요청을 받은 후 몇 초 내에 전달됩니다). 실시간 로그를 사용하여 콘텐츠 전송 성능을 모니터링 및 분석하고 이에 기초해 조치를 취할 수 있습니다. 자세한 내용은 실시간 로그 사용 단원을 참조하세요.
주제
표준 로깅 작동 방식
다음 다이어그램은 CloudFront에서 객체 요청에 대한 정보를 어떻게 기록하는지 보여 줍니다.
이전 다이어그램에 설명된 객체 요청에 대한 CloudFront 로그 정보가 아래에 나와 있습니다.
-
이 다이어그램에서는 A와 B라는 두 웹 사이트가 있고 그에 해당하는 CloudFront 배포 두 개가 있습니다. 사용자가 배포와 연결된 URL을 사용하여 객체를 요청합니다.
-
CloudFront에서 각 요청을 해당 엣지 로케이션으로 라우팅합니다.
-
CloudFront에서 각 요청에 대한 데이터를 해당 배포 관련 로그 파일에 기록합니다. 이 예에서는 배포 A와 관련된 요청에 대한 정보가 배포 A 로그 파일에만 기록되고, 배포 B와 관련된 요청에 대한 정보가 배포 B 로그 파일에만 기록됩니다.
-
CloudFront는 로깅을 활성화할 때 지정한 Amazon S3 버킷에 배포 관련 로그 파일을 정기적으로 저장합니다. 그런 다음, CloudFront는 새 로그 파일에 배포에 대한 후속 요청에 대한 정보를 저장하기 시작합니다.
지정된 시간 동안 콘텐츠에 액세스하는 사용자가 없는 경우 해당 시간 동안 로그 파일이 수신되지 않습니다.
로그 파일의 각 항목은 단일 요청에 대한 세부 정보를 제공합니다. 로그 파일 형식에 대한 자세한 내용은 표준 로그 파일 형식 단원을 참조하십시오.
참고
모든 요청을 완전히 살펴보기 보다는 콘텐츠에 대한 요청 특성을 이해하는 데 로그를 사용하는 것이 좋습니다. CloudFront는 최대 효과에 기초하여 액세스 로그를 전송합니다. 요청에 따라서는 실제로 요청이 처리된 지 한참 후에 로그 레코드가 전송되거나 아예 전송되지 않을 수도 있습니다. 로그 항목이 액세스 로그에서 생략되는 경우, 액세스 로그의 항목 수가 AWS 결제 및 사용 보고서에 표시되는 사용량과 일치하지 않습니다.
표준 로그용 Amazon S3 버킷 선택
배포에 대해 로깅을 활성화하는 경우 CloudFront에서 로그 파일을 저장할 Amazon S3 버킷을 지정할 수 있습니다. Amazon S3를 오리진으로 사용할 경우에는 로그 파일에 별도의 버킷을 사용하는 것이 좋습니다.
동일 버킷에 여러 배포에 대한 로그 파일을 저장할 수 있습니다. 로깅을 활성화할 경우 파일 이름에 접두사(선택 사항)를 지정하여 배포와 연결되는 로그 파일을 추적할 수 있습니다.
S3 버킷 선택 관련
-
버킷에 액세스 제어 목록(ACL)이 활성화되어 있어야 합니다. CloudFront 콘솔에서 ACL이 활성화되지 않은 버킷을 선택하면 오류 메시지가 표시됩니다. 표준 로깅 구성 및 로그 파일 액세스에 필요한 권한 섹션을 참조하세요.
-
버킷 소유자로 설정된 S3 객체 소유권이 적용된 Amazon S3 버킷을 선택하지 마세요. 이 설정은 버킷과 그 안의 객체에 대한 ACL을 비활성화하여 CloudFront에서 버킷으로 로그 파일을 전송하지 못하도록 합니다.
다음 AWS 리전에서는 Amazon S3 버킷을 선택하지 마세요. CloudFront는 이러한 리전의 버킷에 표준 로그를 전달하지 않습니다.
-
아프리카(케이프타운)
-
아시아 태평양(홍콩)
-
아시아 태평양(하이데라바드)
-
아시아 태평양(자카르타)
-
아시아 태평양(멜버른)
-
캐나다 서부(캘거리)
-
유럽(밀라노)
-
유럽(스페인)
-
유럽(취리히)
-
이스라엘(텔아비브)
-
중동(바레인)
-
중동(UAE)
-
표준 로깅 구성 및 로그 파일 액세스에 필요한 권한
중요
2023년 4월부터 CloudFront 표준 로그에 사용되는 새 S3 버킷에 대해 S3 ACL을 활성화해야 합니다. 버킷을 생성할 때 ACL을 활성화하거나 기존 버킷에 ACL을 활성화할 수 있습니다.
변경 사항에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서의 새 S3 버킷에 대한 기본 설정 FAQ와 AWS 뉴스 블로그의 2023년 4월에 예정된 Amazon S3 보안 변경 사항
로그 파일용으로 지정하는 버킷에 대해 AWS 계정에 다음 권한이 있어야 합니다.
-
버킷의 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이 자동으로 삭제되지 않습니다. 필요한 경우 ACL을 삭제할 수 있습니다.
SSE-KMS 버킷에 필요한 키 정책
표준 로그의 S3 버킷이 고객 관리형 고객 마스터 키와 함께 AWS KMS keys(SSE-KMS)를 사용하여 서버 측 암호화를 사용하는 경우, 고객 관리형 키의 키 정책에 다음 설명을 추가해야 합니다. 이렇게 하면 CloudFront가 버킷에 로그 파일을 쓸 수 있습니다. CloudFront는 로그 파일을 버킷에 쓸 수 없기 때문에 SSE-KMS와 함께 AWS 관리형 키를 사용할 수 없습니다.
{ "Sid": "Allow CloudFront to use the key to deliver logs", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "Resource": "*" }
표준 로그의 S3 버킷이 S3 버킷 키와 함께 SSE-KMS를 사용하는 경우 정책 설명에 kms:Decrypt
권한을 추가해야 합니다. 이 경우 전체 정책 설명은 다음과 같습니다.
{ "Sid": "Allow CloudFront to use the key to deliver logs", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "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시간이 지나면 액세스 로그들을 안정적으로 전송하기 시작합니다. 그 전에는 일부 액세스 로그들을 가져올 수 있습니다.
참고
해당 기간 동안 객체를 요청하는 사용자가 없으면 해당 기간 동안 아무런 로그 파일도 수신되지 않습니다.
또한 CloudFront의 실시간 로그는 배포에 대해 이루어진 요청에 대한 정보를 실시간으로 제공합니다(로그는 요청을 받은 후 몇 초 내에 전달됩니다). 실시간 로그를 사용하여 콘텐츠 전송 성능을 모니터링 및 분석하고 이에 기초해 조치를 취할 수 있습니다. 자세한 내용은 실시간 로그 사용 단원을 참조하세요.
요청 URL 또는 헤더가 최대 크기를 초과했을 때 요청이 기록되는 방법
쿠키를 포함하여 모든 요청 헤더의 총 크기가 20KB를 초과하거나 URL이 8192바이트를 초과하면 CloudFront가 요청을 완전히 구문 분석할 수 없고 요청을 기록할 수 없습니다. 요청이 기록되지 않으므로 로그 파일에 반환된 HTTP 오류 상태 코드가 표시되지 않습니다.
요청 본문이 최대 크기를 초과하면 HTTP 오류 상태 코드를 포함하여 요청이 기록됩니다.
표준 로그 분석
시간당 액세스 로그를 여러 개 받을 수 있기 때문에, 지정된 기간에 받는 모든 로그 파일을 한 파일로 결합하는 것이 좋습니다. 그러고 나면 이 기간의 데이터를 보다 정확하고 완전하게 분석할 수 있습니다.
액세스 로그를 분석하는 한 가지 방법은 Amazon Athena
또한 다음 AWS 블로그 게시물에서는 액세스 로그를 분석하는 몇 가지 방법을 설명합니다.
-
Amazon CloudFront Request Logging
(HTTP를 통해 전송되는 콘텐츠의 경우)
중요
모든 요청을 완전히 살펴보기 보다는 콘텐츠에 대한 요청 특성을 이해하는 데 로그를 사용하는 것이 좋습니다. CloudFront는 최대 효과에 기초하여 액세스 로그를 전송합니다. 요청에 따라서는 실제로 요청이 처리된 지 한참 후에 로그 레코드가 전송되거나 아예 전송되지 않을 수도 있습니다. 로그 항목이 액세스 로그에서 생략되는 경우 액세스 로그의 항목 수가 AWS 사용 및 결제 보고서에 표시되는 사용량과 일치하지 않습니다.
표준 로깅 설정 편집
CloudFront 콘솔
자세한 정보는 다음 주제를 참조하십시오.
-
CloudFront 콘솔을 사용하여 배포를 업데이트하려면 배포 업데이트 섹션을 참조하세요.
-
CloudFront API를 사용하여 배포를 업데이트하려면 Amazon CloudFront API 참조의 UpdateDistribution을 참조하세요.
Amazon S3 버킷에서 표준 로그 파일 삭제
CloudFront는 Amazon S3 버킷에서 로그 파일을 자동으로 삭제하지 않습니다. Amazon S3 버킷에서 로그 파일 삭제에 대한 자세한 내용은 다음 주제를 참조하세요.
-
Amazon S3 콘솔 사용: Amazon Simple Storage Service 콘솔 사용 설명서의 객체 삭제
-
REST API 사용: Amazon Simple Storage Service API 참조의 DeleteObject
표준 로그 파일 형식
로그 파일의 각 항목은 단일 최종 사용자 요청에 대한 세부 정보를 제공합니다. 이러한 로그 파일은 다음과 같은 특성을 갖습니다.
-
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 |
공백 |
표준 로그 파일 필드
배포에 대한 로그 파일에는 33개의 필드가 포함되어 있습니다. 다음 목록에는 각 필드 이름이 해당 필드의 정보에 대한 설명과 함께 순서대로 포함되어 있습니다.
-
date
이벤트가 발생한 날짜가
YYYY-MM-DD
형식으로 표시됩니다. 예:2019-06-30
. 날짜 및 시간이 협정 세계시(UTC)로 표시됩니다. WebSocket 연결의 경우, 연결이 종료된 날짜가 됩니다. -
time
CloudFront 서버에서 요청 응답을 완료한 시간(UTC)입니다(예:
01:42:39
). WebSocket 연결의 경우, 연결이 종료된 시간이 됩니다. -
x-edge-location
요청을 처리한 엣지 로케이션입니다. 각 엣지 로케이션은 3자 코드와 임의로 배정된 번호로 식별됩니다(예: DFW3). 3자 코드는 일반적으로 엣지 로케이션의 지리적 위치 부근 공항을 나타내는 국제 항공 수송 협회(IATA) 공항 코드에 상응합니다. 이러한 약어는 향후에 변경될 수 있습니다.
-
sc-bytes
요청에 대한 응답으로 서버가 최종 사용자에게 보낸 총 바이트 수(헤더 포함)입니다. WebSocket 연결의 경우, 연결을 통해 서버에서 클라이언트로 전송된 총 바이트 수입니다.
-
c-ip
요청을 한 최종 사용자의 IP 주소(예:
192.0.2.183
또는2001:0db8:85a3::8a2e:0370:7334
)입니다. 최종 사용자가 HTTP 프록시 또는 로드 밸런서를 사용하여 요청을 전송하는 경우, 해당 필드 값은 프록시 또는 로드 밸런서의 IP 주소입니다.x-forwarded-for
필드도 참조하십시오. -
cs-method
최종 사용자로부터 수신된 HTTP 요청 메서드입니다.
-
cs(Host)
CloudFront 배포의 도메인 이름(예: d111111abcdef8.cloudfront.net)입니다.
-
cs-uri-stem
경로 및 객체를 식별하는 요청 URL의 일부(예:
/images/cat.jpg
)입니다. URL과 쿼리 문자열의 물음표(?)는 로그에 포함되지 않습니다. -
sc-status
다음 값 중 하나를 포함합니다.
-
서버 응답의 HTTP 상태 코드(예:
200
)입니다. -
000
(서버가 요청에 응답하기 전에 최종 사용자가 연결을 종료했음을 나타냄) 서버가 응답을 전송하기 시작한 후 최종 사용자가 연결을 종료하는 경우, 이 필드에는 서버가 전송하기 시작하는 응답의 HTTP 상태 코드가 포함됩니다.
-
-
cs(Referer)
요청의
Referer
헤더 값입니다. 다음은 요청을 시작한 도메인 이름입니다. 일반적인 참조자에는 검색 엔진, 객체에 직접 연결하는 기타 웹 사이트 및 자체 웹 사이트가 포함됩니다. -
cs(User-Agent)
요청의
User-Agent
헤더 값입니다.User-Agent
헤더는 요청을 제출한 디바이스 유형 및 브라우저 등의 요청 소스를 식별하고 검색 엔진에서 요청이 온 경우에는 어느 검색 엔진인지 식별합니다. -
cs-uri-query
요청 URL의 쿼리 문자열 부문(있는 경우)입니다.
URL에 쿼리 문자열이 포함되지 않은 경우 이 필드의 값은 하이픈(-)입니다. 자세한 내용은 쿼리 문자열 파라미터 기반의 콘텐츠 캐싱 단원을 참조하십시오.
-
cs(Cookie)
이름-값 페어 및 관련 속성을 포함한 요청의
Cookie
헤더입니다.쿠키 로깅을 활성화하는 경우 CloudFront는 오리진에 전달하도록 선택한 쿠키와 관계없이 모든 요청의 쿠키를 기록합니다. 요청에 쿠키 헤더가 포함되지 않은 경우 이 필드의 값은 하이픈(-)입니다. 쿠키에 대한 자세한 내용은 쿠키 기반의 콘텐츠 캐싱 단원을 참조하십시오.
-
x-edge-result-type
마지막 바이트가 서버를 떠난 후 서버가 응답을 분류한 방식입니다. 경우에 따라 서버가 응답을 전송할 준비가 된 시간과 가 응답 전송을 완료한 시간 사이에 결과 유형이 변경될 수 있습니다.
x-edge-response-result-type
필드도 참조하십시오.예를 들어 HTTP 스트리밍에서 서버가 캐시 스트림의 한 세그먼트를 찾는다고 가정해 보십시오. 이 시나리오에서 이 필드의 값은 보통
Hit
입니다. 그러나 서버가 전체 세그먼트를 전달하기 전에 최종 사용자가 연결을 종료하면 최종 결과 유형(및 이 필드 값)은Error
가 됩니다.콘텐츠가 캐시 가능하지 않고 오리진으로 직접 프록시되므로 WebSocket 연결에서 이 필드의 값이
Miss
가 됩니다.가능한 값은 다음과 같습니다.
-
Hit
- 서버가 캐시에서 최종 사용자에게 객체를 제공했습니다. -
RefreshHit
- 서버가 캐시에서 객체를 찾았지만 객체가 만료되었기 때문에 서버가 오리진에 접속하여 캐시에 최신 버전의 객체가 있는지 확인했습니다. -
Miss
- 캐시의 객체로는 요청을 충족할 수 없어서 서버가 요청을 오리진으로 전달했으며 결과가 최종 사용자에게 반환되었습니다. -
LimitExceeded
- CloudFront 할당량(이전에는 제한이라고 함)이 초과되어 요청이 거부되었습니다. -
CapacityExceeded
- 객체 제공을 요청하는 시점에 용량이 충분하지 않아 서버에서 HTTP 503 상태 코드가 반환되었습니다. -
Error
- 일반적으로 이는 요청으로 인해 클라이언트 오류(sc-status
필드 값이4xx
범위에 있음) 또는 서버 오류(sc-status
필드 값이5xx
범위에 있음)가 발생했음을 의미합니다.sc-status
필드의 값이200
인 경우 또는 이 필드의 값이Error
이고x-edge-response-result-type
필드의 값이Error
가 아닌 경우, HTTP 요청이 성공했지만 모든 바이트를 수신하기 전에 클라이언트의 연결이 끊어졌음을 의미합니다. -
Redirect
- 서버는 배포 설정에 따라 최종 사용자를 HTTP에서 HTTPS로 리디렉션했습니다.
-
-
x-edge-request-id
요청을 고유하게 식별하는 불투명 문자열입니다. CloudFront는
x-amz-cf-id
응답 헤더에도 이 문자열을 전송합니다. -
x-host-header
최종 사용자가 이 요청에 대한
Host
헤더에 포함한 값입니다. 객체 URL에 CloudFront 도메인 이름(예: d111111abcdef8.cloudfront.net)을 사용하는 경우, 이 필드에는 도메인 이름이 포함됩니다. 객체 URL(예: www.example.com)에 대체 도메인 이름(CNAME)을 사용하는 경우, 이 필드에 대체 도메인 이름이 포함됩니다.대체 도메인 이름을 사용하는 경우 배포와 연결된 도메인 이름은 필드7에 있는
cs(Host)
섹션을 참조하세요. -
cs-protocol
최종 사용자 요청 프로토콜(
http
,https
.ws
또는wss
)입니다. -
cs-bytes
최종 사용자가 요청에 포함한 데이터의 바이트 수(헤더 포함)입니다. WebSocket 연결의 경우, 연결에서 클라이언트로부터 서버로 전송된 총 바이트 수입니다.
-
time-taken
서버가 최종 사용자 요청을 수신한 시점부터 서버에서 출력 대기열에 대한 응답의 최종 바이트를 쓰는 시점 간의 시간 차이(1/1,000초 단위, 예: 0.082)로, 서버에서 측정됩니다. 최종 사용자 관점에서 보면 전체 응답을 가져오는 데 걸리는 총 시간은 네트워크 지연 시간과 TCP 버퍼링으로 인해 이 값보다 큽니다.
-
x-forwarded-for
최종 사용자가 HTTP 프록시 또는 로드 밸런서를 사용하여 요청을 전송하는 경우,
c-ip
필드의 값은 프록시 또는 로드 밸런서의 IP 주소입니다. 이 경우 이 필드는 요청을 시작한 최종 사용자의 IP 주소입니다. 이 필드에는 여러 개의 쉼표로 구분된 IP 주소가 포함될 수 있습니다. 각 IP 주소는 IPv4 주소(예:192.0.2.183
) 또는 IPv6 주소(예:2001:0db8:85a3::8a2e:0370:7334
)일 수 있습니다.최종 사용자가 HTTP 프록시 또는 로드 밸런서를 사용하지 않은 경우 이 필드의 값은 하이픈(-)입니다.
-
ssl-protocol
요청에 HTTPS가 사용된 경우, 이 필드에는 최종 사용자 및 서버가 요청 및 응답 전송을 위해 협상한 SSL/TLS 프로토콜이 포함됩니다. 가능한 값 목록은 최종 사용자와 CloudFront 간에 지원되는 프로토콜 및 암호에서 지원되는 SSL/TLS 프로토콜을 참조하세요.
필드 17의
cs-protocol
이http
인 경우 이 필드의 값은 하이픈(-)입니다. -
ssl-cipher
요청에 HTTPS가 사용되는 경우, 이 필드에는 최종 사용자 및 서버가 요청 및 응답 암호화를 위해 협상한 SSL/TLS 암호가 포함됩니다. 가능한 값 목록은 최종 사용자와 CloudFront 간에 지원되는 프로토콜 및 암호에서 지원되는 SSL/TLS 암호를 참조하세요.
필드 17의
cs-protocol
이http
인 경우 이 필드의 값은 하이픈(-)입니다. -
x-edge-response-result-type
최종 사용자에게 응답을 반환하기 직전에 서버에서 응답을 분류한 방식입니다.
x-edge-result-type
필드도 참조하십시오. 가능한 값은 다음과 같습니다.-
Hit
- 서버가 캐시에서 최종 사용자에게 객체를 제공했습니다. -
RefreshHit
- 서버가 캐시에서 객체를 찾았지만 객체가 만료되었기 때문에 서버가 오리진에 접속하여 캐시에 최신 버전의 객체가 있는지 확인했습니다. -
Miss
- 캐시의 객체로는 요청을 충족할 수 없어서 서버가 요청을 오리진 서버로 전달했으며 결과가 최종 사용자에게 반환되었습니다. -
LimitExceeded
- CloudFront 할당량(이전에는 제한이라고 함)이 초과되어 요청이 거부되었습니다. -
CapacityExceeded
- 객체 제공을 요청하는 시점에 엣지 로케이션의 용량이 충분하지 않아 서버에서 503 오류가 반환되었습니다. -
Error
- 일반적으로 이는 요청으로 인해 클라이언트 오류(sc-status
필드 값이4xx
범위에 있음) 또는 서버 오류(sc-status
필드 값이5xx
범위에 있음)가 발생했음을 의미합니다.x-edge-result-type
필드의 값이Error
이고 이 필드의 값이Error
가 아닌 경우 다운로드를 완료하기 전에 클라이언트 연결이 끊어졌습니다. -
Redirect
- 서버는 배포 설정에 따라 최종 사용자를 HTTP에서 HTTPS로 리디렉션했습니다.
-
-
cs-protocol-version
최종 사용자가 요청에서 지정한 HTTP 버전입니다. 가능한 값은
HTTP/0.9
,HTTP/1.0
,HTTP/1.1
,HTTP/2.0
및HTTP/3.0
입니다. -
fle-status
배포에 대해 필드 레벨 암호화가 구성될 때, 요청 본문이 처리되었는지를 나타내는 코드가 이 필드에 포함됩니다. 서버가 성공적으로 요청 본문을 처리하고, 지정된 필드 값을 암호화하고, 요청을 오리진으로 전달할 때 이 필드 값은
Processed
입니다. 이 경우x-edge-result-type
값은 계속해서 클라이언트 측 또는 서버 측 오류를 나타낼 수 있습니다.이 필드에 가능한 값은 다음과 같습니다.
-
ForwardedByContentType
- 어떠한 콘텐츠 유형도 구성되지 않았기 때문에 서버가 요청을 구문 분석 또는 암호화 없이 오리진에 전달했습니다. -
ForwardedByQueryArgs
- 요청에 필드 레벨 암호화 구성에 없는 쿼리 인수가 포함되기 때문에 서버가 요청을 구문 분석 또는 암호화 없이 오리진에 전달했습니다. -
ForwardedDueToNoProfile
- 필드 레벨 암호화 구성에 어떠한 프로필도 지정되지 않았기 때문에 서버가 요청을 구문 분석 또는 암호화 없이 오리진에 전달했습니다. -
MalformedContentTypeClientError
-Content-Type
헤더 값이 유효하지 않은 형식이기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다. -
MalformedInputClientError
- 요청 본문이 유효하지 않은 형식이기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다. -
MalformedQueryArgsClientError
- 쿼리 인수가 비어 있거나 유효하지 않은 형식이기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다. -
RejectedByContentType
- 필드 레벨 암호화 구성에 어떠한 콘텐츠 유형도 지정되지 않았기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다. -
RejectedByQueryArgs
- 필드 레벨 암호화 구성에 어떠한 쿼리 인수도 지정되지 않았기 때문에 서버가 요청을 거부하고 최종 사용자에게 HTTP 400 상태 코드를 반환했습니다. -
ServerError
- 오리진 서버가 오류를 반환했습니다.
요청이 필드 레벨 암호화 할당량(이전에는 제한이라고 함) 을 초과하면 이 필드에 다음 오류 코드 중 하나가 포함되고 서버는 HTTP 상태 코드 400을 최종 사용자에게 반환합니다. 필드 레벨 암호화의 현재 할당량에 대한 목록은 필드 레벨 암호화에 대한 할당량 단원을 참조하세요.
-
FieldLengthLimitClientError
- 암호화되도록 구성된 필드가 허용되는 최대 길이를 초과했습니다. -
FieldNumberLimitClientError
- 배포가 암호화하도록 구성된 요청에 허용된 필드 수보다 많은 필드가 있습니다. -
RequestLengthLimitClientError
- 필드 레벨 암호화 구성 시 요청 본문의 길이가 허용되는 최대 길이를 초과했습니다.
배포에 대해 필드 레벨 암호화가 구성되지 않은 경우 이 필드의 값은 하이픈(-)입니다.
-
-
fle-encrypted-fields
서버가 암호화하여 오리진에 전달한 필드 레벨 암호화의 수입니다. CloudFront 서버는 데이터를 암호화하면서 처리된 요청을 오리진으로 스트리밍합니다. 따라서
fle-status
값이 오류인 경우에도 이 필드에 값이 있을 수 있습니다.배포에 대해 필드 레벨 암호화가 구성되지 않은 경우 이 필드의 값은 하이픈(-)입니다.
-
c-port
최종 사용자가 보낸 요청의 포트 번호입니다.
-
time-to-first-byte
요청을 수신한 후 응답의 첫 바이트를 쓸 때까지의 시간(초)이며 서버에서 측정합니다.
-
x-edge-detailed-result-type
이 필드에는
x-edge-result-type
필드와 동일한 값이 포함됩니다. 단, 다음과 같은 경우는 예외입니다.-
객체가 Origin Shield 계층에서 최종 사용자에게 제공된 경우 이 필드에
OriginShieldHit
가 포함합니다. -
객체가 CloudFront 캐시에 없고 오리진 요청 Lambda @Edge 함수에 의해 응답이 생성된 경우 이 필드에는
MissGeneratedResponse
가 포함됩니다. -
x-edge-result-type
필드의 값이Error
인 경우 이 필드에는 오류에 대한 추가 정보를 제공하는 다음 값 중 하나가 포함됩니다.-
AbortedOrigin
- 서버에 오리진 관련된 문제가 발생했습니다. -
ClientCommError
- 서버와 최종 사용자 간의 통신 문제로 인해 최종 사용자에게 대한 응답이 중단되었습니다. -
ClientGeoBlocked
- 최종 사용자의 지리적 위치에서 요청을 거부하도록 배포가 구성됩니다. -
ClientHungUpRequest
- 요청을 보내는 동안 최종 사용자가 중간에 중지했습니다. -
Error
- 오류 유형이 기타 모든 카테고리에 적합하지 않아 오류가 발생했습니다. 이러한 오류 유형은 서버가 캐시에서 오류 응답을 제공할 때 발생할 수 있습니다. -
InvalidRequest
- 서버가 최종 사용자로부터 잘못된 요청을 받았습니다. -
InvalidRequestBlocked
- 요청한 리소스에 대한 액세스가 차단됩니다. -
InvalidRequestCertificate
- 배포가 HTTPS 연결이 설정된 SSL/TLS 인증서와 일치하지 않습니다. -
InvalidRequestHeader
- 요청에 잘못된 헤더가 포함되어 있습니다. -
InvalidRequestMethod
- 사용되었던 HTTP 요청 메서드를 처리하도록 배포가 구성되지 않았습니다. 이러한 문제는 배포에서 캐시 가능한 요청만 지원하는 경우 발생할 수 있습니다. -
OriginCommError
- 오리진에 연결하거나 오리진에서 데이터를 읽는 동안 요청 시간이 초과되었습니다. -
OriginConnectError
- 서버를 오리진에 연결할 수 없습니다. -
OriginContentRangeLengthError
- 오리진 응답의Content-Length
헤더가Content-Range
헤더의 길이와 일치하지 않습니다. -
OriginDnsError
- 서버에서 오리진의 도메인 이름을 확인할 수 없습니다. -
OriginError
- 오리진에서 잘못된 응답을 반환했습니다. -
OriginHeaderTooBigError
- 오리진에서 반환한 헤더가 너무 커서 엣지 서버가 처리할 수 없습니다. -
OriginInvalidResponseError
- 오리진에서 잘못된 응답을 반환했습니다. -
OriginReadError
- 오리진에서 서버를 읽을 수 없습니다. -
OriginWriteError
- 오리진에 서버를 쓸 수 없습니다. -
OriginZeroSizeObjectError
- 오리진에서 전송된 크기가 0인 객체로 인해 오류가 발생했습니다. -
SlowReaderOriginError
- 최종 사용자가 오리진 오류를 일으킨 메시지를 느리게 읽었습니다.
-
-
-
sc-content-type
응답의 HTTP
Content-Type
헤더 값입니다. -
sc-content-len
응답의 HTTP
Content-Length
헤더 값입니다. -
sc-range-start
응답에 HTTP
Content-Range
헤더가 포함되어 있으면 이 필드에 범위 시작 값이 포함됩니다. -
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 - -
표준 로그 요금
표준 로깅은 CloudFront의 선택적 기능입니다. 표준 로깅을 활성화하더라도 별도 요금이 부과되지 않습니다. 하지만 Amazon S3에 파일을 저장하고 액세스하는 데는 일반적인 Amazon S3 요금이 부과되며, 사용자는 언제라도 이러한 파일을 삭제할 수 있습니다.
Amazon S3 요금에 대한 자세한 내용은 Amazon S3 요금
CloudFront 요금에 대한 자세한 내용은 CloudFront 요금