본문 바로가기
Development

ELK (Elastic Stack)

by 한휴르 2025. 9. 4.

ELK 스택 (Elastic Stack)

ELK의 탄생 배경

과거에는 시스템 로그가 각 서버의 파일 형태로 흩어져 저장되었습니다. 시스템 관리자나 개발자는 문제가 발생하면 해당 서버에 직접 접속하여 grep, tail, awk 같은 명령어로 로그 파일을 일일이 뒤져야 했습니다. 이는 시간이 많이 걸리고 비효율적인 작업이었습니다.

특히 시스템의 규모가 커지고 여러 서버가 유기적으로 동작하는 분산 시스템이 보편화되면서 문제는 더욱 심각해졌습니다. 수십, 수백 대의 서버에서 쏟아지는 대규모 로그(Log) 데이터 속에서 의미 있는 정보를 찾고 장애의 원인을 분석하는 것은 거의 불가능에 가까워졌습니다.

이러한 중앙화되지 않은 로그 데이터의 문제를 해결하기 위해, 모든 로그를 한곳으로 모으고(Collect), 검색하기 쉽게 만들고(Search), 한눈에 파악할 수 있도록 시각화(Visualize)하려는 요구가 생겨났습니다. 이 요구에 가장 부합하는 오픈소스 조합으로 등장한 것이 바로 ELK 스택입니다.


ELK란 무엇인가?

ELK는 데이터 수집, 분석, 시각화를 위한 세 가지 오픈소스 프로젝트의 약자입니다.

  • Elasticsearch (엘라스틱서치): 검색 및 분석 엔진
  • Logstash (로그스태시): 데이터 수집 및 처리 파이프라인
  • Kibana (키바나): 데이터 시각화 및 탐색 도구

현재는 경량 데이터 수집기인 Beats가 추가되어 Elastic Stack이라고 부릅니다.


구성 요소 및 동작 과정

ELK 스택은 데이터를 수집, 가공, 저장, 시각화하는 파이프라인 형태로 동작합니다.

일반적인 ELK 스택(Elastic Stack)의 데이터 흐름

Beats (수집)

  • 역할: 경량 데이터 수집기 (Shipper)
  • 설명: 모니터링할 서버나 장비에 에이전트처럼 설치되어 다양한 유형의 데이터를 수집하고 Logstash나 Elasticsearch로 전송합니다. 역할에 따라 종류가 나뉩니다.
    • Filebeat: 로그 파일의 변경 사항을 수집 (가장 많이 사용)
    • Metricbeat: 시스템(CPU, Memory, Disk) 및 서비스(Nginx, Redis)의 메트릭(수치 데이터)을 수집
    • Packetbeat: 네트워크 패킷 데이터를 분석하여 애플리케이션 프로토콜 정보 수집

Logstash (가공)

  • 역할: 동적 데이터 처리 파이프라인
  • 설명: 다양한 소스(Beats, Kafka, S3 등)로부터 데이터를 입력받아, 원하는 형태로 가공한 뒤, 지정된 목적지로 전송합니다. Logstash의 파이프라인은 세 단계로 구성됩니다.
    • Input: 데이터 소스를 지정합니다. (예: file, syslog, beats)
    • Filter: 데이터를 가공하고 변환합니다. 가장 강력한 기능으로, 정규표현식을 이용해 비정형 로그를 구조화된 JSON 형태로 파싱(Parsing)하는 grok 필터가 핵심입니다.
    • Output: 가공된 데이터를 전송할 목적지를 지정합니다. (예: elasticsearch, s3, stdout)

Elasticsearch (저장 및 분석)

  • 역할: 분산 검색 및 분석 엔진 (ELK의 심장)
  • 설명: Apache Lucene을 기반으로 개발된 RESTful API를 제공하는 검색 엔진입니다. Logstash로부터 전달받은 데이터를 JSON 문서 형태로 저장하고, 거의 실시간으로 검색 및 집계가 가능하도록 인덱싱(Indexing)합니다. 특히 역인덱스(Inverted Index) 구조를 사용하여 매우 빠른 전문(Full-text) 검색을 지원합니다.

Kibana (시각화 및 탐색)

  • 역할: 데이터 시각화 대시보드 (ELK의 창)
  • 설명: Elasticsearch에 저장된 데이터를 사용자가 쉽게 탐색하고 분석할 수 있도록 시각화해주는 웹 인터페이스입니다. 사용자는 Kibana를 통해 다음과 같은 작업을 수행할 수 있습니다.
    • Discover: 저장된 원본 로그 데이터를 직접 검색하고 필터링합니다.
    • Visualize: 파이 차트, 라인 그래프, 히트맵 등 다양한 차트를 생성합니다.
    • Dashboard: 생성된 여러 시각화 자료들을 조합하여 실시간 모니터링 대시보드를 구축합니다.

데이터 처리의 전체 흐름

ELK 스택에서 데이터(로그)가 수집되어 사용자에게 보여지기까지의 과정은 다음과 같은 파이프라인 단계를 거칩니다.

  • 1단계: 데이터 수집 (Collection - Beats)

    • 어디서?: 웹 서버, 데이터베이스 서버, 애플리케이션 등 로그가 발생하는 모든 시스템.
    • 무엇을?: 각 서버에 설치된 경량 수집기 Beats(주로 Filebeat)가 로그 파일의 새로운 라인이나 시스템 메트릭을 감지하고 수집합니다.
    • 어떻게?: Beats는 수집한 데이터를 다음 단계인 Logstash 또는 Elasticsearch로 전송합니다. 이 과정은 매우 가볍게 동작하여 운영 서버에 거의 부하를 주지 않습니다.
  • 2단계: 데이터 가공 및 정제 (Processing - Logstash)

    • 어디서?: Logstash가 설치된 별도의 중앙 서버.
    • 무엇을?: Beats로부터 원본 로그 데이터(예: "127.0.0.1 - - [10/Oct/2022:13:55:36 +0000] \"GET /apache_pb.gif HTTP/1.0\" 200 2326")를 입력받습니다.
    • 어떻게?: Logstash는 grok 과 같은 필터를 사용하여 비정형 텍스트 로그를 의미 있는 구조의 JSON 데이터로 변환(파싱)합니다. 예를 들어, 위 로그를 {"ip": "127.0.0.1", "status_code": 200, "http_verb": "GET"} 와 같은 형태로 만듭니다. 불필요한 필드를 제거하거나 새로운 필드를 추가하는 등 데이터를 풍부하게 만드는 작업도 이 단계에서 수행됩니다.
  • 3단계: 데이터 저장 및 인덱싱 (Storage & Indexing - Elasticsearch)

    • 어디서?: Elasticsearch 클러스터.
    • 무엇을?: Logstash가 가공한 구조화된 JSON 데이터를 전달받습니다.
    • 어떻게?: Elasticsearch는 이 데이터를 저장하고, 거의 실시간으로 검색 및 분석이 가능하도록 인덱싱합니다. 특히 '역인덱스' 기술을 사용하여 어떤 단어가 어떤 문서에 포함되어 있는지 빠르게 찾아낼 수 있어, 대용량 데이터에서도 빠른 검색 속도를 보장합니다.
  • 4단계: 데이터 시각화 및 분석 (Visualization & Analysis - Kibana)

    • 어디서?: 사용자의 웹 브라우저.
    • 무엇을?: Elasticsearch에 저장되고 인덱싱된 데이터를 사용합니다.
    • 어떻게?: 사용자는 Kibana의 웹 인터페이스에 접속하여, 쿼리를 통해 원하는 데이터를 검색(Discover)하고, 이 결과를 바탕으로 파이 차트, 라인 그래프 등을 생성(Visualize)합니다. 최종적으로 이렇게 만들어진 여러 시각화 자료들을 조합하여 실시간 대시보드(Dashboard)를 구축하고 모니터링합니다.

ELK 스택의 장단점

장점

  • 강력한 검색 및 분석: Elasticsearch의 뛰어난 전문 검색과 집계 기능을 통해 대용량 데이터에서도 빠른 분석이 가능합니다.
  • 실시간 데이터 처리: 데이터가 발생하는 즉시 수집, 처리, 시각화하여 거의 실시간에 가까운 모니터링이 가능합니다.
  • 높은 확장성: 각 구성 요소가 분산 환경을 고려하여 설계되었기 때문에, 데이터가 증가함에 따라 수평적으로 확장(Scale-out)하기 용이합니다.
  • 유연한 데이터 처리: Logstash를 통해 다양한 형태의 비정형 데이터를 정형화하여 분석에 활용할 수 있습니다.
  • 활발한 오픈소스 생태계: 전 세계적으로 많은 사용자와 커뮤니티를 보유하고 있어 자료를 얻기 쉽고 다양한 플러그인을 활용할 수 있습니다.

단점

  • 복잡한 설치 및 운영: 각 컴포넌트의 버전 호환성을 맞춰야 하고, 대용량 데이터를 다루기 위한 클러스터 구성 및 튜닝 등 운영 난이도가 높은 편입니다.
  • 높은 자원 사용량: 특히 Elasticsearch는 메모리(RAM)를 많이 사용하며, 대규모 클러스터를 운영하기 위해서는 상당한 하드웨어 자원이 필요합니다.
  • 학습 곡선: 각 컴포넌트의 역할을 제대로 이해하고, Logstash 필터나 Kibana 쿼리 등을 능숙하게 사용하기까지 학습 시간이 필요합니다.
  • 상용 기능: 스택의 핵심 기능은 무료이지만, 머신러닝, 보안, 알림 등 고급 기능들은 유료 구독(X-Pack)을 통해서만 사용할 수 있습니다.

댓글