Docker Compose ELK Stack 로그 분석 환경 구축 완벽 가이드! Elasticsearch·Logstash·Kibana 운영 방법 알아보기

Production 서버가 성장하면 생성되는 로그 양도 빠르게 증가합니다.

초기 환경:

Container

↓

docker logs 확인

하지만 대규모 환경에서는 수십 개, 수백 개의 Container에서 발생하는 로그를 하나씩 확인하는 것은 불가능합니다.

문제:

  • 장애 원인 분석 어려움
  • 로그 검색 어려움
  • 서버별 로그 관리 복잡
  • 보안 이벤트 추적 어려움

이를 해결하기 위해 사용하는 대표적인 로그 분석 플랫폼이 ELK Stack입니다.

ELK 구조:

Application

↓

Logstash

↓

Elasticsearch

↓

Kibana

↓

검색 및 분석

ELK Stack은 대규모 서버 환경에서 로그를 수집하고 저장하며 분석하는 대표적인 Observability 구성 요소입니다.

이번 글에서는 Docker Compose 환경에서 ELK Stack 구성부터 Elasticsearch, Logstash, Kibana 역할, Container 로그 수집, 검색 분석, Production 운영 구조까지 알아보겠습니다.

ELK Stack이란 무엇인가?

ELK는 세 가지 오픈소스 기술의 조합입니다.

Elasticsearch

로그 저장 및 검색 엔진

역할:

  • 데이터 저장
  • 빠른 검색
  • 분석 처리

구조:

Log Data

↓

Elasticsearch

Logstash

로그 수집 및 변환 시스템

역할:

  • 로그 수집
  • 데이터 변환
  • Elasticsearch 전달

구조:

Application Log

↓

Logstash

↓

Elasticsearch

Kibana

로그 시각화 Dashboard

역할:

  • 검색
  • 그래프
  • 분석 화면

구조:

Elasticsearch

↓

Kibana

↓

사용자

Loki와 ELK Stack 차이

Container 환경에서는 Loki도 많이 사용합니다.

Loki:

가벼운 Container Logging

ELK:

대규모 Log 분석

비교:

구분LokiELK
목적로그 저장로그 분석
검색Label 기반강력한 검색
Resource낮음높음
대규모 분석보통강함

Docker Compose ELK Stack 구조

전체 구조:

Container

↓

Logstash

↓

Elasticsearch

↓

Kibana

↓

Engineer

Production 구조:

Application

↓

Filebeat

↓

Logstash

↓

Elasticsearch Cluster

↓

Kibana

Docker Compose Elasticsearch 구성

docker-compose.yml:

services:

  elasticsearch:

    image: docker.elastic.co/elasticsearch/elasticsearch:8.0.0

    environment:

      - discovery.type=single-node

    ports:

      - "9200:9200"

실행:

docker compose up -d

확인:

curl localhost:9200

정상:

Elasticsearch running

Docker Compose Logstash 구성

Logstash는 로그 데이터를 받아 처리합니다.

구조:

Log

↓

Input

↓

Filter

↓

Output

logstash.conf:

input {

  beats {

    port => 5044

  }

}


output {

  elasticsearch {

    hosts => ["elasticsearch:9200"]

  }

}

처리 과정:

로그 수집

↓

변환

↓

저장

Docker Compose Kibana 구성

Kibana는 Elasticsearch 데이터를 화면으로 보여줍니다.

Compose:

kibana:

  image: docker.elastic.co/kibana/kibana

  ports:

    - "5601:5601"

접속:

http://server-ip:5601

확인:

  • Log 검색
  • Dashboard
  • Visualization

Docker Compose Filebeat 구성

Filebeat는 서버 로그를 수집하는 경량 Agent입니다.

구조:

Container Log

↓

Filebeat

↓

Logstash

↓

Elasticsearch

수집:

  • Docker Log
  • Application Log
  • System Log

Docker Compose Container 로그 분석

예:

장애 발생:

Payment Service Error

Kibana 검색:

service:payment

error:true

결과:

오류 발생 시간

오류 메시지

Request 정보

Elasticsearch Index 구조

Elasticsearch는 데이터를 Index 단위로 관리합니다.

예:

application-log

server-log

security-log

구조:

Index

↓

Document

↓

Field

Kibana Dashboard 구성

Dashboard 예:

Server:

CPU

Memory

Disk

Application:

Error Count

Request

Latency

Security:

Login Failure

Attack Detection

ELK Stack 장애 분석 과정

상황:

서비스 오류 증가

분석:

Kibana 검색

↓

Error Log 확인

↓

시간 분석

↓

원인 파악

ELK Stack 보안 로그 분석

ELK는 보안 분석에도 활용됩니다.

수집:

  • Login 실패
  • 비정상 요청
  • Access Log
  • Firewall Log

구조:

Security Event

↓

Logstash

↓

Elasticsearch

↓

Kibana

Docker Compose ELK Production 구조

실제 기업 환경:

User

↓

Application

↓

Filebeat

↓

Logstash

↓

Elasticsearch Cluster

↓

Kibana

↓

Security Team

Elasticsearch Cluster 운영

대규모 환경에서는 Cluster 구성이 필요합니다.

구조:

Node 1

Node 2

Node 3

↓

Elasticsearch Cluster

장점:

  • 데이터 분산
  • 장애 대응
  • 검색 성능 향상

Docker Compose ELK 운영 주의사항

Resource 관리

Elasticsearch는 Memory 사용량이 높습니다.

Storage 관리

Log 데이터가 빠르게 증가합니다.

Retention 설정

오래된 Log 삭제 정책 필요

Security 적용

접근 인증 필요

Docker Compose ELK Stack Best Practice

추천:

  • Log 수집 표준화
  • Index 관리
  • Retention 설정
  • Dashboard 구성
  • Alert 연동
  • Security 분석 활용

운영 흐름:

Log 생성

↓

수집

↓

저장

↓

검색

↓

분석

↓

대응

자주 묻는 질문

ELK Stack은 Docker Compose에서 사용할 수 있나요?

가능합니다.

Elasticsearch, Logstash, Kibana 모두 Container로 운영할 수 있습니다.

Loki와 ELK 중 무엇을 사용해야 하나요?

간단한 Container Logging은 Loki, 대규모 분석은 ELK가 적합합니다.

Elasticsearch는 Database인가요?

일반 Database보다는 검색 및 분석 엔진에 가깝습니다.

작은 서버에서도 ELK 사용 가능한가요?

가능하지만 Resource 요구량이 높아 환경 확인이 필요합니다.

마무리

Docker Compose ELK Stack은 대규모 서버 환경에서 발생하는 로그를 수집하고 분석하는 강력한 운영 시스템입니다.

최종 구조:

Application

↓

Logstash

↓

Elasticsearch

↓

Kibana

↓

Log Analysis

Observability 환경에서는 Metrics(Prometheus), Logs(ELK/Loki), Tracing(Jaeger)을 함께 구성하면 장애 원인을 빠르게 분석할 수 있습니다.

다음 글에서는 Metrics, Logs, Tracing 데이터를 하나로 연결하는 Docker Compose OpenTelemetry 통합 운영 방법을 알아보겠습니다.

댓글 남기기