AWS Container 환경 로깅시스템 구축하기

AWS 환경의 컨테이너 로깅 시스템을 이해하고, 효율적인 로그 수집 및 분석 방법을 제시합니다.

AWS Container 환경 로깅시스템 구축하기
Photo by Sophie Cardinale / Unsplash

개요

AWS 환경에서 Container 서비스 모니터링의 다양한 Logging Stack들과 핵심 구성 요소, 장단점을 정리하였습니다. 로깅 시스템의 핵심 구성 요소들을 파악하고 AWS 환경 내에서 로깅 아키텍쳐 구성을 고민합니다.

로깅 시스템의 핵심 구성 요소

로그 시스템을 효율적으로 설계하기 위해선 세부적인 로그 레벨과 로그 포맷 정의하는 로그 생성 전략부터 수집, 처리하는 아키텍쳐와 파이프라인 구성하는 것을 의미합니다. 로그 레벨과 포맷은 운영하려는 서비스(애플리케이션) 레벨에서 고안되어야하며 일반적인 구성 방식은 아래 구성과 같습니다.

로깅 레벨과 로그 포맷

<수집 계층>

  • 애플리케이션 로그
    • 비즈니스 로직 관련 이벤트
    • 사용자 행동 추적
    • 에러/예외 처리
  • 시스템 로그
    • 컨테이너 및 운영체제 레벨
  • 보안 로그
    • 반복적인 로그인 시도
    • 시스템 접근 기록
    • 권한 변경

<로그 레벨 정의>

표준화된 로그 레벨은 다음과 같습니다.

  • ERROR: 시스템 장애, 복구 불가능한 오류
  • WARN: 잠재적 문제, 처리는 가능한 오류
  • INFO: 주요 비즈니스 이벤트, 상태 변경
  • DEBUG: 개발/디버깅용 상세 정보

<로그 포맷 정의>

일반적으로 표준화된 포맷은 다음과 같습니다.

  • 타임스탬프 (ISO 8601)
  • 로그 레벨
  • 서비스/컴포넌트 이름
  • 트랜잭션 ID
  • 요청 ID
  • 사용자 ID
  • 메시지 내용
  • 스택 트레이스 (에러 시)

해당 문서에서는 생성된 로그 수집 과정과 AWS에서의 구성 방안에 대한 가이드로 작성되었습니다.

로그 생성 (Log Generation)

애플리케이션에서 로그를 생성할 때는 구조화된 로깅(로그 레벨과 포맷)이 매우 중요합니다. 이를 수행하기 위해 Java에서는 Logback, Log4j2와 같은 로깅 프레임워크를 사용하여 JSON 형식으로 로그를 출력할 수 있습니다. Python의 경우 structlog나 logging 모듈을 사용하여 수집할 수 있습니다.

시스템에서 로그를 생성할 때는 시스템의 상태, 성능, 보안 이벤트를 정확하게 추적하고 분석할 수 있도록 표준화된 형식과 체계적인 수집 방식을 적용해야 합니다. 운영체제 수준의 이벤트와 시스템 리소스 사용량을 실시간으로 모니터링하며, syslog와 같은 표준 프로토콜을 활용하여 중앙 집중식 로깅 시스템으로 데이터를 전송합니다. 또한, 각 로그 항목에는 타임스탬프, 호스트 정보, 프로세스 ID, 심각도 수준 등 필수적인 메타데이터를 포함하고, 로그 로테이션과 보관 정책을 통해 디스크 공간을 효율적으로 관리하면서도 시스템 성능에 미치는 영향을 최소화해야 합니다. 이를 통해 시스템 관리자는 문제 발생 시 신속한 원인 분석과 대응이 가능하며, 장기적인 성능 추세와 보안 감사도 수행할 수 있습니다.

정리하면 모든 애플리케이션, 시스템은 로깅 패턴이 다르기 때문에 로그를 구조화하거나 사용자 지정 파서를 사용해야합니다.

로그 수집기 (Collector)

로그 수집기는 다양한 소스에서 생성되는 로그 데이터를 효율적으로 수집, 처리, 전달하는 핵심 컴포넌트입니다. Fluentd, Logstash, Vector와 같은 수집기들은 여러 입력 소스로부터 로그를 수집하여 필터링, 파싱, 변환 작업을 수행하고, 지정된 저장소나 분석 시스템으로 전달합니다.

AWS 인프라에서 로그를 수집하는 방식은 크게 3가지가 있습니다.

1. awslogs 드라이버

  • 별도 수집기 없이 CloudWatch로 직접 전송합니다.
  • 설정이 간단하며, CloudWatch 저장 비용 외 추가 비용은 발생하지 않습니다.
  • CloudWatch에 저장되기 때문에 로그 전처리, CloudWatch 외 다른 대상으로 전송이 어렵습니다.

2. SideCar 패턴(AWS FireLens…)

  • 애플리케이션에 추가 컨테이너를 구성하는 방식입니다.
    • Fluent Bit/Fluentd, Vector…
  • 다양한 대상으로 로그 전송 및 로그 필터링 고급 처리가 가능합니다.
  • 추가 리소스로 인한 비용이 발생할 수 있습니다.
  • 업데이트 과정에서 애플리케이션의 영향을 미칠 수 있습니다.
[SERVICE]
    log_level info
    Parsers_File /fluent-bit/parsers/springboot_parser.conf

[Filter]
    Name    parser
    Match   **
    Key_Name    log
    Parser  springboot
    Reserve_Data    True
...

[PARSER]
    Name        springboot
    Format      regex
    Regex       ^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}.\d{1,3})\s+(?<level>[^\s]+)\s(?<threadId>[^\s]+)\s---\s\[(?<thread>.*?)\]\s(?<class>[^\s]+)\s+:(?<message>.*)

3. 모니터링 솔루션(Datadog..)

  • 로그, 메트릭같은 전체적인 APM을 하나의 대시보드에서 통합 관리가 가능합니다.
    • 에이전트 Aggregation을 활용하여 구성합니다.
  • 사전 정의된 대시보드, 템플릿 구성을 통해 다양한 데이터 수집이 가능합니다.
  • 엔터프라이즈 레벨에서 매우 높은 라이선스 비용이 발생할 수 있습니다
    • 플랜에 따라 사용하려는 기능이 제한되어 커스텀이 어렵습니다.
  • 솔루션 종속성이 발생할 수 있습니다.

위와 같이 여러 구성 방식의 로그 수집기가 존재하지만 ECS, EKS에서 활용할 수 있으며 AWS 환경과 쉽게 통합할 수 있는 솔루션 및 툴 위주로 작성하였습니다.

Notion Image

데이터의 인풋, 아웃풋, 필터링, 수집, 파싱, 스토리지, 메트릭까지 여러 기능을 지원하는 오픈소스 로그 수집기로 다양한 기능의 플러그인을 지원합니다. 사이드카 형식의 배포와 k8s의 DaemonSet을 활용한 Aggregator 방식의 아키텍쳐를 지원하며 로그 라우터 역할을 수행합니다.

Fluentd의 경량화 버전인 Fluent Bit 기반으로 AWS에서 타사 로깅 플랫폼으로 로그를 쉽게 라우팅 할 수 있는 ECS용 로그 라우터인 FireLens를 지원합니다.

이는 CloudWatch Logs 에이전트인 awslogs 로그 드라이버와 같은 설정을 구성할 수 있다는 점, 복잡한 초기 구성을 단순화 한다는 점, AWS 서비스간 통합이 원할하다는 장점이 있지만 AWS는 어디까지나 초기 도입을 위한 최소한의 기능만 지원합니다.

구조를 확인해보면 컨테이너의 표준 출력 로그(stdout)는 Unix 소켓을 통해 전송되며 일반 Application은 Fluent Logger를 활용하여 사이드카 컨테이너로 로그를 전송하고 수신할 수 있습니다.

Notion Image

Rust로 작성된 경량화된 고성능 데이터 파이프라인 도구로, 메모리 안정성과 낮은 리소스 사용량이 특징입니다. 현대적인 아키텍처와 직관적인 설정을 제공하지만, AWS 환경에서의 통합 사례가 적고 플러그인 생태계가 상대적으로 부족합니다. 높은 성능과 효율성에도 불구하고, 커뮤니티가 작고 운영 사례가 부족하여 프로덕션 환경 적용 시 신중한 검토가 필요합니다.

Vector도 CloudWatch Logs, Kinesis Firehose와 통합이 가능합니다.

ELK 스택의 핵심 구성 요소로, 다양한 소스에서 데이터를 수집하고 변환할 수 있는 오픈소스 데이터 처리 파이프라인입니다. Grok 패턴을 통한 강력한 로그 파싱 기능과 다양한 입/출력 플러그인을 지원하지만, Java 기반으로 동작하여 상대적으로 높은 리소스를 사용한다는 단점이 있습니다.

Elasticsearch와의 완벽한 통합이 장점이지만, 설정이 복잡하고 학습 곡선이 높습니다. 또한 AWS에서는 직접적으로 OpenSearch와 OpenSearch Dashboard를 지원하므로 Logstash 구성에 익숙하거나 Self-hosted ElasticSearch를 사용하지 않는 이상 권장되지 않습니다.


저장소 (Storage)

로그 저장소는 시스템, 애플리케이션, 네트워크 장치 등에서 생성되는 로그 데이터를 수집, 저장, 분석 및 검색하기 위한 시스템입니다. 로그 데이터는 이벤트 발생 시간, 이벤트 유형, 관련 정보 등을 포함하며, 시스템 운영, 문제 해결, 보안 감사 등에 필수적인 정보를 제공합니다.

로그 저장소는 단순히 로그를 저장하는 것 이상의 기능을 제공합니다. 효과적인 로그 관리는 시스템의 안정성, 성능 및 보안을 향상시키는 데 중요한 역할을 합니다.

Notion Image

CloudWatch Logs는 AWS에서 제공하는 관리형 로그 서비스로, 애플리케이션, 시스템 및 AWS 서비스에서 생성된 로그 데이터를 수집, 저장, 분석하고 경고를 생성할 수 있습니다. AWS에서 사용하는 모든 리소스들과 통합, 확장 가능한 스토리지 설정과 암호화 등을 지원하며 CloudWatch Logs Insights를 사용하여 SQL과 유사한 쿼리를 사용할 수 있습니다. 실시간 모니터링, 이상 탐지, OpenSearch Service를 통한 시각화 구성 ,S3 Glacier를 활용한 장기적인 아카이빙을 통한 로그 보존하는 것에 유리하지만 AWS Cloud 환경에 종속적이며 사용량 및 환경(수집, 쿼리에 비용 발생)에 따라 큰 비용이 발생할 수 있습니다.

<OpenSearch>

Notion Image

Elasticsearch의 오픈소스 포크로, AWS가 주도하여 개발하는 분산형 검색 및 분석 엔진입니다. 역인덱스 구조를 통한 빠른 전문 검색과 실시간 데이터 처리가 가능하며, OpenSearch Dashboards를 통한 강력한 시각화 기능을 제공합니다.

AWS 관리형 서비스로 제공되어 운영 부담이 적고, 인덱스 수명주기 관리를 통한 효율적인 데이터 관리가 가능하다는 장점이 있습니다. 또한 OpenSearch에 최적화된 인스턴스 타입과 수평적 확장이 용이한 분산 아키텍처를 가지고 있어 대규모 로그 분석과 실시간 모니터링에 적합하며, 전체 텍스트 검색, 구조화된 검색, 지리 공간 검색, 집계 등 다양한 기능을 제공합니다.

하지만 이를 구축하기 위한 초기 설정이 복잡하고 전체 OpenSearch 클러스터를 구축하기 위한 리소스 사용량이 높습니다. 이로 인해 대규모 데이터 처리 시 비용 부담이 큰 편으로 다가올 수 있으므로 자체적인 쿼리 구성 이해와 초기 사용량 예측, 지속적인 최적화가 필요합니다.

Notion Image

Grafana Labs에서 개발한 로그 집계 시스템으로 분산 마이크로 서비스(Distributed micro service)환경으로 쿠버네티스 환경에 최적화되어 있으며 LogQL 문법으로 통한 라벨 기반 로그 인덱싱을 지원하며 로그 전체 내용을 직접 인덱싱하여 저장하지 않고 . 또한 Loki는 자체 저장소를 가지는 것 뿐만 아니라 Object Storage(S3)같은 서비스와 직접적인 통합을 지원하여 로그 보존 및 스토리지 최적화를 지원한다는 것이 장점입니다.


시각화 & 분석 (Visualization)

수집된 로그를 분석하고 시각화하는 도구를 정의하였습니다.

로그 시각화는 복잡하고 방대한 로그 데이터를 그래프, 차트, 히트맵 등의 시각적인 형태로 표현하여 쉽게 이해하고 분석할 수 있도록 하는 것을 의미합니다. 텍스트 형태의 로그 데이터는 양이 많아지면 분석하기 어렵고, 문제 발생 시 원인 파악에 많은 시간이 소요될 수 있습니다. 하지만 로그 시각화 및 구조 분석을 통해 데이터의 패턴, 추세, 이상치 등을 한눈에 파악하여 빠르게 문제를 해결하고 시스템을 효율적으로 관리할 수 있습니다.

Notion Image

CloudWatch Logs Insights는 AWS에서 제공하는 로그 분석 서비스로, 대량의 로그 데이터를 대화형으로 검색하고 분석할 수 있는 강력한 도구입니다. CloudWatch Logs에 저장된 로그 데이터에서 원하는 정보를 추출하고 시각화하여 시스템 및 애플리케이션의 동작을 이해하고 문제를 해결하는 데 도움을 줍니다. 관리형 서비스이므로 대시보드 및 최적화를 위한 리소스가 들어가지 않는다는 장점이 있지만, 대시보드 당 약 $3.00가 청구됩니다.

Notion Image

OpenSearch Dashboards는 OpenSearch에 저장된 로그 데이터를 시각적으로 분석하고 탐색할 수 있는 강력한 오픈 소스 도구입니다. 다양한 차트, 그래프, 지도 등을 활용하여 로그 데이터를 시각화하고, 이를 통해 시스템의 동작 방식, 성능 병목 현상, 보안 위협 등을 파악하는 데 도움을 줍니다.

AWS에서 관리, 제공하는 오픈 소스 OpenSearch project와 AWS에서 제공하는 관리형 Managed OpenSearch가 있으며 S3와 Zero-ETL, OpenSearch 최적화 인스턴스(or1..)등을 지원합니다. OpenSearch와 통합 구성으로 지원합니다.

Notion Image

Grafana는 오픈 소스 시각화 및 분석 도구로, 다양한 데이터 소스로부터 데이터를 가져와 직관적인 대시보드와 차트를 생성합니다. 특히 로그 데이터 시각화에 탁월한 기능을 제공하며 Loki, Prometheus 등과 같은 Grafana Labs에서 지원하는 여러 저장소와 연동 가능합니다. 이를 통해 단순 로그 데이터 뿐만 아니라 메트릭까지 효과적으로 분석하고 모니터링할 수 있도록 지원합니다. 시각화 도구인만큼 다양하고 뛰어난 시각화 기능들이 존재하지만 대용량 구성에 있어 OpenSearch나 CloudWatch 보다 더 많은 구성이 가능합니다.

Reference