Amazon Athena - 즉시 데이터 쿼리를 시작합니다.

Amazon Athena는 표준 SQL을 사용하여 Amazon S3 및 기타 연동 데이터 원본의 데이터를 쉽게 분석할 수 있는 대화형 쿼리 서비스입니다.

Amazon CloudFront 로그 쿼리

Amazon CloudFront CDN을 구성하여 웹 배포 액세스 로그를 Amazon Simple Storage Service로 내보낼 수 있습니다.

이 로그를 사용하여 CloudFront가 제공하는 웹 속성 전반에 걸쳐 사용자의 서핑 패턴을 탐색합니다.

 

로그 쿼리를 시작하기 전에 기본 CloudFront 배포에 따라 웹 배포에서 로그에 액세스할 수 있도록 설정합니다.

자세한 내용은 Amazon CloudFront 개발자 가이드의 액세스 로그를 참조하세요.

 

왜 갑자기 CloudFront?

CloudFront 설정에 의해 로그가 S3에 저장되고 있습니다.

저장되는 로그를 Athena를 통해 손쉽게 데이터를 조회하려고 합니다.

 

S3을 만들고 분석할 데이터 업로드

S3 이름은 jeongdo-cf-test-athena 입력하였습니다.

 

s3://jeongdo-cf-test-athena/CloudFront/

s3에 CloudFront 이라는 하위 폴더(디렉토리)가 존재해야하고 이곳에 cloudfront 로그파일을 저장합니다.

 

Athena 쿼리 편집기 설정

 

Athena, 테이블 생성

아테나에서 s3에 저장된 로그를 테이블로 만드는 쿼리는 아래와 같습니다.

CREATE EXTERNAL TABLE IF NOT EXISTS default.cloudfront_logs (
  `date` DATE,
  time STRING,
  `x-edge-location` STRING,
  `sc-bytes` BIGINT,
  `c-ip` STRING,
  `cs-method` STRING,
  `cs(Host)` STRING,
  `cs-uri-stem` STRING,
  `sc-status` INT,
  `cs(Referer)` STRING,
  `cs(User-Agent)` STRING,
  `cs-uri-query` STRING,
  `cs(Cookie)` STRING,
  `x-edge-result-type` STRING,
  `x-edge-request-id` STRING,
  `x-host-header` STRING,
  `cs-protocol` STRING,
  `cs-bytes` BIGINT,
  `time-taken` FLOAT,
  `x-forwarded-for` STRING,
  `ssl-protocol` STRING,
  `ssl-cipher` STRING,
  `x-edge-response-result-type` STRING,
  `cs-protocol-version` STRING,
  `fle_status` STRING,
  `fle_encrypted_fields` INT,
  `c_port` INT,
  `time-to-first-byte` FLOAT,
  `x-edge-detailed-result-type` STRING,
  `sc-content-type` STRING,
  `sc-content-len` BIGINT,
  `sc-range-start` BIGINT,
  `sc-range-end` BIGINT
)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t'
LOCATION 's3://jeongdo-cf-test-athena/CloudFront/'
TBLPROPERTIES ( 'skip.header.line.count'='2' )

 

Athena 테이블 조회

아직은 처음 접하는 거라 익숙하지 않지만 Athena를 어떻게 활용하는지에 대해 입문은 했다라고 생각합니다.

 

-- 테스트 SQL1
SELECT * FROM "default"."cloudfront_logs" limit 10;

-- 테스트 SQL2
SELECT "cs-uri-stem", COUNT(*) AS "count" FROM "default"."cloudfront_logs" GROUP BY "cs-uri-stem" ORDER BY "count" DESC;

-- 테스트 SQL3
SELECT "cs-uri-stem"
      , COUNT(*) AS "count"
      , MAX("sc-bytes") AS "sc-bytes"
FROM "default"."cloudfront_logs" 
GROUP BY "cs-uri-stem" ORDER BY "count" DESC;