AWS 기술 블로그

Amazon CloudFront를 활용한 미디어 서비스 모니터링 방안, 1부 : 표준 로그 기반 분석

미디어 서비스 환경에서 최종사용자와 직접 통신하는 콘텐츠 전송 네트워크(CDN)의 성능 및 가용성을 모니터링하는 것은 매우 중요합니다. 모든 미디어 데이터는 CDN 인프라를 통해 최종사용자에게 전달되므로 콘텐츠 공급자는 CDN 캐시서버와 최종사용자 사이의 네트워크 통신에 대한 가시성을 확보할 필요가 있습니다. 만약 해당 구간의 실시간 트렌드 모니터링에 대한 가시성을 확보할 수 있다면, 지역별 트래픽 패턴이나 에러율 패턴 혹은 성능 지연 발생 여부를 실시간으로 확인하여 이슈 사항에 빠르게 대처할 수 있습니다. 추가적으로 CDN으로 인입된 모든 요청에 대한 세부 로그를 다양한 기준으로 추출 및 분석할 수 있다면, 실시간 트랜드 모니터링에서 확인하기 어려운 이슈들에 대하여 추가적인 통찰을 얻을 수 있습니다.

Amazon CloudFront 는 글로벌 엣지 로케이션 네트워크를 사용하여 짧은 지연 시간과 빠른 전송 속도로 정적 및 동적 웹 콘텐츠를 안전하게 전송하는 AWS의 콘텐츠 전송 네트워크(CDN) 서비스입니다. CloudFront는 CDN 캐시서버와 최종사용자 사이의 가시성을 확보하기 위한 방안으로 두 가지 종류의 로깅 방식을 제공합니다. 먼저 표준 로깅 방식는 요청 완료 후 몇 분 이내에 선택한 Amazon Simple Storage Service(Amazon S3) 버킷으로 로그를 전송합니다. 실시간 로깅 방식는 요청 완료 후 몇 초 이내에 Amazon Kinesis Data Streams에서 선택한 데이터 스트림으로 로그를 전송합니다. 이 두 가지 로그는 AWS의 다양한 서비스와 결합하여 대시보드와 같은 시각화 도구를 생성할 수 있으며, 쿼리 기반의 로그 분석 환경을 제공할 수 있습니다.

이 글에서는 Amazon CloudFront의 표준 로그 및 실시간 로그를 AWS의 다양한 서비스와 결합하여 가시성을 제공하는 방법에 대하여 설명합니다.

솔루션 개요

CloudFront에서 표준 로그를 S3에 저장하도록 설정하고 저장된 데이터를 Amazon Athena에서 표준 쿼리로 조회하여 검색 결과를 얻을 수 있습니다. 또한 Amazon Quicksight를 사용해 손쉽게 시각화 대시보드를 구축하고 비즈니스 통찰력을 확보 할 수 있습니다. 실시간 로그는 Amazon Kinesis Streams 및 Firehose를 통해 수집할 수 있으며 OpenSearch에서 실시간 대시보드를 생성하고 알람을 설정하여 이슈 사항을 실시간으로 확인 및 대처할 수 있습니다. 전체적인 아키텍처는 다음과 같습니다.

이 글에서는 Amazon CloudFront의 표준 로그를 기반으로 Amazon Athena를 이용한 쿼리 분석 및 Amazon Quicksight를 이용한 대시보드를 구현하는 방안에 대해서 집중적으로 설명합니다. 실시간 로그 기반의 모니터링 방안은 2부를 참조하시길 바랍니다.

단계 요약

  • 단계 1 : Amazon S3 버킷 생성
  • 단계 2 : Amazon CloudFront에서 표준 로그 설정
  • 단계 3 : Amazon Athena에서 데이터 분석
  • 단계 4 : Amazon Quicksight에서 Athena 연동 및 대시보드 작성

사전 준비사항

솔루션을 배포하기 위해서는 아래와 같은 사항을 준비해야 합니다.

단계 1 : Amazon S3 버킷 생성

Amazon CloudFront의 표준 로그를 저장할 버킷을 생성합니다. Amazon S3 콘솔로 이동하여 버킷 만들기를 선택하고 버킷 이름을 cf-batch-xxxx-log으로 지정하고, AWS 리전은 아시아 태평양(서울) ap-northeast-2를 선택합니다. 기타 항목은 기본 설정으로두고 버킷 만들기를 클릭합니다.

단계 2 : Amazon CloudFront에서 표준 로그 설정

CloudFront 콘솔로 이동하여 모니터링 하고자 하는 배포를 선택하고 표준 로깅 기능을 활성화하여 단계 1에서 만든 버킷으로 로그를 전송합니다. CloudFront의 일반 설정에서 편집을 클릭하고 표준 로깅 기능을 켜기로 체크 합니다. 그리고 S3 버킷은 단계 1에서 생성한 버킷 이름으로 선택하고 쿠키 로깅은 끄기로 설정합니다. (만약 쿠키 정보도 분석이 필요한 경우 해당 항목을 켜기로 오픈하고 전처리 과정에서 원하시는 형태로 변경하여 사용할 수 있습니다.)

기타 항목은 기본 설정으로 두고 변경 사항 저장 버튼을 클릭합니다.

단계 3 : Amazon Athena에서 데이터 분석

Amazon Athena는 표준 SQL을 사용해 S3에 저장된 데이터를 간편하게 분석 할 수 있는 대화식 쿼리식 서비스 입니다. Athena는 서버리스 서비스이므로 관리할 인프라가 없으며 실행한 쿼리에 대해서만 비용을 지불하는 구조입니다. 단계 1,2 를 통해서 생성된 표준 로그를 Athena를 통해서 분석할 수 있습니다. Athena 콘솔로 이동하여 우선 분석하고자 하는 S3 데이터에 대한 테이블을 default 데이터베이스에 생성합니다. LOCATION 은 단계 1에서 생성한 S3 버킷의 S3 url 정보를 입력합니다.

CREATE EXTERNAL TABLE IF NOT EXISTS default.cloudfront_logs (
  `date` DATE,
  time STRING,
  location STRING,
  bytes BIGINT,
  request_ip STRING,
  method STRING,
  host STRING,
  uri STRING,
  status INT,
  referrer STRING,
  user_agent STRING,
  query_string STRING,
  cookie STRING,
  result_type STRING,
  request_id STRING,
  host_header STRING,
  request_protocol STRING,
  request_bytes BIGINT,
  time_taken FLOAT,
  xforwarded_for STRING,
  ssl_protocol STRING,
  ssl_cipher STRING,
  response_result_type STRING,
  http_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://cf-batch-ryz-log/'
TBLPROPERTIES ( 'skip.header.line.count'='2' )

생성된 테이블에서 다양한 쿼리를 통해 데이터를 추출할 수 있습니다. 하기 예제를 편집기에 복사하여 “date” 항목을 수정하여 실행 버튼을 클릭하면 결과를 조회할 수 있습니다.

예제 1 : 접속 IP 기반으로 미디어 동시 접속 사용자 현황을 확인할 수 있습니다. 다만 IP가 접속자 숫자와 일치하지 않기 때문에, 정확한 동시 접속자 확인을 위해서는 쿠키 로그 정보를 수집 후 Lambda에서 전처리 및 분석을 하는 것이 좋습니다. 또는 애플리케이션에서 별도로 로직을 구현 할 수 있습니다.

SELECT time, count(DISTINCT request_ip)
FROM cloudfront_logs
WHERE "date" BETWEEN DATE '2023-01-25' AND DATE '2023-01-27'
AND time > '00:00:00'
AND time < '24:00:00'
GROUP BY time
Order by time desc;

예제 2 : 엣지 로케이션 별로 들어온 요청 건수와 대응이 되는 전송량 정보를 확인할 수 있습니다.

SELECT location, count(*) AS total_requests, SUM(bytes) AS total_bytes
FROM cloudfront_logs
WHERE "date" BETWEEN DATE '2023-01-25' AND DATE '2023-01-27'
AND time > '00:00:00'
AND time < '24:00:00'
GROUP BY location;

예제 3 : HTTP 상태 코드 값을 조회하여 발생한 에러 비중 등을 모니터링 할 수 있습니다. “0” 상태 코드는 서버가 전체 객체를 반환하기 전에 최종사용자가 연결을 닫았음을 나타냅니다.

SELECT status, count(*) AS count
FROM cloudfront_logs
WHERE "date" BETWEEN DATE '2023-01-25' AND DATE '2023-01-27'
AND time > '00:00:00'
AND time < '24:00:00'
GROUP BY status;

예제 4 : Hit/Miss/Error 에 해당이 되는 건수들을 확인하여 cache 패턴을 파악할 수가 있습니다.

SELECT result_type, count(*) AS count
FROM cloudfront_logs
WHERE "date" BETWEEN DATE '2023-01-25' AND DATE '2023-01-27'
AND time > '00:00:00'
AND time < '24:00:00'
GROUP BY result_type;

예제 5 : 요청이 가장 많은 5개의 IP를 검색하여 해당 최종사용자가 정상적인 요청인지 분석할 수 있습니다.

SELECT request_ip, count(*) AS total_requests
FROM cloudfront_logs
WHERE "date" BETWEEN DATE '2023-01-25' AND DATE '2023-01-26'
AND time > '00:00:00'
AND time < '09:00:00'
GROUP BY request_ip
ORDER BY total_requests desc
limit 5;

예제 6 : 처리 속도가 느린 요청에 대해서 확인할 수가 있습니다.

SELECT * FROM cloudfront_logs
WHERE "date" BETWEEN DATE '2023-01-25' AND DATE '2023-01-26'
AND time > '00:00:00'
AND time < '24:00:00'
AND (time_to_first_byte > 0.01 OR time_taken >1);

단계 4 : Amazon Quicksight에서 Athena 연동 및 대시보드 작성

Amazon QuickSight는 비즈니스 인텔리전스 서비스로, 해당 서비스를 통하여 쉽고 간단하게 다양한 종류의 대시보드를 만들 수 있을 뿐만 아니라, 시각화된 데이터를 기반으로 추가적인 비지니스 통찰을 얻을 수 있습니다. Amazon QuickSight 콘솔에 접근하여 “새 분석” 을 클릭, “새 데이터 세트” 를 생성합니다. 데이터 세트 생성으로 Athena를 클릭하고 CloudFront_Standard_logs 을 입력하고 “데이터 원본 생성” 버튼을 클릭합니다. 단계 3에서 생성한 테이블을 선택해야 합니다. 카탈로그 및 데이터베이스의 정보 역시 단계 3에서 생성한 테이블의 정보를 바탕으로 각각 “AwsDataCatalog” 및 “default”를 선택합니다. 나열되는 테이블 리스트 중에서 cloudfront_logs를 선택하고, Visualize를 클릭합니다.

QuickSight 시각화 화면에 접근하여 필드 목록에서 다양한 속성을 조합하여 원하는 결과를 시각화 할 수 있습니다.

·     result_type, status, method 항목으로 각각 그룹화하여 원형 차트를 구성할 수 있습니다.
·     Location의 합계, time_taken, time_to_first_byte의 평균 값을 기반으로 막대그래프를 구성할 수 있습니다.

결론

이 글에서는 Amazon CloudFront의 표준 로그를 Amazon Athena와 결합하여 사용자가 손쉽게 쿼리를 통해 로그를 분석할 수 있는 환경을 구성해 보았습니다. 그리고 Amazon Quicksight를 활용하여 표준 로그를 시각화하는 방법을 알아보았습니다. 2부에서는 실시간 로그를 활용한 모니터링 구축 방안에 대해서 자세하게 살펴보겠습니다.

추가자료

Amazon CloudFront를 활용한 미디어 서비스 모니터링 방안, 2부 : 실시간 로그 기반 모니터링

Yongzhe Ren

Yongzhe Ren

렌(Yongzhe Ren) 솔루션즈 아키텍트는 다양한 분야의 엔지니어 경험을 바탕으로, 고객의 비즈니스 성과를 달성하도록 최적의 아키텍처를 구성하는 역할을 수행하고 있습니다.

Gabin Lee

Gabin Lee

이갑인 솔루션즈 아키텍트는 다양한 AWS 엣지 서비스를 활용하여 확장 가능하고 탄력적이며 안전한 아키텍처를 구축하는 것에 열정적이며, 특히 CloudFront, Global Accelerator, WAF, Shield 등과 같은 AWS 엣지 서비스를 활용하고 있는 한국 고객들을 집중적으로 지원하고 있습니다.