Post

매달 100원으로 로그 시각화하기

매달 100원으로 로그 시각화하기


개요

저희 회사는 AWS CloudWatch를 통해 로그를 수집하고, 중요도에 따라 Slack으로 알림을 받고 있습니다. 또한 향후 모니터링 시스템 도입에 대비해 CloudWatch 로그를 주기적으로 AWS S3에 저장하고 있습니다.

다만, 비용 절감을 위해 별도로 로그를 정제 및 시각화하고 있지는 않았습니다. 이로 인해 과거의 로그를 조회하거나 집계하는 데 큰 어려움을 겪고 있었습니다.

모니터링 시스템 구축이 논의된 적은 있으나, 비용 문제로 추진하지 못했습니다. 비용 절감이라는 방향성에는 공감하지만, 저 역시 로그 분석의 불편함을 크게 느끼고 있었기에 대안을 고민하게 되었습니다. 그러던 중 각자의 로컬 PC에 ELK Stack을 구성하는 방법을 떠올렸고, 직접 실행에 옮겨 성과를 거두었습니다.

이번 글에서는 편의성과 비용 최소화라는 두 가지 목표를 동시에 달성한 ELK Stack 구축 경험을 공유하고자 합니다.


목표

아래 3가지 목표를 기준으로 프로젝트를 추진했습니다.

  • 가능한 저렴하게
    • 상술한대로 모니터링 시스템 도입으로 큰 비용이 발생하면 안됩니다.
  • 가능한 심플하게
    • 개발자의 인건비도 비용입니다. 큰 공수를 투입해야 할 수준의 프로젝트는 아니므로 가능한 간단하고 빠르게 구현해야 합니다.
  • 가능한 편리하게
    • 로컬에서 직접 실행해야 하는 단점을 보완하기 위해 가능한 편리하게 사용할 수 있어야 합니다.


구현 상세

개요

  • 로그 정제 및 시각화를 위한 모든 서버는 로컬 PC에 띄우도록 구현했습니다.
  • 로그 수집은 FastAPI를 이용하여 상술한 S3에 적재된 파일을 사용하는 것으로 대체했습니다.
  • 로그 정제 및 시각화를 위해서 흔히 ELK로 불리는 ElasticSearch, Logstash, Kibana를 사용했습니다.

상세

구체적인 플로우는 아래와 같습니다.

  • 로컬에서 docker-compose를 실행하여 FastAPI 및 ELK 서버 실행
  • FastAPI
    1. 클라이언트에서 API를 호출하여 원하는 날짜의 로그를 S3에서 로그 압축파일을 다운로드
    2. 다운받은 압축파일 해제 및 로그 별로 분리하여 Logstash에 전송
  • Logstash
    • 로그를 정제 및 ElasticSearch에 전송
  • Kibana에서 자유롭게 ElasticSearch에 저장된 로그 조회

    local-elk


도입 타당성

비용

  • 로그 조회에 S3를 사용하므로 월 100원 미만의 매우 적은 비용이 발생합니다. 이는 아래 명시한 저희 서비스의 특수한 상황 덕분이기도 합니다.
    • 매 월 S3에 적재되는 로그의 총 용량이 10MB 미만으로 매우 작으며
    • 모니터링 기능을 사용할 개발자가 5명 미만으로 조회 비용이 거의 들지 않음

심플함

  • 빠른 개발 속도와 단순한 구조라는 FastAPI의 장점을 활용해, 이틀 만에 경량 서비스를 구현하였습니다.

편리함

  • FastAPI와 ELK 모두 Dockerize 했습니다. 덕분에 docker-compose만 실행하면 바로 로그를 조회할 수 있습니다.


기술 선택 이유

ELK

모니터링 시스템으로 OpenTelemetry - Grafana Loki와 ELK를 후보군으로 고민하였으나 ELK의 풍부한 레퍼런스와 비교적 낮은 러닝커브를 고려하여 ELK를 선택했습니다.

FastAPI

상술한대로 빠르게 경량 서비스를 구현하기 위해 FastAPI를 선택했습니다.


결과

실제로 모니터링 서비스를 사용해본 결과 꽤 편리하게 운영이 가능했습니다. 덕분에 과거 로그를 되짚어보며 서비스가 어떻게 개선되어 왔는지 회고할 수 있는 시간도 가졌습니다.

초기 스타트업은 항상 리소스 부족에 시달립니다. 긍정적으로 생각해보면 정석을 사용할 수 없는 상황에서 어떻게든 활로를 찾는 것이 스타트업의 묘미(?)가 아닌가 싶습니다.

개인적으로 저는 창의성을 발휘하여 변칙적인 방법을 사용하는 것을 좋아합니다. 다만, 그런 구현이 기술 부채로 남을까 우려되어 실제로 적용하는 경우는 많지 않았습니다. 그런 점에서 이번 프로젝트는 부채에 대한 부담 없이 유연하게 구현할 수 있어 특히 즐거웠습니다.

This post is licensed under CC BY 4.0 by the author.