내일배움캠프 TIL

모니터링 & 로깅 → EFK 스택 본캠프 TIL 02/03

parkcw0325 2025. 2. 3. 21:56

쿠버네티스의 로깅 및 모니터링 도구에 대한 개요

쿠버네티스는 기본적으로 자체적인 로깅 및 모니터링 기능을 내장하고 있지 않기 때문에, 운영 환경에서는 별도의 도구를 활용하여 이러한 기능을 구축해야 합니다. 일반적으로 로깅에는 EFK(Elasticsearch, Fluentd, Kibana) 또는 ELK(Elasticsearch, Logstash, Kibana) 스택을 사용하며, 모니터링에는 Prometheus와 Grafana가 널리 활용됩니다.

 

쿠버네티스에서의 로그 확인 방법

쿠버네티스에서 로그를 확인하는 주요 방법은 다음과 같습니다:

  • kubectl logs: CLI를 통해 즉시 로그를 확인할 수 있지만, 파드가 삭제되거나 일회성 배치 작업이 완료되면 로그도 함께 사라지는 단점이 있습니다.
  • docker logs: 컨테이너의 로그는 실제로 호스트의 특정 디렉토리(/var/lib/docker/containers/<ContainerID>/<ContainerID>-json.log에 저장됩니다. 로깅 수집기는 /var/log/containers/*.log 디렉토리에서 데이터를 수집하여 중앙 저장소로 전송함으로써 클러스터 전체의 로그를 통합할 수 있습니다.

EFK 스택 구성 요소

Elasticsearch

Elasticsearch는 텍스트 검색에 최적화된 오픈소스 검색 엔진으로, JSON 형식의 데이터를 저장하고 빠르게 검색할 수 있도록 설계되었습니다. 주요 구성 요소는 다음과 같습니다.

  • Index(인덱스): 유사한 데이터를 그룹화하여 저장하는 단위입니다.
  • Shard(샤드): 데이터를 여러 개의 샤드로 분산 저장하여 확장성을 확보합니다.
  • Document(문서): JSON 형식으로 저장된 데이터의 기본 단위입니다.
  • Field(필드): 문서 내에서 가장 작은 데이터 단위로, 검색 및 분석에 활용됩니다.

Fluentd 또는 Fluent Bit

로그를 다양한 소스로부터 수집하여 집계한 후, 지정된 저장소로 전송하는 역할을 합니다. 예를 들어, /var/log/containers/*.log의 로그를 수집하여 Elasticsearch로 전달하면 클러스터 전체의 로깅을 수행할 수 있습니다.

Kibana

Elasticsearch에 저장된 데이터를 시각화하고, 다양한 차트 및 대시보드를 통해 로그를 분석할 수 있도록 지원하는 웹 기반 플랫폼입니다. Kibana Query Language(KQL)를 사용하여 데이터를 검색하고 필터링할 수 있습니다.

로그 수집 흐름

  1. Worker Node (Pod - Container) → 2. Fluent Bit → 3. Elasticsearch(로그 통합 저장소) → 4. Kibana(시각화 및 분석)

기본적으로 Fluent Bit을 활성화하고 Logstash를 비활성화하여 경량화된 수집 구조를 구성할 수 있습니다.

리소스 모니터링(Prometheus & Grafana)

과거의 모니터링 시스템은 애플리케이션과 에이전트가 데이터를 푸시하는 방식(Push-based)이었지만, 쿠버네티스에서는 모니터링 시스템이 대상에서 직접 메트릭을 가져오는 Pull-based 방식을 채택하고 있습니다.

Prometheus

SoundCloud에서 개발한 오픈소스 모니터링 및 알람 도구로, Service Discovery 기능을 통해 모니터링 대상의 메트릭을 직접 수집하는 특징이 있습니다.

Grafana

오픈소스 시각화 도구로, 다양한 데이터베이스 및 모니터링 시스템과 연동하여 데이터를 시각화하고 경고 시스템을 설정할 수 있습니다. 또한, 다양한 플러그인을 통해 확장성이 뛰어나며, 유사한 도구로는 DataDog이 있습니다.

쿠버네티스의 운영 환경에서 EFK 스택과 Prometheus/Grafana 조합을 활용하면 효과적으로 로그를 수집하고, 시스템 리소스를 모니터링할 수 있습니다.