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 분석
비교:
| 구분 | Loki | ELK |
|---|---|---|
| 목적 | 로그 저장 | 로그 분석 |
| 검색 | 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 통합 운영 방법을 알아보겠습니다.