현재 상용서버에서 ELB(Elastic Load Banacing) 그중에서도 ALB(Application Load Balancer)를 사용하고 있는 중입니다.

근 1년간 서비스의 글로벌화로 인해 사용자 및 해킹 시도가 점점 많아져 로그 분석할 일이 늘어났습니다.
이전까지는 일반적으로 Nginx Access Log를 사용해서 관련 문제를 해결해 왔지만, 가끔 ELB 로그 확인이 불가피해지고 그때마다 S3에서 다운받아서 그 많은로그 하나하나 분석하는데 시간을 너무 잡아먹어서 결국 Athena를 이용해 보기로 합니다.

Athena란

Amazon Athena은(는) Amazon Simple Storage Service(Amazon S3)에서 표준 SQL을 사용하여 데이터를 쉽게 바로 분석할 수 있는 대화형 쿼리 서비스입니다. AWS Management Console에서 몇 가지 작업을 수행하면 Amazon S3에 저장된 데이터에서 Athena을(를) 가리키고, 표준 SQL을 사용하여 임시 쿼리를 실행하고, 몇 초 안에 결과를 얻을 수 있습니다.

Athena은(는) 서버리스 서비스이므로 설정하거나 관리할 인프라가 없으며, 실행한 쿼리에 대해서만 비용을 지불합니다. Athena에서는 쿼리를 동시에 실행하여 규모를 자동으로—조절합니다.—따라서 많은 데이터 세트와 복잡한 쿼리가 있더라도 결과를 빠르게 도출합니다.

위는 공식 문서에서 발췌한 내용입니다.

쉽게말해 S3에 압축되어 저장된 로그들을 SQL 쿼리로 분석 가능하다는 겁니다.
그리고 물론 ALB 뿐만 아니라 여러 가지 AWS 서비스들도 지원합니다.

AWS Docs

이 글을 작성하면서 알았지만 ELB로그 뿐만 아니라 여러가지 서비스를 지원하고 있습니다.
CloudTrail도 실제로 히스토리를 살펴보면 생각보다 쓰기가 까다로운데 이를 이용하면 쉽게 추적할 수 있겠네요.

사용하기 전 알아두기

서버리스

서버를 따로 관리할 필요가 없습니다.
우리는 그저 스키마와 S3에 로그가 저장된 경로를 제공하고 쿼리를 시작하면 됩니다.
ETL(Extraction, Transformation, Loading)의 번거로움을 Athena 내부에서 해결해 줍니다.
쉽게 말해 우리가 따로 서버를 설정해 줄 필요도 없고, Athena가 S3에서 데이터를 추출하고 변환하고 metastore에 로드해 줍니다.

빠른 속도

병렬방식으로 쿼리를 자동실행하기 때문에 빠른 결과 전달을 제공합니다.
물론 쿼리나 최적화가 되어있지 않거나 데이터가 너무 많으면 오래 걸리긴 하지만 그걸 감안해도 빠릅니다.

표준 SQL 실행

표준 SQL을 지원하기 때문에 러닝 커브가 획기적으로 줄어듭니다.
Amazon Athena는 ANSI SQL을 지원하는 Presto를 사용하며, CSV, JSON, ORC, Avro, Parquet 등 다양한 표준 데이터 형식과 호환됩니다. 이 서비스는 빠른 속도의 임시 쿼리에 적합하지만 대용량 조인, 창 함수, 어레이 등 복잡한 분석을 처리하는 데도 손색이 없습니다. 또한 가용성이 뛰어나기 때문에 여러 설비에서, 혹은 단일 설비의 여러 디바이스에서 컴퓨팅 리소스를 사용해 쿼리를 실행하기도 합니다. Amazon Athena는 Amazon S3를 기본 데이터 스토어로 사용하여 데이터 가용성과 내구성이 매우 우수합니다.

요금정책

Amazon Athena 요금 – Amazon Web Services(AWS)

가격이 비쌀 거라는 예상은 적중했습니다.
1년 치 access log가 40G라고 했을 때 한 번에 $0.2 정도 소모됩니다.
사실 뭐 200~300원 남짓이긴 하지만 누가 쿼링을 한 번만 하겠습니까?

돈이 많은 회사야 상관없겠지만 문제가 하나 더 있습니다.
쿼리 조건에 따라 다르겠지만 쿼리 최적화를 제대로 하지 않을 경우 모든 데이터를 검색하는 시간이 몇 분을 넘어갑니다.

그래서 위와 같은 문제를 해결하기 위해 데이터 파티셔닝을 지원합니다.
이는 이후 Part 2에서 다뤄보도록 하죠.

마치며

파트 1에서는 Athena의 특징과 가격 정책 등을 알아보았습니다.
파트 2에서는 간단한 예제를 통해서 데이터베이스를 세팅해 봅시다.